[Vm-dev] VM Maker: VMMaker-dtl.263.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Jan 8 15:16:45 UTC 2012
David T. Lewis uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-dtl.263.mcz
==================== Summary ====================
Name: VMMaker-dtl.263
Author: dtl
Time: 8 January 2012, 10:15:49.82 am
UUID: d27692ee-cbe0-4f61-8c3d-6bec64b30df8
Ancestors: VMMaker-dtl.262
VMMaker 4.7.20
Define HAVE_INTERP_H in the generated interp.h file to enable check for included file, e.g. from sqMemoryAccess.h.
Check argument count in primitivePerformInSuperclass, fail primitive if not 3 or 4.
=============== Diff against VMMaker-dtl.262 ===============
Item was changed:
----- Method: CCodeGenerator>>storeHeaderFor:onFile: (in category 'public') -----
storeHeaderFor: interpreterClassName onFile: fileName
"Store C header code for this interpreter on the given file."
| aStream |
aStream := CrLfFileStream forceNewFileNamed: fileName.
aStream ifNil: [Error signal: 'Could not open C header file: ', fileName].
aStream
nextPutAll: '/* ';
nextPutAll: VMMaker headerNotice;
+ nextPutAll: ' */'; cr; cr;
+ nextPutAll: '#ifndef HAVE_INTERP_H'; cr;
+ nextPutAll: '#define HAVE_INTERP_H'; cr;
+ nextPutAll: '#endif'; cr; cr.
- nextPutAll: ' */'; cr; cr.
self emitVmmVersionOn: aStream.
(Smalltalk classNamed: interpreterClassName)
emitInterpreterProxyVersionOn: aStream.
self emitDefineBytesPerWordOn: aStream.
self emitDefineMemoryAccessInImageOn: aStream.
aStream cr.
aStream close
!
Item was changed:
----- Method: Interpreter>>primitivePerformInSuperclass (in category 'control primitives') -----
primitivePerformInSuperclass
| lookupClass rcvr currentClass |
lookupClass := self stackTop.
rcvr := self stackValue: 3.
currentClass := self fetchClassOf: rcvr.
[currentClass ~= lookupClass]
whileTrue:
[currentClass := self superclassOf: currentClass.
+ currentClass = nilObj ifTrue: [^self primitiveFailFor: PrimErrBadArgument]].
- currentClass = nilObj ifTrue: [^ self primitiveFail]].
argumentCount = 3
ifTrue: ["normal primitive call with 3 arguments expected on the stack"
self popStack.
self primitivePerformAt: lookupClass.
self successful ifFalse:
[self push: lookupClass]]
+ ifFalse: [argumentCount = 4
+ ifTrue: ["mirror primitive call with extra argument specifying object to serve as receiver"
+ | s1 s2 s3 s4 s5 |
+ "save stack contents"
+ s1 := self popStack. "lookupClass"
+ s2 := self popStack. "args"
+ s3 := self popStack. "selector"
+ s4 := self popStack. "mirror receiver"
+ s5 := self popStack. "actual receiver"
+ "slide stack up one, omitting the actual receiver parameter"
+ self push: s4. "mirror receiver"
- ifFalse: ["mirror primitive call with extra argument specifying object to serve as receiver"
- | s1 s2 s3 s4 s5 |
- "save stack contents"
- s1 := self popStack. "lookupClass"
- s2 := self popStack. "args"
- s3 := self popStack. "selector"
- s4 := self popStack. "mirror receiver"
- s5 := self popStack. "actual receiver"
- "slide stack up one, omitting the actual receiver parameter"
- self push: s4. "mirror receiver"
- self push: s3. "selector"
- self push: s2. "args"
- "perform as if mirror receiver had been the actual receiver"
- self primitivePerformAt: lookupClass.
- self successful ifFalse:
- ["restore original stack"
- self pop: 3. "args, selector, mirror receiver"
- self push: s5. "actual receiver"
- self push: s4. "mirror receiver"
self push: s3. "selector"
self push: s2. "args"
+ "perform as if mirror receiver had been the actual receiver"
+ self primitivePerformAt: lookupClass.
+ self successful ifFalse:
+ ["restore original stack"
+ self pop: 3. "args, selector, mirror receiver"
+ self push: s5. "actual receiver"
+ self push: s4. "mirror receiver"
+ self push: s3. "selector"
+ self push: s2. "args"
+ self push: s1. "lookup class" ]]
+ ifFalse: ["wrong number of arguments"
+ ^self primitiveFailFor: PrimErrBadNumArgs]]
- self push: s1. "lookup class" ]]
!
Item was changed:
----- Method: VMMaker class>>versionString (in category 'version testing') -----
versionString
"VMMaker versionString"
+ ^'4.7.20'!
- ^'4.7.19'!
More information about the Vm-dev
mailing list