From 5e7ed09384d53efe35568d6b62e4cc674134d06f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 2 Jan 1997 20:50:51 +0000 Subject: [PATCH] (HANDLE_RELOCATION): New macro. (MAYBE_GC): Call HANDLE_RELOCATION. Swallow following semicolon. (Fbyte_code): Use HANDLE_RELOCATION. --- src/bytecode.c | 22 ++++++++++++++++------ 1 file 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; -- 2.39.5