From 86e2d24d17e1960bc736dd8c5c03d486587177af Mon Sep 17 00:00:00 2001
From: ram <ram>
Date: Fri, 9 Feb 1990 15:47:28 +0000
Subject: [PATCH] Added binding of C:*COMPILE-TIME-DEFINE-MACROS* to NIL around
 compilation of system macros (at end of compilation.)  This prevents infinite
 recursions due to trying to interpret circularly defined macros.

---
 tools/worldcom.lisp | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/tools/worldcom.lisp b/tools/worldcom.lisp
index 554912555..68a95d915 100644
--- a/tools/worldcom.lisp
+++ b/tools/worldcom.lisp
@@ -108,12 +108,20 @@
     (load "nicode:netnamemsgdefs.lisp")
     (comf "nicode:netnameuser")))
 
-(comf "ncode:defstruct")
-(comf "ncode:defmacro")
-(comf "ncode:macros")
-(comf "ncode:defrecord")
-(comf "ncode:constants")
-
-(comf "c:globaldb")
+;;; Compile basic macros that we assume are already in the compilation
+;;; environment.  We inhibit compile-time definition to prevent these functions
+;;; from becoming interpreted.  In some cases, this is necessary for
+;;; compilation to work at all, since the expander functions are lazily
+;;; converted: we could go into an infinite recursion trying to convert the
+;;; definition of a macro which uses itself.
+;;;
+(let ((c:compile-time-define-macros* nil))
+  (comf "ncode:defstruct")
+  (comf "ncode:defmacro")
+  (comf "ncode:macros")
+  (comf "ncode:defrecord")
+  (comf "ncode:constants")
+  
+  (comf "c:globaldb"))
 
 ); with-compiler-log-file
-- 
GitLab