[Vm-dev] VM Maker: VMMaker.oscog-eem.2059.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Dec 31 00:33:08 UTC 2016


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2059.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.2059
Author: eem
Time: 30 December 2016, 4:32:26.95142 pm
UUID: fc6d415a-2e9d-4a42-abae-71dce27c857a
Ancestors: VMMaker.oscog-eem.2058

SmartSyntaxPluginSimulator
Simplify getting at the interpreterProxy and hence streamline asSmallIntegerObj et al.

Add support for logging (print frame, primitive selecvtor and result).

=============== Diff against VMMaker.oscog-eem.2058 ===============

Item was added:
+ ----- Method: Boolean>>asBooleanObj (in category '*VMMaker-interpreter simulator') -----
+ asBooleanObj
+ 	^(Notification new tag: #getInterpreter; signal)
+ 		ifNotNil: [:interpreter| interpreter booleanObjectOf: self]
+ 		ifNil: [self]!

Item was changed:
  ----- Method: Integer>>asCharPtr (in category '*VMMaker-interpreter simulator') -----
  asCharPtr
+ 	^(Notification new tag: #getInterpreter; signal)
+ 		ifNotNil: [:interpreter|
- 	^(Notification new tag: #getSimulator; signal)
- 		ifNotNil: [:simulator| | interpreter |
- 				interpreter := simulator getInterpreter.
  				(interpreter firstIndexableField: self) asInteger
  					coerceTo: #'char *'
  					sim: interpreter]
  		ifNil: [self]!

Item was changed:
  ----- Method: Integer>>asSmallIntegerObj (in category '*VMMaker-interpreter simulator') -----
  asSmallIntegerObj
+ 	^(Notification new tag: #getInterpreter; signal)
+ 		ifNotNil: [:interpreter| interpreter integerObjectOf: self]
- 	^(Notification new tag: #getSimulator; signal)
- 		ifNotNil: [:simulator| simulator getInterpreter integerObjectOf: self]
  		ifNil: [self]!

Item was changed:
  ----- Method: Object>>stAt: (in category '*VMMaker-translation support') -----
  stAt: index
  	"Simulation of generateStAt:on:indent:"
  	
+ 	^(Notification new tag: #getInterpreter; signal)
+ 		ifNotNil: [:interpreter| interpreter stObject: self at: index]
- 	^(Notification new tag: #getSimulator; signal)
- 		ifNotNil: [:simulator| simulator stObject: self at: index]
  		ifNil: [self at: index]!

Item was changed:
  ----- Method: Object>>stAt:put: (in category '*VMMaker-translation support') -----
  stAt: index put: value
  	"Simulation of generateStAtPut:on:indent:"
  	
+ 	^(Notification new tag: #getInterpreter; signal)
+ 		ifNotNil: [:interpreter| interpreter stObject: self at: index put: value]
- 	^(Notification new tag: #getSimulator; signal)
- 		ifNotNil: [:simulator| simulator getInterpreter stObject: self at: index put: value]
  		ifNil: [self at: index put: value]!

Item was changed:
  InterpreterPlugin subclass: #SmartSyntaxPluginSimulator
+ 	instanceVariableNames: 'actualPlugin signatureMap forMap pluginClass logging'
- 	instanceVariableNames: 'actualPlugin signatureMap forMap pluginClass'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'VMMaker-SmartSyntaxPlugins'!

Item was changed:
  ----- Method: SmartSyntaxPluginSimulator>>doesNotUnderstand: (in category 'message forwarding') -----
  doesNotUnderstand: aMessage
  	| signature selector parameters result |
  	signature := signatureMap
  					at: aMessage selector
  					ifAbsent: [^super doesNotUnderstand: aMessage].
+ 	self log: [interpreterProxy coInterpreter printExternalHeadFrame; print: aMessage selector; cr].
  	selector := signature first.
  	parameters := signature second.
  	signature third "receiver block" value: (interpreterProxy stackValue: parameters size).
  	interpreterProxy failed ifTrue:
+ 		[self log: 'failed in marshalling'.
+ 		 ^nil].
- 		[^nil].
  	result := [actualPlugin
  					perform: selector
  					withArguments: (parameters withIndexCollect:
  										[:block :index|
  										block value: (interpreterProxy stackValue: parameters size - index)])]
  					on: Notification
  					do: [:ex|
+ 						ex tag == #getInterpreter ifTrue: [ex resume: interpreterProxy] ifFalse:
+ 						[ex tag == #getSimulator ifTrue: [ex resume: self]
+ 							ifFalse: [ex pass]]].
- 						ex tag == #getSimulator
- 							ifTrue: [ex resume: self]
- 							ifFalse: [ex pass]].
  	interpreterProxy failed ifTrue:
+ 		[self log: 'failed in execution'.
+ 		 ^nil].
- 		[^nil].
  	result == actualPlugin ifTrue:
+ 		[self log: '^self'.
+ 		 interpreterProxy pop: interpreterProxy methodArgumentCount.
- 		[interpreterProxy pop: interpreterProxy methodArgumentCount.
  		 ^nil].
+ 	self log: [interpreterProxy coInterpreter print: '^'; shortPrintOop: result; flush].
  	interpreterProxy
  		pop: interpreterProxy methodArgumentCount + 1
  		thenPush: result.
  	^nil "SmartSyntaxPluginPrimitives return null"!

Item was added:
+ ----- Method: SmartSyntaxPluginSimulator>>log: (in category 'simulation support') -----
+ log: aBlockOrString
+ 	logging ifTrue:
+ 		[aBlockOrString isBlock
+ 			ifTrue: [aBlockOrString value]
+ 			ifFalse: [interpreterProxy coInterpreter print: aBlockOrString; cr; flush]]!

Item was added:
+ ----- Method: SmartSyntaxPluginSimulator>>logging (in category 'accessing') -----
+ logging
+ 	^logging!

Item was added:
+ ----- Method: SmartSyntaxPluginSimulator>>logging: (in category 'accessing') -----
+ logging: anObject
+ 	logging := anObject!

Item was changed:
  ----- Method: SmartSyntaxPluginSimulator>>setInterpreter: (in category 'initialize') -----
  setInterpreter: anInterpreterProxy
  	interpreterProxy := anInterpreterProxy.
  	actualPlugin setInterpreter: anInterpreterProxy.
+ 	logging ifNil: [logging := false].
  	self computeSignatureMap!



More information about the Vm-dev mailing list