From: Bruno H. <br...@cl...> - 2003-08-13 01:21:48
|
Sam wrote: > > The bug is that > > 1) control.d: MACROLET calls SYSTEM::MAKE-MACRO-EXPANDER without > > passing the current lexical environment > > 2) init.lisp:827 calls SYSTEM::MAKE-MACRO-EXPANDER without > > passing the current lexical environment > > 3) compiler.lisp:5514 calls SYSTEM::MAKE-MACRO-EXPANDER without > > passing the current lexical environment > > since SYSTEM::MAKE-MACRO-EXPANDER does not accept an env argument, you > probably mean to say that MAKE-MACRO-EXPANDER should use eval-env > instead of eval: > > diff -u -w -b -u -b -w -i -B -r1.19 defmacro.lisp > --- defmacro.lisp 21 Apr 2003 19:54:47 -0000 1.19 > +++ defmacro.lisp 12 Aug 2003 14:39:13 -0000 > @@ -445,4 +445,5 @@ > docstring))))))) > > (defun make-macro-expander (macrodef) > - (make-macro (eval (make-macro-expansion macrodef)))) > + (make-macro (eval-env (make-macro-expansion macrodef) > + (vector *venv* *fenv* *benv* *genv* *denv*)))) It goes into this direction, yes. But the correct environment in the case 1) is different from the one you've written down here, In this case you have to use roughly the same code as compile_eval_form [control.d]. Bruno |