<div dir="ltr"><div><div>Yes, I always wanted to ask what oops signed-ness was good for?<br></div>IMO, they could simply be declared usqInt.<br><br></div>Nicolas<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">
2013/4/4 Esteban Lorenzano <span dir="ltr">&lt;<a href="mailto:estebanlm@gmail.com" target="_blank">estebanlm@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
oh, well... I think I have a 100% reproducible case, which is already something  :)<br>
<br>
anyway, I will integrate your changes tomorrow or monday :)<br>
<br>
cheers,<br>
Esteban<br>
<div class="HOEnZb"><div class="h5"><br>
On Apr 4, 2013, at 1:37 AM, Igor Stasenko &lt;<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>&gt; wrote:<br>
<br>
&gt; On 4 April 2013 00:37, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Guys, please integrate this asap.  This is a horrible bug that is probably<br>
&gt;&gt; causing all sorts of crashes in large images on linux, and should have been<br>
&gt;&gt; generally causing horrible crashes all over the place.  Bugs are good at<br>
&gt;&gt; lurking :-/.<br>
&gt;&gt;<br>
&gt;<br>
&gt; Glad we have less and less of them. Thanks for your effort, Eliot!<br>
&gt;<br>
&gt; I am currently at some remote place in Switzerland ;) , and cannot do<br>
&gt; much right now..<br>
&gt; We&#39;re also have an interesting bug with pharo VM which (i guess)<br>
&gt; related to some stack (mis)balancing,<br>
&gt; we have a reproducible case where running code given you SmallInteger&gt;&gt;DNU...<br>
&gt; because some SmallInteger pops up on the stack at some point. At least<br>
&gt; it doesn&#39;t causing VM crash.<br>
&gt; But i had no time to investigate that. Esteban, do you having any new<br>
&gt; details on that?<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Apr 3, 2013 at 3:27 PM, &lt;<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Eliot Miranda uploaded a new version of VMMaker to project VM Maker:<br>
&gt;&gt;&gt; <a href="http://source.squeak.org/VMMaker/VMMaker.oscog-eem.281.mcz" target="_blank">http://source.squeak.org/VMMaker/VMMaker.oscog-eem.281.mcz</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ==================== Summary ====================<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Name: VMMaker.oscog-eem.281<br>
&gt;&gt;&gt; Author: eem<br>
&gt;&gt;&gt; Time: 3 April 2013, 3:27:02.058 pm<br>
&gt;&gt;&gt; UUID: 64be55df-6421-4087-a712-5c07419806c7<br>
&gt;&gt;&gt; Ancestors: VMMaker.oscog-eem.280<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cogit: Fix *HORRIBLE* yet ancient bug with the CogObjectRep.<br>
&gt;&gt;&gt; Both CogObjectRepresentationForSqueakV3&gt;&gt;couldBeObject: &amp;<br>
&gt;&gt;&gt; CogObjectRepresentationForSqueakV3&gt;&gt;shouldAnnotateObjectReference:<br>
&gt;&gt;&gt; used signed comparisons for oops and so once the heap size<br>
&gt;&gt;&gt; pushes oops into the upper half of the address space constant<br>
&gt;&gt;&gt; oops in machine code were no longer being updated by the GC.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; StackInterpreter: reqrite the login for printing methods so that<br>
&gt;&gt;&gt; printing the frame of a bad receiver won&#39;t seg fault.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; =============== Diff against VMMaker.oscog-eem.280 ===============<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method: CogObjectRepresentationForSqueakV3&gt;&gt;couldBeObject: (in<br>
&gt;&gt;&gt; category &#39;garbage collection&#39;) -----<br>
&gt;&gt;&gt;  couldBeObject: oop<br>
&gt;&gt;&gt;        ^(objectMemory isNonIntegerObject: oop)<br>
&gt;&gt;&gt; +         and: [self oop: oop isGreaterThanOrEqualTo: objectMemory<br>
&gt;&gt;&gt; nilObject]!<br>
&gt;&gt;&gt; -         and: [oop asUnsignedInteger &gt;= objectMemory nilObject]!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method:<br>
&gt;&gt;&gt; CogObjectRepresentationForSqueakV3&gt;&gt;shouldAnnotateObjectReference: (in<br>
&gt;&gt;&gt; category &#39;garbage collection&#39;) -----<br>
&gt;&gt;&gt;  shouldAnnotateObjectReference: anOop<br>
&gt;&gt;&gt;        &quot;self assert: ((objectMemory isIntegerObject: anOop)<br>
&gt;&gt;&gt;                                or: [objectMemory addressCouldBeObj:<br>
&gt;&gt;&gt; anOop]).&quot;<br>
&gt;&gt;&gt;        ^(objectMemory isNonIntegerObject: anOop)<br>
&gt;&gt;&gt; +         and: [self oop: anOop isGreaterThan: objectMemory trueObject]!<br>
&gt;&gt;&gt; -         and: [anOop &gt; objectMemory trueObject]!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method: StackInterpreter class&gt;&gt;requiredMethodNames (in category<br>
&gt;&gt;&gt; &#39;translation&#39;) -----<br>
&gt;&gt;&gt;  requiredMethodNames<br>
&gt;&gt;&gt;        &quot;return the list of method names that should be retained for<br>
&gt;&gt;&gt; export or other support reasons&quot;<br>
&gt;&gt;&gt;        | requiredList |<br>
&gt;&gt;&gt;        requiredList := self exportAPISelectors.<br>
&gt;&gt;&gt;        requiredList addAll: NewObjectMemory requiredMethodNames.<br>
&gt;&gt;&gt;        &quot;A number of methods required by VM support code, jitter, specific<br>
&gt;&gt;&gt; platforms etc&quot;<br>
&gt;&gt;&gt;        requiredList addAll: #(<br>
&gt;&gt;&gt;                assertValidExecutionPointe:r:s:<br>
&gt;&gt;&gt;                characterForAscii: checkedLongAt:<br>
&gt;&gt;&gt;                delayExpired<br>
&gt;&gt;&gt; +               findClassOfMethod:forReceiver: findSelectorOfMethod:<br>
&gt;&gt;&gt; -               findClassOfMethod:forReceiver:<br>
&gt;&gt;&gt; findSelectorOfMethod:forReceiver:<br>
&gt;&gt;&gt;                        forceInterruptCheck<br>
&gt;&gt;&gt; forceInterruptCheckFromHeartbeat fullDisplayUpdate<br>
&gt;&gt;&gt;                getCurrentBytecode getFullScreenFlag getInterruptKeycode<br>
&gt;&gt;&gt; getInterruptPending<br>
&gt;&gt;&gt;                        getSavedWindowSize getThisSessionID<br>
&gt;&gt;&gt;                highBit:<br>
&gt;&gt;&gt;                interpret<br>
&gt;&gt;&gt;                loadInitialContext<br>
&gt;&gt;&gt;                oopFromChunk:<br>
&gt;&gt;&gt;                primitiveFail primitiveFailFor:<br>
&gt;&gt;&gt; primitiveFlushExternalPrimitives printAllStacks printCallStack printContext:<br>
&gt;&gt;&gt;                        printExternalHeadFrame printFramesInPage:<br>
&gt;&gt;&gt; printFrame: printHeadFrame printMemory printOop:<br>
&gt;&gt;&gt;                                printStackPages printStackPageList<br>
&gt;&gt;&gt; printStackPagesInUse printStackPageListInUse<br>
&gt;&gt;&gt;                readableFormat: readImageFromFile:HeapSize:StartingAt:<br>
&gt;&gt;&gt;                setFullScreenFlag: setInterruptKeycode:<br>
&gt;&gt;&gt; setInterruptPending: setInterruptCheckChain:<br>
&gt;&gt;&gt;                        setSavedWindowSize: success:<br>
&gt;&gt;&gt;                validInstructionPointer:inMethod:framePointer:).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;        &quot;Nice to actually have all the primitives available&quot;<br>
&gt;&gt;&gt;        requiredList addAll: (self primitiveTable select: [:each| each<br>
&gt;&gt;&gt; isSymbol]).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;        &quot;InterpreterProxy is the internal analogue of sqVirtualMachine.c,<br>
&gt;&gt;&gt; so make sure to keep all those&quot;<br>
&gt;&gt;&gt;        InterpreterProxy organization categories do:<br>
&gt;&gt;&gt;                [:cat |<br>
&gt;&gt;&gt;                ((cat ~= &#39;initialize&#39;) and: [cat ~= &#39;private&#39;]) ifTrue:<br>
&gt;&gt;&gt;                        [requiredList addAll: (InterpreterProxy<br>
&gt;&gt;&gt; organization listAtCategoryNamed: cat)]].<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;        ^requiredList!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt; + ----- Method: StackInterpreter&gt;&gt;addressCouldBeClassObj: (in category<br>
&gt;&gt;&gt; &#39;debug support&#39;) -----<br>
&gt;&gt;&gt; + addressCouldBeClassObj: maybeClassObj<br>
&gt;&gt;&gt; +       &quot;Answer if maybeClassObj looks like a class object&quot;<br>
&gt;&gt;&gt; +       &lt;inline: false&gt;<br>
&gt;&gt;&gt; +       ^(objectMemory addressCouldBeObj: maybeClassObj)<br>
&gt;&gt;&gt; +         and: [((objectMemory isPointersNonInt: maybeClassObj) and:<br>
&gt;&gt;&gt; [(objectMemory lengthOf: maybeClassObj) &gt;= 3])<br>
&gt;&gt;&gt; +         and: [(objectMemory isPointersNonInt: (objectMemory<br>
&gt;&gt;&gt; fetchPointer: SuperclassIndex ofObject: maybeClassObj))<br>
&gt;&gt;&gt; +         and: [(objectMemory isPointersNonInt: (objectMemory<br>
&gt;&gt;&gt; fetchPointer: MethodDictionaryIndex ofObject: maybeClassObj))<br>
&gt;&gt;&gt; +         and: [(objectMemory isIntegerObject: (objectMemory fetchPointer:<br>
&gt;&gt;&gt; InstanceSpecificationIndex ofObject: maybeClassObj))]]]]!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt; + ----- Method: StackInterpreter&gt;&gt;findClassContainingMethod:startingAt:<br>
&gt;&gt;&gt; (in category &#39;debug support&#39;) -----<br>
&gt;&gt;&gt; + findClassContainingMethod: meth startingAt: classObj<br>
&gt;&gt;&gt; +       | currClass classDict classDictSize methodArray i |<br>
&gt;&gt;&gt; +       currClass := classObj.<br>
&gt;&gt;&gt; +       [classDict := objectMemory fetchPointer: MethodDictionaryIndex<br>
&gt;&gt;&gt; ofObject: currClass.<br>
&gt;&gt;&gt; +        classDictSize := objectMemory fetchWordLengthOf: classDict.<br>
&gt;&gt;&gt; +        methodArray := objectMemory fetchPointer: MethodArrayIndex<br>
&gt;&gt;&gt; ofObject: classDict.<br>
&gt;&gt;&gt; +        i := 0.<br>
&gt;&gt;&gt; +        [i &lt; (classDictSize - SelectorStart)] whileTrue:<br>
&gt;&gt;&gt; +               [meth = (objectMemory fetchPointer: i ofObject:<br>
&gt;&gt;&gt; methodArray) ifTrue:<br>
&gt;&gt;&gt; +                       [^currClass].<br>
&gt;&gt;&gt; +                i := i + 1].<br>
&gt;&gt;&gt; +        currClass := self superclassOf: currClass.<br>
&gt;&gt;&gt; +        currClass = objectMemory nilObject] whileFalse.<br>
&gt;&gt;&gt; +       ^currClass              &quot;method not found in superclass chain&quot;!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method: StackInterpreter&gt;&gt;findClassOfMethod:forReceiver: (in<br>
&gt;&gt;&gt; category &#39;debug support&#39;) -----<br>
&gt;&gt;&gt;  findClassOfMethod: meth forReceiver: rcvr<br>
&gt;&gt;&gt; +       | rclass |<br>
&gt;&gt;&gt; +       (objectMemory addressCouldBeOop: rcvr) ifTrue:<br>
&gt;&gt;&gt; +               [rclass := objectMemory fetchClassOf: rcvr.<br>
&gt;&gt;&gt; +                (self addressCouldBeClassObj: rclass) ifTrue:<br>
&gt;&gt;&gt; +                       [rclass := self findClassContainingMethod: meth<br>
&gt;&gt;&gt; startingAt: rclass.<br>
&gt;&gt;&gt; +                       rclass ~= objectMemory nilObject ifTrue:<br>
&gt;&gt;&gt; +                               [^rclass]]].<br>
&gt;&gt;&gt; -<br>
&gt;&gt;&gt; -       | rclass currClass classDict classDictSize methodArray i |<br>
&gt;&gt;&gt;        (objectMemory addressCouldBeObj: meth) ifFalse:<br>
&gt;&gt;&gt;                [^objectMemory nilObject].<br>
&gt;&gt;&gt; +       ^self findClassContainingMethod: meth startingAt: (self<br>
&gt;&gt;&gt; methodClassOf: meth)!<br>
&gt;&gt;&gt; -       (objectMemory addressCouldBeOop: rcvr)<br>
&gt;&gt;&gt; -               ifTrue: [rclass := objectMemory fetchClassOf: rcvr]<br>
&gt;&gt;&gt; -               ifFalse: [rclass := self methodClassOf: meth].<br>
&gt;&gt;&gt; -       currClass := rclass.<br>
&gt;&gt;&gt; -       [classDict := objectMemory fetchPointer: MethodDictionaryIndex<br>
&gt;&gt;&gt; ofObject: currClass.<br>
&gt;&gt;&gt; -        classDictSize := objectMemory fetchWordLengthOf: classDict.<br>
&gt;&gt;&gt; -        methodArray := objectMemory fetchPointer: MethodArrayIndex<br>
&gt;&gt;&gt; ofObject: classDict.<br>
&gt;&gt;&gt; -        i := 0.<br>
&gt;&gt;&gt; -        [i &lt; (classDictSize - SelectorStart)] whileTrue:<br>
&gt;&gt;&gt; -               [meth = (objectMemory fetchPointer: i ofObject:<br>
&gt;&gt;&gt; methodArray) ifTrue:<br>
&gt;&gt;&gt; -                       [^currClass].<br>
&gt;&gt;&gt; -                i := i + 1].<br>
&gt;&gt;&gt; -        currClass := self superclassOf: currClass.<br>
&gt;&gt;&gt; -        currClass = objectMemory nilObject] whileFalse.<br>
&gt;&gt;&gt; -       ^rclass         &quot;method not found in superclass chain&quot;!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt; + ----- Method: StackInterpreter&gt;&gt;findSelectorOfMethod: (in category<br>
&gt;&gt;&gt; &#39;debug support&#39;) -----<br>
&gt;&gt;&gt; + findSelectorOfMethod: meth<br>
&gt;&gt;&gt; +       | classObj classDict classDictSize methodArray i |<br>
&gt;&gt;&gt; +       (objectMemory addressCouldBeObj: meth) ifFalse:<br>
&gt;&gt;&gt; +               [^objectMemory nilObject].<br>
&gt;&gt;&gt; +       classObj := self methodClassOf: meth.<br>
&gt;&gt;&gt; +       (self addressCouldBeClassObj: classObj) ifTrue:<br>
&gt;&gt;&gt; +               [classDict := objectMemory fetchPointer:<br>
&gt;&gt;&gt; MethodDictionaryIndex ofObject: classObj.<br>
&gt;&gt;&gt; +                classDictSize := objectMemory fetchWordLengthOf:<br>
&gt;&gt;&gt; classDict.<br>
&gt;&gt;&gt; +                methodArray := objectMemory fetchPointer:<br>
&gt;&gt;&gt; MethodArrayIndex ofObject: classDict.<br>
&gt;&gt;&gt; +                i := 0.<br>
&gt;&gt;&gt; +                [i &lt;= (classDictSize - SelectorStart)] whileTrue:<br>
&gt;&gt;&gt; +                       [meth = (objectMemory fetchPointer: i ofObject:<br>
&gt;&gt;&gt; methodArray) ifTrue:<br>
&gt;&gt;&gt; +                               [^(objectMemory fetchPointer: i +<br>
&gt;&gt;&gt; SelectorStart ofObject: classDict)].<br>
&gt;&gt;&gt; +                                i := i + 1]].<br>
&gt;&gt;&gt; +       ^objectMemory nilObject!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was removed:<br>
&gt;&gt;&gt; - ----- Method: StackInterpreter&gt;&gt;findSelectorOfMethod:forReceiver: (in<br>
&gt;&gt;&gt; category &#39;debug support&#39;) -----<br>
&gt;&gt;&gt; - findSelectorOfMethod: meth forReceiver: rcvr<br>
&gt;&gt;&gt; -<br>
&gt;&gt;&gt; -       | currClass classDict classDictSize methodArray i |<br>
&gt;&gt;&gt; -       (objectMemory addressCouldBeObj: meth) ifFalse:<br>
&gt;&gt;&gt; -               [^objectMemory nilObject].<br>
&gt;&gt;&gt; -       (objectMemory addressCouldBeOop: rcvr)<br>
&gt;&gt;&gt; -               ifTrue: [currClass := objectMemory fetchClassOf: rcvr]<br>
&gt;&gt;&gt; -               ifFalse: [currClass := self methodClassOf: meth].<br>
&gt;&gt;&gt; -       [classDict := objectMemory fetchPointer: MethodDictionaryIndex<br>
&gt;&gt;&gt; ofObject: currClass.<br>
&gt;&gt;&gt; -        classDictSize := objectMemory fetchWordLengthOf: classDict.<br>
&gt;&gt;&gt; -        methodArray := objectMemory fetchPointer: MethodArrayIndex<br>
&gt;&gt;&gt; ofObject: classDict.<br>
&gt;&gt;&gt; -        i := 0.<br>
&gt;&gt;&gt; -        [i &lt;= (classDictSize - SelectorStart)] whileTrue:<br>
&gt;&gt;&gt; -               [meth = (objectMemory fetchPointer: i ofObject:<br>
&gt;&gt;&gt; methodArray) ifTrue:<br>
&gt;&gt;&gt; -                       [^(objectMemory fetchPointer: i + SelectorStart<br>
&gt;&gt;&gt; ofObject: classDict)].<br>
&gt;&gt;&gt; -                       i := i + 1].<br>
&gt;&gt;&gt; -        currClass := self superclassOf: currClass.<br>
&gt;&gt;&gt; -        currClass = objectMemory nilObject] whileFalse.<br>
&gt;&gt;&gt; -       ^currClass    &quot;method not found in superclass chain&quot;!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method:<br>
&gt;&gt;&gt; StackInterpreter&gt;&gt;printActivationNameFor:receiver:isBlock:firstTemporary:<br>
&gt;&gt;&gt; (in category &#39;debug printing&#39;) -----<br>
&gt;&gt;&gt;  printActivationNameFor: aMethod receiver: anObject isBlock: isBlock<br>
&gt;&gt;&gt; firstTemporary: maybeMessage<br>
&gt;&gt;&gt; +       | methClass methodSel classObj |<br>
&gt;&gt;&gt; -       | methClass methodSel |<br>
&gt;&gt;&gt;        &lt;inline: false&gt;<br>
&gt;&gt;&gt;        isBlock ifTrue:<br>
&gt;&gt;&gt;                [self print: &#39;[] in &#39;].<br>
&gt;&gt;&gt;        methClass := self findClassOfMethod: aMethod forReceiver:<br>
&gt;&gt;&gt; anObject.<br>
&gt;&gt;&gt; +       methodSel := self findSelectorOfMethod: aMethod.<br>
&gt;&gt;&gt; +       ((objectMemory addressCouldBeOop: anObject)<br>
&gt;&gt;&gt; +        and: [self addressCouldBeClassObj: (classObj := objectMemory<br>
&gt;&gt;&gt; fetchClassOf: anObject)])<br>
&gt;&gt;&gt; -       methodSel := self findSelectorOfMethod: aMethod forReceiver:<br>
&gt;&gt;&gt; anObject.<br>
&gt;&gt;&gt; -       (objectMemory addressCouldBeOop: anObject)<br>
&gt;&gt;&gt;                ifTrue:<br>
&gt;&gt;&gt; +                       [classObj = methClass<br>
&gt;&gt;&gt; -                       [(objectMemory fetchClassOf: anObject) = methClass<br>
&gt;&gt;&gt;                                ifTrue: [self printNameOfClass: methClass<br>
&gt;&gt;&gt; count: 5]<br>
&gt;&gt;&gt;                                ifFalse:<br>
&gt;&gt;&gt; +                                       [self printNameOfClass: classObj<br>
&gt;&gt;&gt; count: 5.<br>
&gt;&gt;&gt; -                                       [self printNameOfClass:<br>
&gt;&gt;&gt; (objectMemory fetchClassOf: anObject) count: 5.<br>
&gt;&gt;&gt;                                         self print: &#39;(&#39;.<br>
&gt;&gt;&gt;                                         self printNameOfClass: methClass<br>
&gt;&gt;&gt; count: 5.<br>
&gt;&gt;&gt;                                         self print: &#39;)&#39;]]<br>
&gt;&gt;&gt;                ifFalse: [self print: &#39;INVALID RECEIVER&#39;].<br>
&gt;&gt;&gt;        self print: &#39;&gt;&#39;.<br>
&gt;&gt;&gt;        (objectMemory addressCouldBeOop: methodSel)<br>
&gt;&gt;&gt;                ifTrue:<br>
&gt;&gt;&gt;                        [methodSel = objectMemory nilObject<br>
&gt;&gt;&gt;                                ifTrue: [self print: &#39;?&#39;]<br>
&gt;&gt;&gt;                                ifFalse: [self printStringOf: methodSel]]<br>
&gt;&gt;&gt;                ifFalse: [self print: &#39;INVALID SELECTOR&#39;].<br>
&gt;&gt;&gt;        (methodSel = (objectMemory splObj: SelectorDoesNotUnderstand)<br>
&gt;&gt;&gt;        and: [(objectMemory addressCouldBeObj: maybeMessage)<br>
&gt;&gt;&gt;        and: [(objectMemory fetchClassOf: maybeMessage) = (objectMemory<br>
&gt;&gt;&gt; splObj: ClassMessage)]]) ifTrue:<br>
&gt;&gt;&gt;                [&quot;print arg message selector&quot;<br>
&gt;&gt;&gt;                methodSel := objectMemory fetchPointer:<br>
&gt;&gt;&gt; MessageSelectorIndex ofObject: maybeMessage.<br>
&gt;&gt;&gt;                self print: &#39; &#39;.<br>
&gt;&gt;&gt;                self printStringOf: methodSel]!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;  ----- Method: StackInterpreter&gt;&gt;selectorOfContext: (in category &#39;debug<br>
&gt;&gt;&gt; printing&#39;) -----<br>
&gt;&gt;&gt;  selectorOfContext: aContext<br>
&gt;&gt;&gt;        (objectMemory isContext: aContext) ifFalse:<br>
&gt;&gt;&gt;                [^nil].<br>
&gt;&gt;&gt; +       ^self findSelectorOfMethod: (objectMemory fetchPointer:<br>
&gt;&gt;&gt; MethodIndex ofObject: aContext)!<br>
&gt;&gt;&gt; -       ^self<br>
&gt;&gt;&gt; -               findSelectorOfMethod: (objectMemory fetchPointer:<br>
&gt;&gt;&gt; MethodIndex ofObject: aContext)<br>
&gt;&gt;&gt; -               forReceiver:  (objectMemory fetchPointer: ReceiverIndex<br>
&gt;&gt;&gt; ofObject: aContext)!<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; best,<br>
&gt;&gt; Eliot<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Best regards,<br>
&gt; Igor Stasenko.<br>
<br>
</div></div></blockquote></div><br></div>