diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/eval.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/eval.c b/src/eval.c index 7f7a70b15ae..c5b8a375af4 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -948,8 +948,9 @@ usage: (let* VARLIST BODY...) */) | |||
| 948 | val = eval_sub (Fcar (XCDR (elt))); | 948 | val = eval_sub (Fcar (XCDR (elt))); |
| 949 | } | 949 | } |
| 950 | 950 | ||
| 951 | if (!NILP (lexenv) && SYMBOLP (var) | 951 | var = maybe_remove_pos_from_symbol (var); |
| 952 | && !XSYMBOL (var)->u.s.declared_special | 952 | if (!NILP (lexenv) && BARE_SYMBOL_P (var) |
| 953 | && !XBARE_SYMBOL (var)->u.s.declared_special | ||
| 953 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) | 954 | && NILP (Fmemq (var, Vinternal_interpreter_environment))) |
| 954 | /* Lexically bind VAR by adding it to the interpreter's binding | 955 | /* Lexically bind VAR by adding it to the interpreter's binding |
| 955 | alist. */ | 956 | alist. */ |
| @@ -1016,11 +1017,10 @@ usage: (let VARLIST BODY...) */) | |||
| 1016 | varlist = XCAR (args); | 1017 | varlist = XCAR (args); |
| 1017 | for (argnum = 0; argnum < nvars && CONSP (varlist); argnum++) | 1018 | for (argnum = 0; argnum < nvars && CONSP (varlist); argnum++) |
| 1018 | { | 1019 | { |
| 1019 | Lisp_Object var; | ||
| 1020 | |||
| 1021 | elt = XCAR (varlist); | 1020 | elt = XCAR (varlist); |
| 1022 | varlist = XCDR (varlist); | 1021 | varlist = XCDR (varlist); |
| 1023 | var = SYMBOLP (elt) ? elt : Fcar (elt); | 1022 | Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt |
| 1023 | : Fcar (elt)); | ||
| 1024 | tem = temps[argnum]; | 1024 | tem = temps[argnum]; |
| 1025 | 1025 | ||
| 1026 | if (!NILP (lexenv) && SYMBOLP (var) | 1026 | if (!NILP (lexenv) && SYMBOLP (var) |
| @@ -1416,6 +1416,7 @@ internal_lisp_condition_case (Lisp_Object var, Lisp_Object bodyform, | |||
| 1416 | struct handler *oldhandlerlist = handlerlist; | 1416 | struct handler *oldhandlerlist = handlerlist; |
| 1417 | ptrdiff_t CACHEABLE clausenb = 0; | 1417 | ptrdiff_t CACHEABLE clausenb = 0; |
| 1418 | 1418 | ||
| 1419 | var = maybe_remove_pos_from_symbol (var); | ||
| 1419 | CHECK_SYMBOL (var); | 1420 | CHECK_SYMBOL (var); |
| 1420 | 1421 | ||
| 1421 | Lisp_Object success_handler = Qnil; | 1422 | Lisp_Object success_handler = Qnil; |
| @@ -3254,7 +3255,7 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector) | |||
| 3254 | lexenv = Fcons (Fcons (next, arg), lexenv); | 3255 | lexenv = Fcons (Fcons (next, arg), lexenv); |
| 3255 | else | 3256 | else |
| 3256 | /* Dynamically bind NEXT. */ | 3257 | /* Dynamically bind NEXT. */ |
| 3257 | specbind (next, arg); | 3258 | specbind (maybe_remove_pos_from_symbol (next), arg); |
| 3258 | previous_rest = false; | 3259 | previous_rest = false; |
| 3259 | } | 3260 | } |
| 3260 | } | 3261 | } |
| @@ -3466,10 +3467,8 @@ do_specbind (struct Lisp_Symbol *sym, union specbinding *bind, | |||
| 3466 | void | 3467 | void |
| 3467 | specbind (Lisp_Object symbol, Lisp_Object value) | 3468 | specbind (Lisp_Object symbol, Lisp_Object value) |
| 3468 | { | 3469 | { |
| 3469 | struct Lisp_Symbol *sym; | 3470 | /* The caller must ensure that the SYMBOL argument is a bare symbol. */ |
| 3470 | 3471 | struct Lisp_Symbol *sym = XBARE_SYMBOL (symbol); | |
| 3471 | CHECK_SYMBOL (symbol); | ||
| 3472 | sym = XSYMBOL (symbol); | ||
| 3473 | 3472 | ||
| 3474 | start: | 3473 | start: |
| 3475 | switch (sym->u.s.redirect) | 3474 | switch (sym->u.s.redirect) |