X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcondition.lisp;h=8c19059ac421f7dbcdaaf5d7469c2806b630720c;hb=444d2072bc52e60a41af62ee22e343e76109212f;hp=a9f9fe86c21a7ee78816c2e64a3dc73d6852b9dd;hpb=0aecc2b20142e08068c3434273500131cb13fe2d;p=sbcl.git diff --git a/src/code/condition.lisp b/src/code/condition.lisp index a9f9fe8..8c19059 100644 --- a/src/code/condition.lisp +++ b/src/code/condition.lisp @@ -391,11 +391,17 @@ (lambda (new-value condition) (condition-writer-function condition new-value slot-name)))) +(defvar *define-condition-hooks* nil) + (defun %define-condition (name parent-types layout slots documentation - report default-initargs all-readers all-writers) + report default-initargs all-readers all-writers + source-location) (with-single-package-locked-error (:symbol name "defining ~A as a condition") (%compiler-define-condition name parent-types layout all-readers all-writers) + (sb!c:with-source-location (source-location) + (setf (layout-source-location layout) + source-location)) (let ((class (find-classoid name))) (setf (condition-classoid-slots class) slots) (setf (condition-classoid-report class) report) @@ -436,7 +442,10 @@ (dolist (initarg (condition-slot-initargs slot) nil) (when (functionp (getf e-def-initargs initarg)) (return t)))) - (push slot (condition-classoid-hairy-slots class)))))))) + (push slot (condition-classoid-hairy-slots class))))))) + (when (boundp '*define-condition-hooks*) + (dolist (fun *define-condition-hooks*) + (funcall fun class)))) name)) (defmacro define-condition (name (&rest parent-types) (&rest slot-specs) @@ -520,8 +529,8 @@ :initform-p ',initform-p :documentation ',documentation :initform - ,(if (constantp initform) - `',(eval initform) + ,(if (sb!xc:constantp initform) + `',(constant-form-value initform) `#'(lambda () ,initform))))))) (dolist (option options) @@ -544,8 +553,8 @@ (let ((val (second initargs))) (setq default-initargs (list* `',(first initargs) - (if (constantp val) - `',(eval val) + (if (sb!xc:constantp val) + `',(constant-form-value val) `#'(lambda () ,val)) default-initargs))))) (t @@ -564,7 +573,8 @@ ,report (list ,@default-initargs) ',(all-readers) - ',(all-writers))))))) + ',(all-writers) + (sb!c:source-location))))))) ;;;; DESCRIBE on CONDITIONs @@ -825,6 +835,9 @@ (format stream ", ") (destructuring-bind (type data) (cdr reference) (ecase type + (:initialization + (format stream "Initialization of ~:(~A~) Metaobjects" + (substitute #\ #\- (symbol-name data)))) (:generic-function (format stream "Generic Function ~S" data)) (:section (format stream "Section ~{~D~^.~}" data))))) (:ansi-cl