aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorPaul Eggert2015-12-26 09:30:22 -0800
committerPaul Eggert2015-12-26 09:32:03 -0800
commitb45828ee139dae3b9570883816453f5a451d35d3 (patch)
tree6fd22db6bb15ba6f3a680bbecde8d769a5b3c55d /src/eval.c
parent9e9f6fb2a2222c1348da25be7cabc6c9e021eeb4 (diff)
downloademacs-b45828ee139dae3b9570883816453f5a451d35d3.tar.gz
emacs-b45828ee139dae3b9570883816453f5a451d35d3.zip
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.c21
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)
3196 { /* If variable has a trivial value (no forwarding), we can 3196 { /* If variable has a trivial value (no forwarding), we can
3197 just set it. No need to check for constant symbols here, 3197 just set it. No need to check for constant symbols here,
3198 since that was already done by specbind. */ 3198 since that was already done by specbind. */
3199 Lisp_Object symbol = specpdl_symbol (specpdl_ptr); 3199 Lisp_Object sym = specpdl_symbol (specpdl_ptr);
3200 if (SYMBOLP (symbol)) 3200 if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL)
3201 { 3201 {
3202 struct Lisp_Symbol *sym = XSYMBOL (symbol); 3202 SET_SYMBOL_VAL (XSYMBOL (sym),
3203 if (sym->redirect == SYMBOL_PLAINVAL) 3203 specpdl_old_value (specpdl_ptr));
3204 { 3204 break;
3205 SET_SYMBOL_VAL (sym, specpdl_old_value (specpdl_ptr));
3206 break;
3207 }
3208 } 3205 }
3209 else 3206 else
3210 { /* FALLTHROUGH!! 3207 { /* FALLTHROUGH!!
@@ -3412,12 +3409,12 @@ backtrace_eval_unrewind (int distance)
3412 { /* If variable has a trivial value (no forwarding), we can 3409 { /* If variable has a trivial value (no forwarding), we can
3413 just set it. No need to check for constant symbols here, 3410 just set it. No need to check for constant symbols here,
3414 since that was already done by specbind. */ 3411 since that was already done by specbind. */
3415 struct Lisp_Symbol *sym = XSYMBOL (specpdl_symbol (tmp)); 3412 Lisp_Object sym = specpdl_symbol (tmp);
3416 if (sym->redirect == SYMBOL_PLAINVAL) 3413 if (SYMBOLP (sym) && XSYMBOL (sym)->redirect == SYMBOL_PLAINVAL)
3417 { 3414 {
3418 Lisp_Object old_value = specpdl_old_value (tmp); 3415 Lisp_Object old_value = specpdl_old_value (tmp);
3419 set_specpdl_old_value (tmp, SYMBOL_VAL (sym)); 3416 set_specpdl_old_value (tmp, SYMBOL_VAL (XSYMBOL (sym)));
3420 SET_SYMBOL_VAL (sym, old_value); 3417 SET_SYMBOL_VAL (XSYMBOL (sym), old_value);
3421 break; 3418 break;
3422 } 3419 }
3423 else 3420 else