[Newbies] How to introspect method instance variables

Michael van der Gulik mikevdg at gmail.com
Tue Aug 25 02:34:18 UTC 2009


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.

-- 
http://gulik.pbwiki.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/beginners/attachments/20090825/11e7c388/attachment.htm


More information about the Beginners mailing list