X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fcompiler-deftype.lisp;h=24aeaa31096230341f3cb6203ddf4b3b4a8be381;hb=3d544b84f2b7ecd617d220145a775079df6c7919;hp=20b08b5e0d46b73875aebd43add82d4037da4848;hpb=63cef087068afc157283c0a05ae1f16b962303aa;p=sbcl.git diff --git a/src/compiler/compiler-deftype.lisp b/src/compiler/compiler-deftype.lisp index 20b08b5..24aeaa3 100644 --- a/src/compiler/compiler-deftype.lisp +++ b/src/compiler/compiler-deftype.lisp @@ -13,15 +13,18 @@ (/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) (:primitive (when *type-system-initialized* (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 (class-layout (sb!xc:find-class name)))) - (setf (class-cell-class (find-class-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 @@ -38,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")