aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorZach Shaftel2020-06-19 14:53:20 -0400
committerrocky2020-06-26 20:05:16 -0400
commit0cb1df1edd86986d5d7a3ecf607fe78af03d62a0 (patch)
tree11a5664dfff6f9545481f30a8e5c46cfef1ff770 /src/bytecode.c
parent58e112fe18abe48321a9a9b676d76fdb68ee833a (diff)
downloademacs-0cb1df1edd86986d5d7a3ecf607fe78af03d62a0.tar.gz
emacs-0cb1df1edd86986d5d7a3ecf607fe78af03d62a0.zip
Store the bytecode offset in thread_statefeature/zach-soc-bytecode-in-traceback
* src/lisp.h: * src/eval.c (backtrace_byte_offset): Remove global variable, and put it... * src/thread.h (thread_state): ...in here as m_backtrace_byte_offset, and define backtrace_byte_offset as a macro that points to it. * src/bytecode.c (UPDATE_OFFSET): Move out of #ifdef BYTE_CODE_THREADED.
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index 6b7e9cbc7b9..8e3cddf7851 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -311,6 +311,10 @@ enum byte_code_op
311 311
312#define TOP (*top) 312#define TOP (*top)
313 313
314/* Update the thread's bytecode offset, just before NEXT. */
315
316#define UPDATE_OFFSET (backtrace_byte_offset = pc - bytestr_data)
317
314DEFUN ("byte-code", Fbyte_code, Sbyte_code, 3, 3, 0, 318DEFUN ("byte-code", Fbyte_code, Sbyte_code, 3, 3, 0,
315 doc: /* Function used internally in byte-compiled code. 319 doc: /* Function used internally in byte-compiled code.
316The first argument, BYTESTR, is a string of byte code; 320The first argument, BYTESTR, is a string of byte code;
@@ -424,14 +428,13 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
424 Threading provides a performance boost. These macros are how 428 Threading provides a performance boost. These macros are how
425 we allow the code to be compiled both ways. */ 429 we allow the code to be compiled both ways. */
426#ifdef BYTE_CODE_THREADED 430#ifdef BYTE_CODE_THREADED
427#define UPDATE_OFFSET (backtrace_byte_offset = pc - bytestr_data);
428 /* The CASE macro introduces an instruction's body. It is 431 /* The CASE macro introduces an instruction's body. It is
429 either a label or a case label. */ 432 either a label or a case label. */
430#define CASE(OP) insn_ ## OP 433#define CASE(OP) insn_ ## OP
431 /* NEXT is invoked at the end of an instruction to go to the 434 /* NEXT is invoked at the end of an instruction to go to the
432 next instruction. It is either a computed goto, or a 435 next instruction. It is either a computed goto, or a
433 plain break. */ 436 plain break. */
434#define NEXT UPDATE_OFFSET goto *(targets[op = FETCH]) 437#define NEXT UPDATE_OFFSET; goto *(targets[op = FETCH])
435 /* FIRST is like NEXT, but is only used at the start of the 438 /* FIRST is like NEXT, but is only used at the start of the
436 interpreter body. In the switch-based interpreter it is the 439 interpreter body. In the switch-based interpreter it is the
437 switch, so the threaded definition must include a semicolon. */ 440 switch, so the threaded definition must include a semicolon. */