diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2014-04-12 22:51:11 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2014-04-12 22:51:11 -0400 |
commit | 285d6d5d0fde973a31986877fb04a85be0e362ea (patch) | |
tree | e9bd39a901d35c8ed680999e306f633e27712d90 /src/bytecode.c | |
parent | a9108bf189e6cccfe568348ec604b9eecd17a125 (diff) | |
download | emacs-285d6d5d0fde973a31986877fb04a85be0e362ea.tar.gz |
* src/bytecode.c (exec_byte_code): Rework the volatiles. Most importantly,
make sure stack.byte_string_start is not de-adjusted by pushhandler.
Diffstat (limited to 'src/bytecode.c')
-rw-r--r-- | src/bytecode.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 0ea646a9741..f1bdfd9d9c5 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -501,7 +501,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object args_template, ptrdiff_t nargs, Lisp_Object *args) { ptrdiff_t count = SPECPDL_INDEX (); - ptrdiff_t volatile count_volatile; #ifdef BYTE_CODE_METER int volatile this_op = 0; int prev_op; @@ -509,14 +508,12 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, int op; /* Lisp_Object v1, v2; */ Lisp_Object *vectorp; - Lisp_Object *volatile vectorp_volatile; #ifdef BYTE_CODE_SAFE - ptrdiff_t volatile const_length; - Lisp_Object *volatile stacke; - ptrdiff_t volatile bytestr_length; + ptrdiff_t const_length; + Lisp_Object *stacke; + ptrdiff_t bytestr_length; #endif struct byte_stack stack; - struct byte_stack volatile stack_volatile; Lisp_Object *top; Lisp_Object result; enum handlertype type; @@ -1122,9 +1119,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, PUSH_HANDLER (c, tag, type); c->bytecode_dest = dest; c->bytecode_top = top; - count_volatile = count; - stack_volatile = stack; - vectorp_volatile = vectorp; if (sys_setjmp (c->jmp)) { @@ -1135,12 +1129,11 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, handlerlist = c->next; PUSH (c->val); CHECK_RANGE (dest); - stack = stack_volatile; + /* Might have been re-set by longjmp! */ + stack.byte_string_start = SDATA (stack.byte_string); stack.pc = stack.byte_string_start + dest; } - count = count_volatile; - vectorp = vectorp_volatile; NEXT; } |