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.