X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fcompiler-deftype.lisp;h=24aeaa31096230341f3cb6203ddf4b3b4a8be381;hb=7f579b076a1fc54587538ead07e506e7f06f3fe8;hp=c4a92a5c8c2111978cd00f2293209579a1ba366f;hpb=4f7161165647d655392713a0d95c951e4e1749ea;p=sbcl.git diff --git a/src/compiler/compiler-deftype.lisp b/src/compiler/compiler-deftype.lisp index c4a92a5..24aeaa3 100644 --- a/src/compiler/compiler-deftype.lisp +++ b/src/compiler/compiler-deftype.lisp @@ -13,7 +13,7 @@ (/show0 "compiler-deftype.lisp 14") -(defun %compiler-deftype (name expander &optional doc) +(defun %compiler-deftype (name lambda-list expander doc source-location) (with-single-package-locked-error (:symbol name "defining ~A as a type specifier")) (ecase (info :type :kind name) @@ -22,7 +22,8 @@ (error "illegal to redefine standard type: ~S" name))) (:instance (warn "The class ~S is being redefined to be a DEFTYPE." name) - (undefine-structure (layout-info (classoid-layout (find-classoid name)))) + (undeclare-structure (find-classoid name) t) + ;; FIXME: shouldn't this happen only at eval-time? (setf (classoid-cell-classoid (find-classoid-cell name :create t)) nil) (setf (info :type :compiler-layout name) nil) (setf (info :type :kind name) :defined)) @@ -40,14 +41,13 @@ ) ((nil :forthcoming-defclass-type) (setf (info :type :kind name) :defined))) - (setf (info :type :expander name) expander) + (setf (info :type :expander name) expander + (info :type :lambda-list name) lambda-list) + (sb!c:with-source-location (source-location) + (setf (info :type :source-location name) source-location)) (when doc (setf (fdocumentation name 'type) doc)) - ;; ### Bootstrap hack -- we need to define types before %NOTE-TYPE-DEFINED - ;; is defined. (FIXME: Do we still need to do this? -- WHN 19990310) - (if (fboundp 'sb!c::%note-type-defined) - (sb!c::%note-type-defined name) - (warn "defining type before %NOTE-TYPE-DEFINED is defined")) + (sb!c::%note-type-defined name) name) (/show0 "compiler-deftype.lisp end of file")