[Vm-dev] VM Maker: VMMaker.oscog-eem.2838.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Oct 9 00:53:03 UTC 2020
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2838.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2838
Author: eem
Time: 8 October 2020, 5:52:53.321836 pm
UUID: 0289dd2b-8f24-49bc-9361-4a38d4993acd
Ancestors: VMMaker.oscog-eem.2837
Make in-ime compilation smart enough to choose the bytecode set for the chosen VM when given a string to compile. Also make it robust enough to deal with omissions in the clusteredVariableNames in facades that don't implement certain selevtors (specialObjectsArrayAddress in other than Spur64).
=============== Diff against VMMaker.oscog-eem.2837 ===============
Item was added:
+ ----- Method: Cogit class>>compileMethodSource:options: (in category 'in-image compilation support') -----
+ compileMethodSource: source options: optionsArray
+ "The key thing here is to work out what bytecode set to use for the options..."
+ | encoderClass encoderClassName methodNode |
+ StackInterpreter initializeWithOptions: (self asOptionsDictionary: optionsArray).
+ encoderClassName := StackInterpreter classPool at: #BytecodeEncoderClassName.
+ (encoderClass := Smalltalk classNamed: encoderClassName) ifNil:
+ [self error: 'no available compiler backend for this bytecode set'].
+ methodNode := Parser new
+ encoderClass: encoderClass;
+ parse: '| temp | temp class' class: nil class noPattern: true notifying: nil ifFail: [self error: 'bad doit'].
+ ^methodNode generate!
Item was changed:
----- Method: Cogit class>>genAndDis:options: (in category 'in-image compilation') -----
genAndDis: methodOrDoitString options: optionsDictionaryOrArray
| tuple |
methodOrDoitString isCompiledCode ifFalse:
[^self
+ genAndDis: (self compileMethodSource: methodOrDoitString options: optionsDictionaryOrArray)
- genAndDis: (Compiler new
- compiledMethodFor: methodOrDoitString
- in: nil
- to: nil
- notifying: nil
- ifFail: nil
- logged: false)
options: optionsDictionaryOrArray].
tuple := self cog: methodOrDoitString
selectorOrNumCopied: (methodOrDoitString isCompiledBlock
ifTrue: [methodOrDoitString numCopiedValues]
ifFalse: [methodOrDoitString selector])
options: optionsDictionaryOrArray.
tuple second disassembleMethod: tuple last.
^tuple!
Item was changed:
----- Method: CurrentImageCoInterpreterFacade>>cogit: (in category 'initialize-release') -----
cogit: aCogit
| accessors |
cogit := aCogit.
cogit objectMemory ifNil:
[cogit instVarNamed: 'objectMemory' put: objectMemory].
coInterpreter cogit: aCogit.
(objectMemory respondsTo: #cogit:) ifTrue:
[objectMemory cogit: aCogit].
(objectMemory respondsTo: #coInterpreter:) ifTrue:
[objectMemory coInterpreter: coInterpreter].
coInterpreter setUpForUseByFacade: self.
objectMemory setUpForUseByFacade: self.
accessors := CurrentImageCoInterpreterFacade organization listAtCategoryNamed: #accessing.
coInterpreter class clusteredVariableNames do:
[:var|
(Symbol lookup: (var first = $C ifTrue: ['c', var allButFirst] ifFalse: [var]), 'Address') ifNotNil:
[:accessor|
(accessors includes: accessor) ifTrue:
+ [[self perform: accessor]
+ on: SubclassResponsibility
+ do: [:ex| ex return]]]].
- [self perform: accessor]]].
self initializeObjectMap!
More information about the Vm-dev
mailing list