diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-12-26 09:30:22 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-12-26 09:32:03 -0800 |
commit | b45828ee139dae3b9570883816453f5a451d35d3 (patch) | |
tree | 6fd22db6bb15ba6f3a680bbecde8d769a5b3c55d /src/eval.c | |
parent | 9e9f6fb2a2222c1348da25be7cabc6c9e021eeb4 (diff) | |
download | emacs-b45828ee139dae3b9570883816453f5a451d35d3.tar.gz |
Propagate Bug#14412 fix to backtrace_eval_unrewind
* src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
becomes accurate again. This shouldn’t affect behavior.
(backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/eval.c b/src/eval.c index 571681c318f..bd0cf68369c 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3196,15 +3196,12 @@ unbind_to (ptrdiff_t count, Lisp_Object value) { /* If variable has a trivial value (no forwarding), we can just set it. No need to check for constant symbols here, since that was already done by specbind. */ - Lisp_Object symbol = specpdl_symbol (specpdl_ptr); - if (SYMBOLP (symbol)) + Lisp_Object sym = specpdl_symbol (specpdl_ptr); + if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL) { - struct Lisp_Symbol *sym = XSYMBOL (symbol); - if (sym->redirect == SYMBOL_PLAINVAL) - { - SET_SYMBOL_VAL (sym, specpdl_old_value (specpdl_ptr)); - break; - } + SET_SYMBOL_VAL (XSYMBOL (sym), + specpdl_old_value (specpdl_ptr)); + break; } else { /* FALLTHROUGH!! @@ -3412,12 +3409,12 @@ backtrace_eval_unrewind (int distance) { /* If variable has a trivial value (no forwarding), we can just set it. No need to check for constant symbols here, since that was already done by specbind. */ - struct Lisp_Symbol *sym = XSYMBOL (specpdl_symbol (tmp)); - if (sym->redirect == SYMBOL_PLAINVAL) + Lisp_Object sym = specpdl_symbol (tmp); + if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL) { Lisp_Object old_value = specpdl_old_value (tmp); - set_specpdl_old_value (tmp, SYMBOL_VAL (sym)); - SET_SYMBOL_VAL (sym, old_value); + set_specpdl_old_value (tmp, SYMBOL_VAL (XSYMBOL (sym))); + SET_SYMBOL_VAL (XSYMBOL (sym), old_value); break; } else |