diff options
| author | Stefan Monnier | 2012-08-15 21:18:07 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2012-08-15 21:18:07 -0400 |
| commit | 8be3a09c4f4ed0eae2902b81e80856e917a81b2d (patch) | |
| tree | 6b460256c489213a92086200db5a183318175dd8 /src/eval.c | |
| parent | 94c9ece10275f8ca9323c38f93607f1046035c79 (diff) | |
| download | emacs-8be3a09c4f4ed0eae2902b81e80856e917a81b2d.tar.gz emacs-8be3a09c4f4ed0eae2902b81e80856e917a81b2d.zip | |
* src/eval.c (eval_sub): Bind lexical-binding.
* src/lread.c (Qlexical_binding): Make non-static.
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); |