chiark / gitweb /
src/final.lisp: Add function for interactively testing type parsing.
[sod] / src / class-make-impl.lisp
index 8aacd400ba4650040d9296e58933fd280b0909e9..dba6965e8b475a051f3a2fc7fd1f3fb029a95900 100644 (file)
@@ -28,24 +28,6 @@ (cl:in-package #:sod)
 ;;;--------------------------------------------------------------------------
 ;;; Classes.
 
-(defun maximum (items order what)
-  "Return a maximum item according to the non-strict partial ORDER."
-  (reduce (lambda (best this)
-           (cond ((funcall order best this) best)
-                 ((funcall order this best) this)
-                 (t (error "Unable to choose best ~A." what))))
-         items))
-
-(defmethod guess-metaclass ((class sod-class))
-  "Default metaclass-guessing function for classes.
-
-   Return the most specific metaclass of any of the CLASS's direct
-   superclasses."
-  (maximum (mapcar #'sod-class-metaclass
-                  (sod-class-direct-superclasses class))
-          #'sod-subclass-p
-          (format nil "metaclass for `~A'" class)))
-
 (defmethod shared-initialize :after ((class sod-class) slot-names &key pset)
   "Specific behaviour for SOD class initialization.
 
@@ -67,11 +49,11 @@   (default-slot-from-property (class 'nickname slot-names)
       (pset :nick :id)
     (string-downcase (slot-value class 'name)))
 
-  ;; If no metaclass, guess one in a (Lisp) class-specific way.
+  ;; Set the metaclass if the appropriate property has been provided;
+  ;; otherwise leave it unbound for now, and we'll sort out the mess during
+  ;; finalization.
   (default-slot-from-property (class 'metaclass slot-names)
-      (pset :metaclass :id meta (find-sod-class meta))
-    (and (sod-class-direct-superclasses class)
-        (guess-metaclass class)))
+      (pset :metaclass :id meta (find-sod-class meta)))
 
   ;; If no chain-link, then start a new chain here.
   (default-slot-from-property (class 'chain-link slot-names)
@@ -142,7 +124,7 @@ (defmethod make-sod-initializer-using-slot
                 :slot slot
                 :value-kind value-kind
                 :value-form value-form
-                :location location
+                :location (file-location location)
                 :pset pset))
 
 (defmethod shared-initialize :after
@@ -208,7 +190,7 @@ (defmethod make-sod-method-using-message
                 :class class
                 :type type
                 :body body
-                :location location
+                :location (file-location location)
                 :pset pset))
 
 (defmethod sod-message-method-class