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