* src/bytecode.c (exec_byte_code): Rework the volatiles. Most importantly,
make sure stack.byte_string_start is not de-adjusted by pushhandler.
This commit is contained in:
parent
a9108bf189
commit
285d6d5d0f
2 changed files with 10 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* bytecode.c (exec_byte_code): Rework the volatiles. Most importantly,
|
||||
make sure stack.byte_string_start is not de-adjusted by pushhandler.
|
||||
|
||||
2014-04-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* keyboard.c (Fopen_dribble_file): Avoid some races. (Bug#17187)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue