summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2015-12-26 09:30:22 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2015-12-26 09:32:03 -0800
commitb45828ee139dae3b9570883816453f5a451d35d3 (patch)
tree6fd22db6bb15ba6f3a680bbecde8d769a5b3c55d /src/eval.c
parent9e9f6fb2a2222c1348da25be7cabc6c9e021eeb4 (diff)
downloademacs-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.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)
{ /* 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