[Newbies] How to introspect method instance variables

rdmerrio rdmerrio at gmail.com
Tue Aug 25 22:36:06 UTC 2009


The reason for the question is strictly pedagogical. I am learning 
Smalltalk and i am playing with implementation of a Cells type package 
ala LISP or pyCells and Cellulose from the Python world.

I do not really expect complete this, as I said its just a learning 
exercise.

The question around the instance variables stems from the fact that they 
appear to be tantalizingly close to the surface given the fact that the 
Browser recognizes undeclared identifiers and asks if they are temps or 
instance and then plugs in the code for me.

I am just too new to be able to figure out how to intercept the messages 
being sent.

Thanks for the help and suggestions.

beginners-request at lists.squeakfoundation.org wrote:
> Send Beginners mailing list submissions to
> 	beginners at lists.squeakfoundation.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
> 	http://lists.squeakfoundation.org/mailman/listinfo/beginners
> or, via email, send a message with subject or body 'help' to
> 	beginners-request at lists.squeakfoundation.org
>
> You can reach the person managing the list at
> 	beginners-owner at lists.squeakfoundation.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Beginners digest..."
>
>
> Today's Topics:
>
>    1. How to introspect method instance variables (rdmerrio)
>    2. Re: How to introspect method instance variables
>       (Michael van der Gulik)
>    3. Re: How to introspect method instance variables (Yoshiki Ohshima)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 24 Aug 2009 21:16:16 -0500
> From: rdmerrio <rdmerrio at gmail.com>
> Subject: [Newbies] How to introspect method instance variables
> To: beginners at lists.squeakfoundation.org
> Message-ID: <4A934970.4070202 at gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> I have defined a method, i.e.,
>
> someMethod
>     anInstVariable := anotherInstVariable1 + anotherInstVariable2.
>
> I would like to intercept the acceptance of this method by the browser 
> and programatically determine what instance variables this method is 
> using so that I can grab these names for other processing tasks.
>
> Additionally, I would really like to be able to determine what instance 
> variables are being assigned to, for instance, anInstVariable in this 
> case and which ones are the "independent" instance variables, 
> anotherInstVariable1 and anotherInstVariable2 in this case.
>
> How can I do this?
>
> Thanks
>
>
> ------------------------------
>
> Message: 2
> Date: Tue, 25 Aug 2009 14:34:18 +1200
> From: Michael van der Gulik <mikevdg at gmail.com>
> Subject: Re: [Newbies] How to introspect method instance variables
> To: "A friendly place to get answers to even the most basic questions
> 	about	Squeak." <beginners at lists.squeakfoundation.org>
> Message-ID:
> 	<1b61adf40908241934ve0f2ba1iacb768b3b122b94d at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> On Tue, Aug 25, 2009 at 2:16 PM, rdmerrio <rdmerrio at gmail.com> wrote:
>
>   
>> I have defined a method, i.e.,
>>
>> someMethod
>>   anInstVariable := anotherInstVariable1 + anotherInstVariable2.
>>
>> I would like to intercept the acceptance of this method by the browser and
>> programatically determine what instance variables this method is using so
>> that I can grab these names for other processing tasks.
>>
>> Additionally, I would really like to be able to determine what instance
>> variables are being assigned to, for instance, anInstVariable in this case
>> and which ones are the "independent" instance variables,
>> anotherInstVariable1 and anotherInstVariable2 in this case.
>>
>> How can I do this?
>>
>>     
>
> Why? What are you trying to achieve? You're talking about some pretty
> intrusive techniques. Unless you're developing a code analyser of some sort,
> you probably should be looking at a better way of doing what you're doing.
>
> To capture the acceptance of a method (assuming you mean the action that
> happens when you press alt+s), you insert a bit of code into
> PluggableTextMorph>>accept.
>
> To determine which instance variables are being assigned to, you'll need to
> somehow look at the bytecodes. They're not too hard to analyse, but it can
> be a bit of work. Alternatively, maybe the refactory browser can help, or
> maybe you can look at the intermediate code that the compiler generates.
>
> The bytecodes are described here:
> http://burks.bton.ac.uk/burks/language/smaltalk/goldberg/blueb003.htm.
> They're in the "Blue book chapter 28" if you need to Google it. You'll want
> the "store" bytecodes.
>
> To see real bytecodes, either inspect "Morph>>#basicInitialize" to see a
> CompiledMethod, or use the "byteCodes" view in a Browser (hidden behind the
> "source" button).
>
> Gulik.
>
>   



More information about the Beginners mailing list