X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fcompiler-deftype.lisp;h=24aeaa31096230341f3cb6203ddf4b3b4a8be381;hb=eda83f00e869193cb69826be5fa1086b95d12ff7;hp=322b06be4619ceb26118c5af08b4386574ffd246;hpb=ff92598854bf7cae8d57fe49cef4d9a98e1ab345;p=sbcl.git diff --git a/src/compiler/compiler-deftype.lisp b/src/compiler/compiler-deftype.lisp index 322b06b..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,8 +22,9 @@ (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)))) - (setf (classoid-cell-classoid (find-classoid-cell name)) nil) + (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)) (: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")