[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