VM Maker: VMMaker-eem.323.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker-eem.323.mcz

commits-2
 
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
  !