VM Maker: VMMaker.oscog-eem.2052.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2052.mcz

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

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

Name: VMMaker.oscog-eem.2052
Author: eem
Time: 26 December 2016, 9:43:10.758538 pm
UUID: 3121f1fe-286c-435b-8669-bb50f8cbe31f
Ancestors: VMMaker.oscog-eem.2051

Fix the regression in VMMaker.oscog-eem.2050's buildCodeGeneratorForInterpreter:includeAPIMethods:initializeClasses:.  Fix setting of optionsDictionary on instantiating a simulator.

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

Item was changed:
  ----- Method: CogVMSimulator class>>initializeWithOptions:objectMemoryClass: (in category 'class initialization') -----
  initializeWithOptions: optionsDictionaryOrArray objectMemoryClass: objectMemoryClassOrNil
  "The relevant ObjectMemory, Interpreter and Cogit classes must be initialized in order.
  This happens notionally every time we start the simulator,
  but in fact happens when ever we instantiate a simulator."
  initializationOptions := optionsDictionaryOrArray isArray
  ifTrue: [Dictionary newFromPairs: optionsDictionaryOrArray]
  ifFalse: [optionsDictionaryOrArray].
 
+ (self allSuperclasses copyUpThrough: InterpreterPrimitives) do:
+ [:sc| sc initializationOptions: initializationOptions].
+
  (objectMemoryClassOrNil ifNil: [self objectMemoryClass])
  initializeWithOptions: initializationOptions.
 
  self initializeWithOptions: initializationOptions.
 
  (self cogitClass withAllSuperclasses copyUpTo: Cogit) reverseDo:
  [:c| c initializeWithOptions: initializationOptions]!

Item was changed:
  ----- Method: StackInterpreterSimulator class>>initializeWithOptions:objectMemoryClass: (in category 'class initialization') -----
  initializeWithOptions: optionsDictionaryOrArray objectMemoryClass: objectMemoryClassOrNil
  "The relevant ObjectMemory and Interpreter classes must be initialized in order.
  This happens notionally every time we start the simulator,
  but in fact happens when ever we instantiate a simulator."
  initializationOptions := optionsDictionaryOrArray isArray
  ifTrue: [Dictionary newFromPairs: optionsDictionaryOrArray]
  ifFalse: [optionsDictionaryOrArray].
+
+ (self allSuperclasses copyUpThrough: InterpreterPrimitives) do:
+ [:sc| sc initializationOptions: initializationOptions].
+
  (objectMemoryClassOrNil ifNil: [self objectMemoryClass])
  initializeWithOptions: initializationOptions.
 
  self initializeWithOptions: initializationOptions!

Item was changed:
  ----- Method: VMMaker>>buildCodeGeneratorForInterpreter:includeAPIMethods:initializeClasses: (in category 'generate sources') -----
  buildCodeGeneratorForInterpreter: interpreterClass includeAPIMethods: getAPIMethods initializeClasses: initializeClasses
  "Answer the code generator for translating the interpreter."
 
  | cg interpreterClasses |
  initializeClasses ifTrue:
  [interpreterClass initializeWithOptions: optionsDictionary.
  interpreterClass hasCogit ifTrue:
  [interpreterClass cogitClass initializeWithOptions: optionsDictionary].
  interpreterClass objectMemoryClass initializationOptions: optionsDictionary].
 
  (cg := self createCodeGenerator) vmClass: interpreterClass.
 
  "Construct interpreterClasses as all classes from interpreterClass &
  objectMemoryClass up to VMClass in superclass to subclass order."
  interpreterClasses := OrderedCollection new.
  {interpreterClass. interpreterClass objectMemoryClass} do:
  [:vmClass| | theClass |
  theClass := vmClass.
  [theClass ~~ VMClass] whileTrue:
+ [theClass initializationOptions: interpreterClass initializationOptions.
- [theClass initializationOptions: optionsDictionary.
  interpreterClasses addFirst: theClass.
  theClass := theClass superclass]].
  interpreterClasses
  addFirst: VMClass;
  addAllLast: (cg nonStructClassesForTranslationClasses: interpreterClasses).
 
  initializeClasses ifTrue:
  [interpreterClasses do:
  [:ic|
  (ic respondsTo: #initializeWithOptions:)
+ ifTrue: [ic initializeWithOptions: interpreterClass initializationOptions]
- ifTrue: [ic initializeWithOptions: optionsDictionary]
  ifFalse: [ic initialize]].
  (cg structClassesForTranslationClasses: interpreterClasses) do:
  [:structClass| structClass initialize]].
 
  cg addStructClasses: (cg structClassesForTranslationClasses: interpreterClasses).
 
  interpreterClasses do: [:ic| cg addClass: ic].
 
  getAPIMethods ifTrue:
  [interpreterClass cogitClass ifNotNil:
  [:cogitClass|
  cg includeAPIFrom: (self
  buildCodeGeneratorForCogit: cogitClass
  includeAPIMethods: false
  initializeClasses: false)]].
 
  ^cg!