Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.419.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.419 Author: eem Time: 30 September 2013, 12:20:58.18 pm UUID: c200c5ad-4e63-4a11-8f12-91986fc1781b Ancestors: VMMaker.oscog-eem.418
Handle forwarded message selectors in send fault processing.
=============== Diff against VMMaker.oscog-eem.418 ===============
Item was changed: ----- Method: StackInterpreter>>findNewMethodInClassTag: (in category 'message sending') ----- + findNewMethodInClassTag: classTagArg - findNewMethodInClassTag: classTag "Find the compiled method to be run when the current messageSelector is sent to the given class, setting the values of 'newMethod' and 'primitiveIndex'." + | ok class classTag | - | ok class | <inline: false> + ok := self lookupInMethodCacheSel: messageSelector classTag: classTagArg. - ok := self lookupInMethodCacheSel: messageSelector classTag: classTag. ok ifFalse: "entry was not found in the cache; look it up the hard way " + [classTag := classTagArg. + ((objectMemory isOopForwarded: messageSelector) + or: [objectMemory isForwardedClassTag: classTag]) ifTrue: + [(objectMemory isOopForwarded: messageSelector) ifTrue: + [messageSelector := self handleForwardedSelectorFaultFor: messageSelector]. + (objectMemory isForwardedClassTag: classTag) ifTrue: + [classTag := self handleForwardedSendFaultFor: classTag]. + ok := self lookupInMethodCacheSel: messageSelector classTag: classTag. - [(objectMemory isForwardedClassTag: lkupClassTag) ifTrue: - [lkupClassTag := self handleForwardedSendFaultFor: lkupClassTag. - ok := self lookupInMethodCacheSel: messageSelector classTag: lkupClassTag. ok ifTrue: [^nil]]. class := objectMemory classForClassTag: classTag. self lookupMethodInClass: class. self addNewMethodToCache: class]!
Item was added: + ----- Method: StackInterpreter>>handleForwardedSelectorFaultFor: (in category 'message sending') ----- + handleForwardedSelectorFaultFor: selectorOop + "Handle a send fault that is due to a send using a forwarded selector. + Unforward the selector and follow the current method and special + selectors array to unforward the source of the forwarded selector." + self assert: (objectMemory isOopForwarded: selectorOop). + + objectMemory + followForwardedObjectFields: method + toDepth: 0; + followForwardedObjectFields: (objectMemory splObj: SpecialSelectors) + toDepth: 0. + ^objectMemory followForwarded: selectorOop!
Item was changed: ----- Method: StackInterpreter>>internalFindNewMethod (in category 'message sending') ----- internalFindNewMethod "Find the compiled method to be run when the current messageSelector is sent to the class 'lkupClass', setting the values of 'newMethod' and 'primitiveIndex'." | ok | <inline: true> ok := self lookupInMethodCacheSel: messageSelector classTag: lkupClassTag. ok ifFalse: "entry was not found in the cache; look it up the hard way" [self externalizeIPandSP. + ((objectMemory isOopForwarded: messageSelector) + or: [objectMemory isForwardedClassTag: lkupClassTag]) ifTrue: + [(objectMemory isOopForwarded: messageSelector) ifTrue: + [messageSelector := self handleForwardedSelectorFaultFor: messageSelector]. + (objectMemory isForwardedClassTag: lkupClassTag) ifTrue: + [lkupClassTag := self handleForwardedSendFaultFor: lkupClassTag]. - (objectMemory isForwardedClassTag: lkupClassTag) ifTrue: - [lkupClassTag := self handleForwardedSendFaultFor: lkupClassTag. ok := self lookupInMethodCacheSel: messageSelector classTag: lkupClassTag. ok ifTrue: [^nil]]. lkupClass := objectMemory classForClassTag: lkupClassTag. self lookupMethodInClass: lkupClass. self internalizeIPandSP. self addNewMethodToCache: lkupClass]!
vm-dev@lists.squeakfoundation.org