From: Paul Eggert Date: Sat, 26 Dec 2015 17:30:22 +0000 (-0800) Subject: Propagate Bug#14412 fix to backtrace_eval_unrewind X-Git-Tag: emacs-25.0.90~364 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b45828ee139dae3b9570883816453f5a451d35d3;p=emacs.git 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. --- 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