Hmm, this is a hard to win battle (as I was warned about!).
It seems that my rule that an unbound gensym evaluates to the symbol it
replaces has
some problems! Consider
block([y],y::1);
The sanitized version of this
block([gxxxxx],gxxxxx::1)
together with my rule would create a global variable y with value 1!
This is clearly
not sane behaviour.
So it seems that my rule should only apply when scope has left the block
statement
(to deal with things like block([y],y); )
Which entails a change to how meval evaluates block statements...
Is this the beginning of the end?
Michel