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

commits at source.squeak.org commits at source.squeak.org
Thu Mar 23 03:12:26 UTC 2017


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

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

Name: VMMaker.oscog-eem.2176
Author: eem
Time: 22 March 2017, 8:11:39.73899 pm
UUID: b18f5fff-59c9-4fb4-bc56-50a29e43c0a9
Ancestors: VMMaker.oscog-eem.2175

Fix in-image compilation for imported Sista methods which may not be decompileable.

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

Item was changed:
+ ----- Method: Cogit class>>asOptionsDictionary: (in category 'in-image compilation support') -----
- ----- Method: Cogit class>>asOptionsDictionary: (in category 'in-image compilation') -----
  asOptionsDictionary: optionsDictionaryOrArray
  	optionsDictionaryOrArray isArray ifTrue:
  		[| dict |
  		dict := Dictionary new.
  		self assert: optionsDictionaryOrArray size even.
  		1 to: optionsDictionaryOrArray size by: 2 do:
  			[:i| | key |
  			key := optionsDictionaryOrArray at: i.
  			self assert: key isSymbol.
  			dict at: key put: (optionsDictionaryOrArray at: i + 1)].
  		^dict].
  	^optionsDictionaryOrArray!

Item was changed:
+ ----- Method: Cogit class>>attemptToComputeTempNamesFor: (in category 'in-image compilation support') -----
- ----- Method: Cogit class>>attemptToComputeTempNamesFor: (in category 'in-image compilation') -----
  attemptToComputeTempNamesFor: aCompiledMethod
  	(aCompiledMethod respondsTo: #tempNames) ifTrue:
  		[| blocks |
  		 blocks := aCompiledMethod embeddedBlockClosures.
  		 initializationOptions
  			at: #tempNames
+ 			put: (Dictionary withAll: {aCompiledMethod initialPC -> ([aCompiledMethod tempNames]
+ 																		on: MessageNotUnderstood
+ 																		do: [:ex|
+ 																			(self isSistaMessage: ex message unimplementedIn: Decompiler) ifTrue:
+ 																				[^self].
+ 																			 ex pass])},
- 			put: (Dictionary withAll: {aCompiledMethod initialPC -> aCompiledMethod tempNames},
  				(blocks
  					ifEmpty: [#()]
  					ifNotEmpty:
  						[aCompiledMethod embeddedBlockClosures
  							with: ((aCompiledMethod methodNode schematicTempNamesString allButFirst:
  									(aCompiledMethod methodNode schematicTempNamesString indexOf: $[)) piecesCutWhere: [:a :b| b = $[])
  							collect: [:c :s| c startpc -> s substrings]]))]!

Item was changed:
+ ----- Method: Cogit class>>instanceForTests: (in category 'in-image compilation support') -----
- ----- Method: Cogit class>>instanceForTests: (in category 'in-image compilation') -----
  instanceForTests: optionsDictionaryOrArray
  	"Initialize all the relevant classes from the options and answer a new instance of me."
  	| initOptions |
  	initOptions := self asOptionsDictionary: optionsDictionaryOrArray.
  	CoInterpreter initializeWithOptions: initOptions.
  	CoInterpreter objectMemoryClass initializeWithOptions: initOptions.
  	self initializeWithOptions: initOptions.
  	^self new!

Item was added:
+ ----- Method: Cogit class>>isSistaMessage:unimplementedIn: (in category 'in-image compilation support') -----
+ isSistaMessage: aMessageOrSelector unimplementedIn: aClass
+ 	| selector |
+ 	selector := aMessageOrSelector selector.
+ 	^(InstructionClient includesSelector: selector)
+ 	   and: [(aClass includesSelector: selector) not]!

Item was changed:
  ----- Method: CurrentImageCoInterpreterFacade>>oopForObject: (in category 'object map') -----
  oopForObject: o
+ 	self subclassResponsibility!
- 	^(o isInteger and: [o between: objectMemory minSmallInteger and: objectMemory maxSmallInteger])
- 		ifTrue: [o << 1 bitOr: 1]
- 		ifFalse: [objectMap at: o ifAbsentPut: [objectMap size * 8 + (1024 * 1024)]]!

Item was changed:
  ----- Method: CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation>>objectForOop: (in category 'private-cacheing') -----
  objectForOop: anOop
  	"This is a keyAtValue: search and so needs speeding up either by a reverse map or a simple cache."
  	^(anOop bitAnd: 7) caseOf: {
  		[0] -> [anOop = cachedOop
  				ifTrue: [cachedObject]
  				ifFalse: [cachedObject := objectMap keyAtValue: anOop. "may raise Error"
+ 						cachedOop := anOop. "Don't assign until accessed without error"
- 						cachedOop := anOop. "Dom't assign until accessed without error"
  						cachedObject]].
  		[1] -> [anOop signedIntFromLong64 >> 3].
  		[2] -> [Character value: anOop >> 3].
  		[4] -> [objectMemory smallFloatValueOf: anOop] }!

Item was added:
+ ----- Method: CurrentImageCoInterpreterFacadeForSpurObjectRepresentation>>fetchClassTagOf: (in category 'accessing') -----
+ fetchClassTagOf: anOop
+ 	| class |
+ 	self assert: SmalltalkImage current isRunningSpur.
+ 	class := (self objectForOop: anOop) class.
+ 	^SystemVersion current isPharo
+ 		ifTrue: [class basicIdentityHash]
+ 		ifFalse: [class identityHash]!

Item was changed:
  ----- Method: CurrentImageCoInterpreterFacadeForSpurObjectRepresentation>>objectForOop: (in category 'private-cacheing') -----
  objectForOop: anOop
  	"This is a keyAtValue: search and so needs speeding up either by a reverse map or a simple cache."
  	^(anOop bitAnd: 3) caseOf: {
  		[0] -> [anOop = cachedOop
  				ifTrue: [cachedObject]
  				ifFalse: [cachedObject := objectMap keyAtValue: anOop. "may raise Error"
+ 						cachedOop := anOop. "Don't assign until accessed without error"
- 						cachedOop := anOop. "Dom't assign until accessed without error"
  						cachedObject]].
  		[1] -> [anOop signedIntFromLong >> 1].
  		[2] -> [Character value: anOop >> 2].
  		[3] -> [anOop signedIntFromLong >> 1] }!

Item was changed:
  ----- Method: CurrentImageCoInterpreterFacadeForSqueakV3ObjectRepresentation>>objectForOop: (in category 'private-cacheing') -----
  objectForOop: anOop
  	"This is a keyAtValue: search and so needs speeding up either by a reverse map or a simple cache."
  	^(anOop bitAnd: 3) caseOf: {
  		[0] -> [anOop = cachedOop
  				ifTrue: [cachedObject]
  				ifFalse: [cachedObject := objectMap keyAtValue: anOop. "may raise Error"
+ 						cachedOop := anOop. "Don't assign until accessed without error"
- 						cachedOop := anOop. "Dom't assign until accessed without error"
  						cachedObject]].
  		[1] -> [anOop signedIntFromLong >> 1].
  		[3] -> [anOop signedIntFromLong >> 1] }!

Item was added:
+ ----- Method: CurrentImageCoInterpreterFacadeForSqueakV3ObjectRepresentation>>oopForObject: (in category 'object map') -----
+ oopForObject: o
+ 	^(o isInteger and: [o between: objectMemory minSmallInteger and: objectMemory maxSmallInteger])
+ 		ifTrue: [o << 1 bitOr: 1]
+ 		ifFalse: [objectMap at: o ifAbsentPut: [objectMap size * 8 + (1024 * 1024)]]!



More information about the Vm-dev mailing list