aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2014-04-12 22:51:11 -0400
committerStefan Monnier <[email protected]>2014-04-12 22:51:11 -0400
commit285d6d5d0fde973a31986877fb04a85be0e362ea (patch)
treee9bd39a901d35c8ed680999e306f633e27712d90 /src/bytecode.c
parenta9108bf189e6cccfe568348ec604b9eecd17a125 (diff)
* 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.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index 0ea646a974..f1bdfd9d9c 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;
}