emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-25 b45828e: Propagate Bug#14412 fix to backtrace_eva


From: Paul Eggert
Subject: [Emacs-diffs] emacs-25 b45828e: Propagate Bug#14412 fix to backtrace_eval_unrewind
Date: Sat, 26 Dec 2015 17:32:08 +0000

branch: emacs-25
commit b45828ee139dae3b9570883816453f5a451d35d3
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    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.
---
 src/eval.c |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/eval.c b/src/eval.c
index 571681c..bd0cf68 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]