diff options
author | Richard M. Stallman <rms@gnu.org> | 1997-01-02 20:50:51 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1997-01-02 20:50:51 +0000 |
commit | 5bdf93be930bd3f7afbd620ae927c0db95e1bbe1 (patch) | |
tree | 57509a5bf607050a96fbebb7af02ba5081753c30 /src/bytecode.c | |
parent | 777c694fcf34763f6741e887ba32172b9078a7ee (diff) | |
download | emacs-5bdf93be930bd3f7afbd620ae927c0db95e1bbe1.tar.gz |
(HANDLE_RELOCATION): New macro.
(MAYBE_GC): Call HANDLE_RELOCATION. Swallow following semicolon.
(Fbyte_code): Use HANDLE_RELOCATION.
Diffstat (limited to 'src/bytecode.c')
-rw-r--r-- | src/bytecode.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 7c73696a99a..38a1d3a0d5d 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -256,7 +256,20 @@ Lisp_Object Qbytecode; #define MAYBE_GC() \ if (consing_since_gc > gc_cons_threshold) \ - Fgarbage_collect (); + { \ + Fgarbage_collect (); \ + HANDLE_RELOCATION (); \ + } \ + else + +/* Relocate BYTESTR if there has been a GC recently. */ +#define HANDLE_RELOCATION() \ + if (! EQ (string_saved, bytestr)) \ + { \ + pc = pc - XSTRING (string_saved)->data + XSTRING (bytestr)->data; \ + string_saved = bytestr; \ + } \ + else /* Check for jumping out of range. */ #define CHECK_RANGE(ARG) \ @@ -323,11 +336,8 @@ If the third argument is incorrect, Emacs may crash.") pc - XSTRING (string_saved)->data); #endif - if (! EQ (string_saved, bytestr)) - { - pc = pc - XSTRING (string_saved)->data + XSTRING (bytestr)->data; - string_saved = bytestr; - } + /* Update BYTESTR if we had a garbage collection. */ + HANDLE_RELOCATION (); #ifdef BYTE_CODE_METER prev_op = this_op; |