[Vm-dev] Squeak Object Engine Message Sending clarification

Bob Arning arning315 at comcast.net
Sun Dec 8 16:54:46 UTC 2013


"object" in this case is something on the stack. Sending a message 
involves pushing the receiver ("object") and arguments onto the stack 
and then sending the message (some variant of send bytecode) which 
causes the vm to look on the stack for the receiver and then follow the 
receiver's class chain to find the suitable method.


On 12/8/13 11:19 AM, gettimothy wrote:
>   
>
>
> No need to go into details as I am just attempting to avoid a 
> misconception.
>
> On page 5 of 28 on Tim Rowledge's (very useful and enjoyable, btw) A 
> Tour of the Squeak Object Engine 
> <http://www.rowledge.org/resources/tim%27s-Home-page/Squeak/OE-Tour.pdf>
>  I am unclear as to what  object's header' refers to in step *I*.
>
>
> To send a message to a receiver, the VM has to:-
> *  I.        find the class of the receiver by examining the object's 
> header. *
>    II.       lookup the message in the list of messages understood by 
> that class
>        (the class's MethodDictionary)
> ........etc...
>
>
> It seems 'obvious' to me that it has to be something in the current 
> MethodContext,  and that 'object' does not refer to something out in 
> ObjectMemory
>
> Is that a valid assumption?
>
> The BlueBook states this methodology
>
> ****** Messages PDF 584
>        When a send bytecode is encounterd the interpreter finds the 
> CompiledMethod indicated by the message as follows:
>        1. /Find the message receiver./ The receiver is below the 
> arguments on the stack. The number of arguments is indicated in the 
> send bytecode.
>        2. /Access a message dictionary./ The original message 
> dictionary is found in the receiver's class.
>        3. /Look up the message selector in the message dictionary./ 
> The selector is indicated in the send bytecode.
>        4. /If the selector is found,/ the associated CompiledMethod 
> describes the response to the message.
>        5. /If the selector is not found,/ a new message dictionary 
> must be searched (i.e. go to step 3) but check the method dictionary 
> of the superclass of the last class.
>
>        6. /If all the superclasses are searched and the selector is 
> not found, an error is reported and exectuion of the bytcodes 
> following the send is suspended.
>
>
> Meanwhile, the structure of the Squeak MethodContext  has a pointer to 
> the receiver as well.
>
>        + Method Context Structure
>          + ---------------------------------------
>          + ^ sender (pointer to previous context)
>          + ---------------------------------------
>          + instruction ponter   --------> points to current bytecode 
> in the CompiledMethod's 'Bytecodes' section (see Format of 
> CompiledMethod instances above)
>          + ---------------------------------------
>          + stack Pointer        --------> points to Stack Contents at 
> bottom of this structure
>          + ---------------------------------------
>          + method               --------> points to MethodHeader 
> section in the CompiledMethod (see Format of CompiledMethod instances 
> above)
>          + ---------------------------------------
>          + unused
>          + ---------------------------------------
>          + receiver
>          + ---------------------------------------
>          + arguments
>          + ---------------------------------------
>          + temporaries
>          + ---------------------------------------
>          + stack contents
>          + ---------------------------------------
>
>
>
>
> Thx.
>
> tty.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20131208/b9667e48/attachment.htm


More information about the Vm-dev mailing list