Utility predicates for packing: UNBOUNDED-SC-P and UNBOUNDED-TN-P
[sbcl.git] / src / pcl / early-low.lisp
index 7fca8d3..3821cfc 100644 (file)
 ;;; and use that to replace all three variables.)
 (defvar *pcl-package*                (find-package "SB-PCL"))
 
+(declaim (inline defstruct-classoid-p))
+(defun defstruct-classoid-p (classoid)
+  ;; It is non-obvious to me why STRUCTURE-CLASSOID-P doesn't
+  ;; work instead of this. -- NS 2008-03-14
+  (typep (layout-info (classoid-layout classoid)) 'defstruct-description))
+
 ;;; This excludes structure types created with the :TYPE option to
 ;;; DEFSTRUCT. It also doesn't try to deal with types created by
 ;;; hairy DEFTYPEs, e.g.
 ;;; it needs a more mnemonic name. -- WHN 19991204
 (defun structure-type-p (type)
   (and (symbolp type)
-       (not (condition-type-p type))
        (let ((classoid (find-classoid type nil)))
          (and classoid
-              (typep (layout-info
-                      (classoid-layout classoid))
-                     'defstruct-description)))))
+              (not (condition-classoid-p classoid))
+              (defstruct-classoid-p classoid)))))
 
 ;;; Symbol contruction utilities
 (defun format-symbol (package format-string &rest format-arguments)
                   *the-class-std-class*
                   *the-class-standard-class*
                   *the-class-funcallable-standard-class*
+                  *the-class-forward-referenced-class*
                   *the-class-method*
                   *the-class-standard-method*
                   *the-class-standard-reader-method*
                   *the-class-global-writer-method*
                   *the-class-global-boundp-method*
                   *the-class-standard-generic-function*
+                  *the-class-standard-direct-slot-definition*
                   *the-class-standard-effective-slot-definition*
 
                   *the-eslotd-standard-class-slots*