[Vm-dev] VM Maker: VMMaker.oscog-eem.1074.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Feb 23 00:31:21 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1074.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1074
Author: eem
Time: 22 February 2015, 4:29:56.443 pm
UUID: b88dbe30-1cfb-4a06-b6ad-89e63489893e
Ancestors: VMMaker.oscog-eem.1073
Use printstringof;maybeselect for more reliable
printing of selector in Newspeak privacy check.
=============== Diff against VMMaker.oscog-eem.1073 ===============
Item was changed:
----- Method: StackInterpreter>>lookupMethodInClass: (in category 'message sending') -----
lookupMethodInClass: class
| currentClass dictionary found |
<inline: false>
self assert: (self addressCouldBeClassObj: class).
currentClass := class.
[currentClass ~= objectMemory nilObject] whileTrue:
[dictionary := objectMemory followObjField: MethodDictionaryIndex ofObject: currentClass.
dictionary = objectMemory nilObject ifTrue:
["MethodDict pointer is nil (hopefully due a swapped out stub)
-- raise exception #cannotInterpret:."
self createActualMessageTo: class.
messageSelector := objectMemory splObj: SelectorCannotInterpret.
self sendBreakpoint: messageSelector receiver: nil.
^self lookupMethodInClass: (self superclassOf: currentClass)].
found := self lookupMethodInDictionary: dictionary.
(NewspeakVM
and: [CheckPrivacyViolations
and: [isPrivateSend not
and: [messageSelector ~= (objectMemory splObj: SelectorDoesNotUnderstand)
and: [(self accessModifierOfMethod: newMethod) ~= 0]]]]) ifTrue:
[self print: (self nameOfClass: currentClass); space.
self printStringOf: (messageSelector); print: ' from '.
+ self printStringOf: (self maybeSelectorOfMethod: method); cr].
- self printStringOf: (self fetchPointer: 0 ofObject: (self methodClassOf: method)); cr].
found ifTrue: [^currentClass].
currentClass := self superclassOf: currentClass].
"Could not find #doesNotUnderstand: -- unrecoverable error."
messageSelector = (objectMemory splObj: SelectorDoesNotUnderstand) ifTrue:
[self error: 'Recursive not understood error encountered'].
"Cound not find a normal message -- raise exception #doesNotUnderstand:"
self createActualMessageTo: class.
messageSelector := objectMemory splObj: SelectorDoesNotUnderstand.
self sendBreak: messageSelector + objectMemory baseHeaderSize
point: (objectMemory lengthOf: messageSelector)
receiver: nil.
^self lookupMethodInClass: class!
More information about the Vm-dev
mailing list