From c231fb42c024417f8f0de65a457304e821b36bf5 Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Tue, 14 Jun 2005 12:34:59 +0000
Subject: [PATCH] From Gerd, cmucl-imp, 2005/06/11:

    This week's fix is for something Lynn Quam reported 2004-10-18.

    (defclass a (b) ())

    (compile nil
	     (lambda ()
	       (defclass b ()
		 ((x :reader b-x)))
	       (defmethod f ((obj b))
		 (b-x obj))))
      => error during macro expansion

    The fix is:

	    * src/pcl/method-slot-access-optimization.lisp (check-inline-accessor-call-p):
	    Return nil for forward-referenced classes.

	    * src/pcl/info.lisp (decide-slot-type): Return nil for
	    forward-referenced classes.
---
 pcl/info.lisp                            | 6 ++++--
 pcl/method-slot-access-optimization.lisp | 6 +++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/pcl/info.lisp b/pcl/info.lisp
index 14cd7a700..c92a7d7ae 100644
--- a/pcl/info.lisp
+++ b/pcl/info.lisp
@@ -36,7 +36,7 @@
 ;;; GF is actually non-accessor GF.  Clean this up.
 ;;; (setf symbol-value) should be handled like (setf fdefinition)
 
-(file-comment "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/info.lisp,v 1.10 2005/01/27 14:45:58 rtoy Exp $")
+(file-comment "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/info.lisp,v 1.11 2005/06/14 12:34:59 rtoy Rel $")
 
 (in-package "PCL")
 
@@ -227,7 +227,9 @@
       (let* ((class (if (symbolp class-or-name)
 			(find-class class-or-name nil)
 			class-or-name))
-	     (slotd (when class
+	     (slotd (when (if (eq *boot-state* 'complete)
+			      (std-class-p class)
+			      class)
 		      (find-slot-definition class slot-name))))
 	(when slotd
 	  (slot-definition-type slotd)))))
diff --git a/pcl/method-slot-access-optimization.lisp b/pcl/method-slot-access-optimization.lisp
index 2b4278fb7..04f2de218 100644
--- a/pcl/method-slot-access-optimization.lisp
+++ b/pcl/method-slot-access-optimization.lisp
@@ -52,7 +52,7 @@
 ;;;
 
 (file-comment
- "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/method-slot-access-optimization.lisp,v 1.6 2003/10/29 12:14:35 gerd Exp $")
+ "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/method-slot-access-optimization.lisp,v 1.7 2005/06/14 12:34:59 rtoy Rel $")
  
 (in-package "PCL")
 
@@ -684,9 +684,9 @@
     ;;
     ;; Check if CLASS is defined.  If not, we can't use inline
     ;; access because we won't be able to determine slot locations.
-    (unless (classp class)
+    (unless (std-class-p class)
       (let ((real-class (find-class class nil)))
-	(when (null real-class)
+	(unless (std-class-p real-class)
 	  (when (slot-declaration env 'inline class)
 	    (cant-optimize class "The class is not defined at compile time"))
 	  (return-from check-inline-accessor-call-p nil))
-- 
GitLab