As promised to a few people at Smalltalk Solutions, here is a hack I did a while ago to create an illusion of variables having some first-class status. See the file-out (known to work in 3.3a).
The basic idea is that whenever there is a variable "foo" in scope, a keyword-like expression "foo:" (or "foo :") is allowed in the receiver position. It evaluates to an instance of (a subclass of) ReifiedVariable, which is an object that understands messages #value and #value: to get and set the value of the variable. This is pretty much all there is to it, plus a number of methods implemented in ReifiedVariable to do various variable-like things. For example,
a := 3
actually works as
(a:) = 3
where = is a message to the variable to assign the argument. (Sure, it clashes with comparison, but I figured that will do for a hack). Other things one can do are things like
a: + 4 "increment the value of a by 4" a: decrement "decrement it by 1" p := a: "assign reified a to p (done by reified p!)" p + 10 "increment a by 10 through p" a: <> p: "swap a and p"
See the example methods on the class side of ReifiedVariable.
Of course, this is not nearly as cool as the "reifier" quote of Smalltalk-72, but FWIW...
Cheers,
--Vassili
squeak-dev@lists.squeakfoundation.org