chiark / gitweb /
src/pset-{proto,impl}.lisp: Move `string-to-symbol' to implementation.
[sod] / src / builtin.lisp
index c7cb1488fd01bd62f12aeed20bcc4abde4c03c22..73577527281a9372e1df1c9d7b3c73efe76ae9eb 100644 (file)
@@ -279,7 +279,7 @@           (default (sod-initarg-default initarg)))
 
 (definst suppliedp-struct (stream) (flags var)
   (format stream
-         "~@<struct { ~2I~_~{unsigned ~A : 1;~^ ~_~} ~I~_} ~A;~:>"
+         "~@<struct { ~2I~_~{unsigned ~A: 1;~^ ~_~} ~I~_} ~A;~:>"
          flags var))
 
 ;; Initialization.
@@ -295,19 +295,30 @@ (defmethod sod-message-effective-method-class
   'initialization-effective-method)
 
 (defmethod method-keyword-argument-lists
-    ((method initialization-effective-method) direct-methods)
+    ((method initialization-effective-method) direct-methods state)
   (append (call-next-method)
-         (delete-duplicates
-          (mapcan (lambda (class)
-                    (let ((initargs (sod-class-initargs class)))
-                      (and initargs
-                           (list (cons (mapcar #'sod-initarg-argument
-                                               initargs)
-                                       (format nil "initargs for ~A"
-                                               class))))))
-                  (sod-class-precedence-list
-                   (effective-method-class method)))
-          :key #'argument-name)))
+         (mapcan (lambda (class)
+                   (let* ((initargs (sod-class-initargs class))
+                          (map (make-hash-table))
+                          (arglist (mapcar
+                                    (lambda (initarg)
+                                      (let ((arg (sod-initarg-argument
+                                                  initarg)))
+                                        (setf (gethash arg map) initarg)
+                                        arg))
+                                    initargs)))
+                     (and initargs
+                          (list (cons (lambda (arg)
+                                        (info-with-location
+                                         (gethash arg map)
+                                         "Type `~A' from initarg ~
+                                          in class `~A' (here)"
+                                         (argument-type arg) class)
+                                        (report-inheritance-path
+                                         state class))
+                                      arglist)))))
+                 (sod-class-precedence-list
+                  (effective-method-class method)))))
 
 (defmethod lifecycle-method-kernel
     ((method initialization-effective-method) codegen target)
@@ -541,7 +552,8 @@ (defun bootstrap-classes (module)
 
     ;; Done.
     (dolist (class classes)
-      (finalize-sod-class class)
+      (unless (finalize-sod-class class)
+       (error "Failed to finalize built-in class"))
       (add-to-module module class))))
 
 (export '*builtin-module*)