0.8.0.2:
[sbcl.git] / src / pcl / defs.lisp
index 9b4bb43..dc12f84 100644 (file)
                  *the-class-generic-function*
                  *the-class-built-in-class*
                  *the-class-slot-class*
+                 *the-class-condition-class*
                  *the-class-structure-class*
                  *the-class-std-class*
                  *the-class-standard-class*
 (defclass slot-object (t) ()
   (:metaclass slot-class))
 
+(defclass condition (slot-object instance) ()
+  (:metaclass condition-class))
+
 (defclass structure-object (slot-object instance) ()
   (:metaclass structure-class))
 
     :initform (cons nil nil))
    (predicate-name
     :initform nil
-    :reader class-predicate-name)))
+    :reader class-predicate-name)
+   (finalized-p
+    :initform nil
+    :reader class-finalized-p)))
+
+(def!method make-load-form ((class class) &optional env)
+  ;; FIXME: should we not instead pass ENV to FIND-CLASS?  Probably
+  ;; doesn't matter while all our environments are the same...
+  (declare (ignore env))
+  (let ((name (class-name class)))
+    (unless (and name (eq (find-class name nil) class))
+      (error "~@<Can't use anonymous or undefined class as constant: ~S~:@>"
+            class))
+    `(find-class ',name)))
 
 ;;; The class PCL-CLASS is an implementation-specific common
 ;;; superclass of all specified subclasses of the class CLASS.
 
 (defclass built-in-class (pcl-class) ())
 
-(defclass condition-class (pcl-class) ())
+(defclass condition-class (slot-class) ())
 
 (defclass structure-class (slot-class)
   ((defstruct-form
     :initarg :allocation-class
     :accessor slot-definition-allocation-class)))
 
+(defclass condition-slot-definition (slot-definition)
+  ((allocation
+    :initform :instance
+    :initarg :allocation
+    :accessor slot-definition-allocation)
+   (allocation-class
+    :initform nil
+    :initarg :allocation-class
+    :accessor slot-definition-allocation-class)))
+
 (defclass structure-slot-definition (slot-definition)
   ((defstruct-accessor-symbol
      :initform nil
     :initform nil
     :accessor slot-definition-location)))
 
+(defclass condition-direct-slot-definition (condition-slot-definition
+                                           direct-slot-definition)
+  ())
+
+(defclass condition-effective-slot-definition (condition-slot-definition
+                                              effective-slot-definition)
+  ())
+
 (defclass structure-direct-slot-definition (structure-slot-definition
                                            direct-slot-definition)
   ())
     (std-class std-class-p)
     (standard-class standard-class-p)
     (funcallable-standard-class funcallable-standard-class-p)
+    (condition-class condition-class-p)
     (structure-class structure-class-p)
     (forward-referenced-class forward-referenced-class-p)
     (method method-p)