summaryrefslogtreecommitdiff
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1997-01-02 20:50:51 +0000
committerRichard M. Stallman <rms@gnu.org>1997-01-02 20:50:51 +0000
commit5bdf93be930bd3f7afbd620ae927c0db95e1bbe1 (patch)
tree57509a5bf607050a96fbebb7af02ba5081753c30 /src/bytecode.c
parent777c694fcf34763f6741e887ba32172b9078a7ee (diff)
downloademacs-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.c22
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;