emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r116953: * src/bytecode.c (exec_byte_code): Rewor


From: Stefan Monnier
Subject: [Emacs-diffs] emacs-24 r116953: * src/bytecode.c (exec_byte_code): Rework the volatiles. Most importantly,
Date: Sun, 13 Apr 2014 02:51:16 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 116953
revision-id: address@hidden
parent: address@hidden
committer: Stefan Monnier <address@hidden>
branch nick: emacs-24
timestamp: Sat 2014-04-12 22:51:11 -0400
message:
  * src/bytecode.c (exec_byte_code): Rework the volatiles.  Most importantly,
  make sure stack.byte_string_start is not de-adjusted by pushhandler.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/bytecode.c                 bytecode.c-20091113204419-o5vbwnq5f7feedwu-257
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-04-12 21:54:27 +0000
+++ b/src/ChangeLog     2014-04-13 02:51:11 +0000
@@ -1,3 +1,8 @@
+2014-04-13  Stefan Monnier  <address@hidden>
+
+       * 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  <address@hidden>
 
        * keyboard.c (Fopen_dribble_file): Avoid some races.  (Bug#17187)

=== modified file 'src/bytecode.c'
--- a/src/bytecode.c    2014-01-01 07:43:34 +0000
+++ b/src/bytecode.c    2014-04-13 02:51:11 +0000
@@ -501,7 +501,6 @@
                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 @@
   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 @@
            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 @@
                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;
          }
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]