emacs-diffs
[Top][All Lists]
Advanced

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

feature/soc-bytecode-in-traceback-reduced 54b94af 1/2: Only store offset


From: Rocky Bernstein
Subject: feature/soc-bytecode-in-traceback-reduced 54b94af 1/2: Only store offset when executing bytecode
Date: Tue, 28 Jul 2020 00:04:20 -0400 (EDT)

branch: feature/soc-bytecode-in-traceback-reduced
commit 54b94af19d371f55f8a5f60352a14791de0d3e97
Author: Zach Shaftel <zshaftel@gmail.com>
Commit: Zach Shaftel <zshaftel@gmail.com>

    Only store offset when executing bytecode
    
    * src/eval.c (record_in_backtrace): Use 'backtrace_top' instead of
    'backtrace_next', and check that 'backtrace_byte_offset' > 0 before
    calling it, so the specbinding stack isn't scanned just to store an
    invalid offset.
---
 src/eval.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/eval.c b/src/eval.c
index 73ad3d3..b9640f6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2154,10 +2154,11 @@ record_in_backtrace (Lisp_Object function, Lisp_Object 
*args, ptrdiff_t nargs)
   specpdl_ptr->bt.function = function;
   current_thread->stack_top = specpdl_ptr->bt.args = args;
   specpdl_ptr->bt.nargs = nargs;
-  union specbinding *nxt = specpdl_ptr;
-  nxt = backtrace_next(nxt);
-  if (nxt->kind == SPECPDL_BACKTRACE)
-    nxt->bt.bytecode_offset = backtrace_byte_offset;
+  if (backtrace_byte_offset > 0) {
+    union specbinding *nxt = backtrace_top ();
+    if (backtrace_p (nxt) && nxt->kind == SPECPDL_BACKTRACE)
+      nxt->bt.bytecode_offset = backtrace_byte_offset;
+  }
   grow_specpdl ();
 
   return count;



reply via email to

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