summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index fe29564aa2d..ddf455e4d78 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2608,6 +2608,19 @@ eval_sub (Lisp_Object form)
interpreted using lexical-binding or not. */
specbind (Qlexical_binding,
NILP (Vinternal_interpreter_environment) ? Qnil : Qt);
+
+ /* Make the macro aware of any defvar declarations in scope. */
+ Lisp_Object dynvars = Vmacroexp__dynvars;
+ for (Lisp_Object p = Vinternal_interpreter_environment;
+ !NILP (p); p = XCDR(p))
+ {
+ Lisp_Object e = XCAR (p);
+ if (SYMBOLP (e))
+ dynvars = Fcons(e, dynvars);
+ }
+ if (!EQ (dynvars, Vmacroexp__dynvars))
+ specbind (Qmacroexp__dynvars, dynvars);
+
exp = apply1 (Fcdr (fun), original_args);
exp = unbind_to (count1, exp);
val = eval_sub (exp);