diff --git a/src/bootfiles/20e/boot-2014-06-1.lisp b/src/bootfiles/20e/boot-2014-06-1.lisp new file mode 100644 index 0000000000000000000000000000000000000000..8b1dca5793d2e1e616faa4d3d6e2ea5ac6f54fe3 --- /dev/null +++ b/src/bootfiles/20e/boot-2014-06-1.lisp @@ -0,0 +1,4 @@ +;; Define source-location/class info type so that code/error.lisp can +;; be compiled. +(in-package c) +(define-info-type source-location class (or form-numbers null) nil) diff --git a/src/code/error.lisp b/src/code/error.lisp index 3fc7f815b605fb08dd20db00b58f991f6e73a2e7..ee44212c17cd9bf99ff5018a77b28552db51c32a 100644 --- a/src/code/error.lisp +++ b/src/code/error.lisp @@ -597,7 +597,7 @@ ;;;; DEFINE-CONDITION (eval-when (compile load eval) -(defun %compiler-define-condition (name direct-supers layout) +(defun %compiler-define-condition (name direct-supers layout source-location) (multiple-value-bind (class old-layout) (insured-find-class name #'condition-class-p #'make-condition-class) @@ -625,7 +625,9 @@ ;; Initialize CPL slot. (setf (condition-class-cpl class) (remove-if-not #'condition-class-p - (std-compute-class-precedence-list class)))) + (std-compute-class-precedence-list class))) + + (setf (info :source-location :class name) source-location)) (undefined-value)) ); eval-when (compile load eval) @@ -872,7 +874,8 @@ `(progn (eval-when (compile load eval) - (%compiler-define-condition ',name ',parent-types ',layout)) + (%compiler-define-condition ',name ',parent-types ',layout + (c::source-location))) (declaim (ftype (function (t) t) ,@(all-readers))) (declaim (ftype (function (t t) t) ,@(all-writers))) diff --git a/src/compiler/globaldb.lisp b/src/compiler/globaldb.lisp index ae7b565ede216f7bceb8967f763baf39547b7b3c..8d182c8342a7832ad550705da6f5f0c203dc0646 100644 --- a/src/compiler/globaldb.lisp +++ b/src/compiler/globaldb.lisp @@ -1174,6 +1174,10 @@ ;;; location for defstruct and deftype. (define-info-class source-location) (define-info-type source-location defvar (or form-numbers null) nil) +;; This is used for define-condition. It could also be used for +;; defclass but PCL classes already have a "definition-source" slot and we +;; store it there. +(define-info-type source-location class (or form-numbers null) nil) ;; The textdomain for the documentation (define-info-type function textdomain (or string null) nil)