Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker-eem.323.mcz ==================== Summary ==================== Name: VMMaker-eem.323 Author: eem Time: 28 August 2013, 10:57:48.144 am UUID: 05aa46ce-aac1-485a-924b-92c61239d600 Ancestors: VMMaker-dtl.322 Merge RePlugin with Cog VMMaker.oscog-eem.337. . Merge RePlugin fix for http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=710375 http://bugs.squeak.org/view.php?id=7785 (pcre_info => pcre_fullinfo). Fix prim arg count for primPCREExecfromto. Merge Cog compilation warning fixes for rePluginFree: & rePluginMalloc:. =============== Diff against VMMaker-dtl.322 =============== Item was changed: ----- Method: RePlugin>>primPCREExecfromto (in category 're primitives') ----- primPCREExecfromto + "<rcvr primPCREExec: searchObject from: fromInteger to: toInteger>, where rcvr is an object with instance variables: - "<rcvr primPCREExec: searchObject> from: fromInteger to: toInteger>, where rcvr is an object with instance variables: 'patternStr compileFlags pcrePtr extraPtr errorStr errorOffset matchFlags' Apply the regular expression (stored in <pcrePtr> and <extratr>, generated from calls to primPCRECompile), to smalltalk String searchObject using <matchOptions>, beginning at offset <fromInteger> and continuing until offset <toInteger>. If there is no match, answer nil. Otherwise answer a ByteArray of offsets representing the results of the match." | searchObject searchBuffer length result matchSpacePtr matchSpaceSize fromInteger toInteger | <export: true> <var:#searchBuffer type: 'char *'> <var:#matchSpacePtr type: 'int *'> "Load Parameters" toInteger := interpreterProxy stackIntegerValue: 0. fromInteger := interpreterProxy stackIntegerValue: 1. searchObject := interpreterProxy stackObjectValue: 2. searchBuffer := interpreterProxy arrayValueOf: searchObject. length := interpreterProxy byteSizeOf: searchObject. self loadRcvrFromStackAt: 3. "Validate parameters" interpreterProxy success: (1 <= fromInteger). interpreterProxy success: (toInteger<=length). fromInteger := fromInteger - 1. "Smalltalk offsets are 1-based" interpreterProxy success: (fromInteger<=toInteger). "adjust length, searchBuffer" length := toInteger - fromInteger. searchBuffer := searchBuffer + fromInteger. "Load Instance Variables" pcrePtr := self rcvrPCREBufferPtr. extraPtr := self rcvrExtraPtr. matchFlags := self rcvrMatchFlags. matchSpacePtr := self rcvrMatchSpacePtr. matchSpaceSize := self rcvrMatchSpaceSize. interpreterProxy failed ifTrue:[^ nil]. result := self cCode: 'pcre_exec((pcre *)pcrePtr, (pcre_extra *)extraPtr, searchBuffer, length, 0, matchFlags, matchSpacePtr, matchSpaceSize)'. + interpreterProxy pop: 4; pushInteger: result. - interpreterProxy pop: 2; pushInteger: result. "empty call so compiler doesn't bug me about variables not used" self touch: searchBuffer; touch: matchSpacePtr; touch: matchSpaceSize; touch: length ! Item was changed: ----- Method: RePlugin>>primPCRENumSubPatterns (in category 're primitives') ----- primPCRENumSubPatterns "<rcvr primPCRENumSubPatterns>, where rcvr is an object with instance variables: 'patternStr compileFlags pcrePtr extraPtr errorStr errorOffset matchFlags' Return the number of subpatterns captured by the compiled pattern." <export: true> + | ncap | - "Load Parameters" self loadRcvrFromStackAt: 0. "Load Instance Variables" pcrePtr := self rcvrPCREBufferPtr. + self cCode: 'pcre_fullinfo((const pcre *)pcrePtr, NULL, PCRE_INFO_CAPTURECOUNT, &ncap)' + inSmalltalk: [ncap := -1]. + interpreterProxy pop: 1; pushInteger: ncap. - interpreterProxy pop: 1; pushInteger: (self cCode: 'pcre_info((pcre *)pcrePtr, NULL, NULL)'). ! Item was changed: ----- Method: RePlugin>>rePluginFree: (in category 'memory management') ----- rePluginFree: aPointer "Free a block of fixed memory allocated with rePluginMalloc. Instrumented version of C free() to facilitate leak analysis from Smalltalk. OS-specific variations on malloc/free, such as with MacOS, are handled by adding a C macro to the header file redefining malloc/free -- see the class comment" + <inline: true> - <inline: false> <var: #aPointer type: 'void * '> <returnTypeC: 'void'> numFrees := numFrees + 1. + aPointer notNil ifTrue: [self free: aPointer] ! - (aPointer) - ifTrue: [self cCode: 'free(aPointer)'] ! Item was changed: ----- Method: RePlugin>>rePluginMalloc: (in category 'memory management') ----- rePluginMalloc: anInteger "Allocate a block of fixed memory using C calls to malloc(). Instrumented to facilitate leak analysis from Smalltalk. Set global lastAlloc to anInteger. OS-specific variations on malloc/free, such as with MacOS, are handled by adding a C macro to the header file redefining malloc/free -- see the class comment" | aPointer | + <inline: true> - <export: true> - <inline: false> <var: #anInteger type: 'size_t '> <var: #aPointer type: 'void *'> <returnTypeC: 'void *'> numAllocs := numAllocs + 1. + (aPointer := self malloc: anInteger) notNil ifTrue: + [lastAlloc := anInteger]. - (aPointer := self cCode: 'malloc(anInteger)') - ifTrue: [lastAlloc := anInteger]. ^aPointer ! |
Free forum by Nabble | Edit this page |