[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;