diff options
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index b531f790cc5..f3f14d60e1c 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -2217,7 +2217,19 @@ eval_sub (Lisp_Object form) | |||
| 2217 | goto retry; | 2217 | goto retry; |
| 2218 | } | 2218 | } |
| 2219 | if (EQ (funcar, Qmacro)) | 2219 | if (EQ (funcar, Qmacro)) |
| 2220 | val = eval_sub (apply1 (Fcdr (fun), original_args)); | 2220 | { |
| 2221 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 2222 | extern Lisp_Object Qlexical_binding; | ||
| 2223 | Lisp_Object exp; | ||
| 2224 | /* Bind lexical-binding during expansion of the macro, so the | ||
| 2225 | macro can know reliably if the code it outputs will be | ||
| 2226 | interpreted using lexical-binding or not. */ | ||
| 2227 | specbind (Qlexical_binding, | ||
| 2228 | NILP (Vinternal_interpreter_environment) ? Qnil : Qt); | ||
| 2229 | exp = apply1 (Fcdr (fun), original_args); | ||
| 2230 | unbind_to (count, Qnil); | ||
| 2231 | val = eval_sub (exp); | ||
| 2232 | } | ||
| 2221 | else if (EQ (funcar, Qlambda) | 2233 | else if (EQ (funcar, Qlambda) |
| 2222 | || EQ (funcar, Qclosure)) | 2234 | || EQ (funcar, Qclosure)) |
| 2223 | val = apply_lambda (fun, original_args); | 2235 | val = apply_lambda (fun, original_args); |