It doesn’t work for non-local variables, as simple as that - locals are fairly “pure” in the sense that they are specific to a function (although even is now not-so-simple with 2.3 function literals), but instance variables can be accessed in a variety of ways, which slowly moves this further away from being a simple string replacement and toward being a source-to-source compiler (but I’ve already done a source-to-source compiler, I don’t want to maintain two of them).