[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