From 1d1de5b186f3707b904298fa12603cbec91fa5d9 Mon Sep 17 00:00:00 2001
From: wlott <wlott>
Date: Thu, 2 Aug 1990 15:14:42 +0000
Subject: [PATCH] Changed %THROW definition to not use DEFUN so that the
 compiler doesn't get confused.

---
 compiler/eval-comp.lisp | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/compiler/eval-comp.lisp b/compiler/eval-comp.lisp
index 75b07adff..a12f40fff 100644
--- a/compiler/eval-comp.lisp
+++ b/compiler/eval-comp.lisp
@@ -273,8 +273,13 @@
     (error "Wrong argument count, wanted ~D and got ~D."
 	   defined-args supplied-args)))
 
-(defun %throw (tag &rest args)
-  (throw tag (values-list args)))
+;;; Use (SETF SYMBOL-FUNCTION) insetad of DEFUN so that the compiler
+;;; doesn't try to compile the hidden %THROW MV-CALL in the throw below as
+;;; a local recursive call.
+;;;
+(setf (symbol-function '%throw)
+      #'(lambda (tag &rest args)
+	  (throw tag (values-list args))))
 
 (defun %more-arg (args index)
   (nth index args))
-- 
GitLab