diff options
| author | Joakim Verona | 2012-08-19 02:44:11 +0200 |
|---|---|---|
| committer | Joakim Verona | 2012-08-19 02:44:11 +0200 |
| commit | 5436d1df5e2ba0b4d4f72b03a1cd09b20403654b (patch) | |
| tree | 532faa27319b3bb199d414dc85e63a58246d30b0 /src/eval.c | |
| parent | d02344322b0d2fea8dd9ad9dd0a6c70e058f967b (diff) | |
| parent | e757f1c6f393cf82057dbee0a4325b07f0fd55c4 (diff) | |
| download | emacs-5436d1df5e2ba0b4d4f72b03a1cd09b20403654b.tar.gz emacs-5436d1df5e2ba0b4d4f72b03a1cd09b20403654b.zip | |
upstream
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/eval.c b/src/eval.c index b531f790cc5..771cd7b160a 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); |
| @@ -3157,12 +3169,12 @@ specbind (Lisp_Object symbol, Lisp_Object value) | |||
| 3157 | if (!NILP (Flocal_variable_p (symbol, Qnil))) | 3169 | if (!NILP (Flocal_variable_p (symbol, Qnil))) |
| 3158 | { | 3170 | { |
| 3159 | eassert (sym->redirect != SYMBOL_LOCALIZED | 3171 | eassert (sym->redirect != SYMBOL_LOCALIZED |
| 3160 | || (BLV_FOUND (SYMBOL_BLV (sym)) | 3172 | || (blv_found (SYMBOL_BLV (sym)) |
| 3161 | && EQ (cur_buf, SYMBOL_BLV (sym)->where))); | 3173 | && EQ (cur_buf, SYMBOL_BLV (sym)->where))); |
| 3162 | where = cur_buf; | 3174 | where = cur_buf; |
| 3163 | } | 3175 | } |
| 3164 | else if (sym->redirect == SYMBOL_LOCALIZED | 3176 | else if (sym->redirect == SYMBOL_LOCALIZED |
| 3165 | && BLV_FOUND (SYMBOL_BLV (sym))) | 3177 | && blv_found (SYMBOL_BLV (sym))) |
| 3166 | where = SYMBOL_BLV (sym)->where; | 3178 | where = SYMBOL_BLV (sym)->where; |
| 3167 | else | 3179 | else |
| 3168 | where = Qnil; | 3180 | where = Qnil; |