~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/class-finalize.lisp: Improve reporting of CPL construction errors.
[sod]
/
src
/
builtin.lisp
diff --git
a/src/builtin.lisp
b/src/builtin.lisp
index
c49f263
..
be9a8e5
100644
(file)
--- a/
src/builtin.lisp
+++ b/
src/builtin.lisp
@@
-295,15
+295,28
@@
static const SodClass *const ~A__cpl[] = {
'initialization-effective-method)
(defmethod method-keyword-argument-lists
'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)
(mapcan (lambda (class)
(append (call-next-method)
(mapcan (lambda (class)
- (let ((initargs (sod-class-initargs 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
(and initargs
- (list (cons (mapcar #'sod-initarg-argument
- initargs)
- (format nil "initargs for ~A"
- class))))))
+ (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)))))
(sod-class-precedence-list
(effective-method-class method)))))
@@
-539,7
+552,8
@@
static const SodClass *const ~A__cpl[] = {
;; Done.
(dolist (class classes)
;; 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*)
(add-to-module module class))))
(export '*builtin-module*)