[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Aha, that makes more sense now.  However, how would you handle 
AUGMENT-ENVIRONMENT without modifying your implementation?  
Presumably it would have to add things to the list in the special
variable, but how would you know when to take them off again?

For example, suppose I've written a code-walker using the primitives
in issue SYNTACTIC-ENVIRONMENT-ACCESS, and I'm walking a form like

    (let ((x ...))
      (let ((y ...))
      (let ((z ...))

To process <body-1>, I'd want to augment the environment from the outer
LET to contain the binding for Y.  But that binding has to be removed
before I add the binding for Z and process <body-2>.

One other thing that has occured to me on this issue is that it is
only information about lexical definitions that needs to be protected
against bashing, and that the implementation could be permitted to
bash global definitions in the environment.  This would eliminate the
objection to having to copy all the information about the compiler's
model of the remote environment, plus it's consistent with the
treatment of NIL to mean "whatever's in the local global environment
at the time you want to access that information".