Changes by: Jason J. Hickey (jyh at cs.caltech.edu)
Date: 2007-11-04 11:04:55 -0800 (Sun, 04 Nov 2007)
Revision: 12555
Log message:
This drops the recursive quote in favor of the non-recursive quote,
more like Lisp-style. This is a major code simplification, and more
intuitive too.
There is a semantic change--quoting is not recursive.
Before:
osh> println($`(printvln $y))
$(apply global.y)
Now we get: unbound variable: global.y
To get the previous behavior, two quotes must be used.
println($`(printvln $`y))
$(global.y) : Exp
Eager quotes are transformed at compile time into private bindings.
$`(f $,y)
<-->
private."eager.x1" = $y in
$`(f $(eager.x1))
The "eager.x1" is a variable name containing a dot.
NOTE: the way I have done it now, unquotes are nested too, and there
is no double-unquote.
$`(x $`(y $,z)) # $,z belongs to the inner quote
Actually, thinking about Lisp, this is probably wrong. I'll change
it.