Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.333.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.333 Author: eem Time: 22 August 2013, 8:59:24.657 am UUID: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54 Ancestors: VMMaker.oscog-eem.332
Fix cogit.c for non-Newspeak by marking the unpaired method list methods with <option: #NewspeakVM>.
=============== Diff against VMMaker.oscog-eem.332 ===============
Item was changed: ----- Method: CogMethodZone>>addToUnpairedMethodList: (in category 'accessing') ----- addToUnpairedMethodList: aCogMethod + <option: #NewspeakVM> <var: #aCogMethod type: #'CogMethod *'> self assert: aCogMethod cmType = CMMethod. self assert: (unpairedMethodList == nil or: [unpairedMethodList cmType = CMMethod]). aCogMethod nextMethod: unpairedMethodList. unpairedMethodList := aCogMethod!
Item was changed: ----- Method: CogMethodZone>>findPreviouslyCompiledVersionOf:with: (in category 'accessing') ----- findPreviouslyCompiledVersionOf: aMethodObj with: aSelectorOop "Newspeak uses a set of methods to implement accessors, a setter and a getter for each inst var offset (e.g. 0 to 255). These accessors are installed under the relevant selectors in different method dictionaries as required. These methods effectively have multiple selectors. The current inline cache design stores the selector of a linked send in the header of the target method. So this requires a one-to-many mapping of bytecoded method to cog method, with the bytecoded method referring directly to only one cog method, which will have a specific selector, not necessarily the right one. It is therefore worth-while searching for a cog method on this bytecoded method that has the right selector. To speed up the search we maintain all such unpaired methods on the unpairedMethodList." <returnTypeC: #'CogMethod *'> + <option: #NewspeakVM> | cogMethod | <var: #cogMethod type: #'CogMethod *'> ((coInterpreter methodHasCogMethod: aMethodObj) and: [(coInterpreter methodClassAssociationOf: aMethodObj) = objectMemory nilObject]) ifTrue: [cogMethod := unpairedMethodList. [cogMethod notNil] whileTrue: [self assert: cogMethod cmType = CMMethod. (cogMethod selector = aSelectorOop and: [cogMethod methodObject = aMethodObj]) ifTrue: [^cogMethod]. cogMethod := cogMethod nextMethod]]. ^nil!
Item was changed: ----- Method: CogMethodZone>>removeFromUnpairedMethodList: (in category 'accessing') ----- removeFromUnpairedMethodList: aCogMethod + <option: #NewspeakVM> <var: #aCogMethod type: #'CogMethod *'> | prevMethod | <var: #prevMethod type: #'CogMethod *'> self assert: aCogMethod cmType = CMMethod. aCogMethod = unpairedMethodList ifTrue: [unpairedMethodList := aCogMethod nextMethod. ^nil]. prevMethod := unpairedMethodList. [prevMethod notNil] whileTrue: [self assert: (prevMethod ~~ nil and: [prevMethod cmType = CMMethod]). prevMethod nextMethod = aCogMethod ifTrue: [prevMethod nextMethod: aCogMethod nextMethod. ^nil]. prevMethod := aCogMethod nextMethod]!
vm-dev@lists.squeakfoundation.org