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)]]! |
Free forum by Nabble | Edit this page |