[Newbies] How to introspect method instance variables
Bert Freudenberg
bert at freudenbergs.de
Wed Aug 26 08:58:27 UTC 2009
On 26.08.2009, at 00:36, rdmerrio wrote:
> 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.
You mean
http://common-lisp.net/project/cells/
So you basically want something that looks like an instance variable
but in fact is a computed value.
Squeak's instance variables are not reified. The compiler produces
bytecodes accessing them directly (and very efficiently) but it's not
possible to intercept inst var accesses at the byte code level. You
would need to change the compiler to not generate the direct access
bytecodes, but a message send instead, that can be intercepted.
Tweak's compiler does this. See class CCompiler in Croquet.
It has an extended notion of instance variables called "fields". A
field can be an actual instance variable (like in Smalltalk), a
property (a dictionary entry, like in Python), or a "virtual
field" (like in Cells). Accesses to virtual fields are actually
compiled as message sends. So if "foo" is a virtual field, then
foo := foo + 1
is compiled to
self foo: self foo + 1
behind the scenes, and you are free to implement #foo and #foo:
however you like.
So ... all you need to do is hack the Compiler :)
Alternatively, look at Marcus Denker's IRBuilder and ByteSurgeon which
lets you experiment with byte codes.
- Bert -
More information about the Beginners
mailing list