From: Richard M. Stallman Date: Thu, 2 Jan 1997 20:50:51 +0000 (+0000) Subject: (HANDLE_RELOCATION): New macro. X-Git-Tag: emacs-20.1~3129 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5e7ed09384d53efe35568d6b62e4cc674134d06f;p=emacs.git (HANDLE_RELOCATION): New macro. (MAYBE_GC): Call HANDLE_RELOCATION. Swallow following semicolon. (Fbyte_code): Use HANDLE_RELOCATION. --- 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;