Yay! It works beautifully :D

I added this method in CompiledMethod as an extension of my project:

CompiledMethod>>referredInstVars
|theClass idx|
theClass �:= self methodClass.
^theClass instVarNames select: [ :varName |�
� � idx := theClass instVarIndexFor: varName.
� � (self readsField: idx) or: [ self writesField: idx ]
]

On Sun, May 6, 2012 at 6:04 AM, Carla F. Griggio <carla.griggio@gmail.com> wrote:
Thanks Guille! That gives me more tools to play with :P


On Sun, May 6, 2012 at 5:49 AM, Guillermo Polito <guillermopolito@gmail.com> wrote:
L�der,

you can do something like:

class := myCompiledMethod methodClass.
class instVarNames select: [ :varName |
��� idx := class instVarIndexFor: varName.
��� myCompiledMethod readsField: idx or: [ myCompiledMethod writesField: idx ]
]

because #readsField: and #writesField: are index based.

You can also see as an example: Behavior>>#whichSelectorsAccess:� that is var named based, but over all class selectors.

Guille


On Sun, May 6, 2012 at 10:38 AM, Carla F. Griggio <carla.griggio@gmail.com> wrote:
Hi!
I'm playing with some metaprogramming, and I'm stuck at trying to find out which instance variables are referred inside a method.
I've found that a CompiledMethod understands hasInstVarRefs, but I don't recognize a method that could tell just me what I'm looking for.

Any leads?

Thanks!
Carla.