X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fcompiler-deftype.lisp;h=24aeaa31096230341f3cb6203ddf4b3b4a8be381;hb=0f3a5f2e8886d18d0b4f6485c38a42be629422ae;hp=44a0c449b15ee8936d6d88e28c32159fe01a6a85;hpb=ce02ab2ecd9c6ae2e570abd8c93ebf3be55bbdad;p=sbcl.git diff --git a/src/compiler/compiler-deftype.lisp b/src/compiler/compiler-deftype.lisp index 44a0c44..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 @@ -36,16 +39,15 @@ ;; since mistakenly redefining a type isn't a common error ;; anyway, we just don't worry about trying to warn about it. ) - ((nil) + ((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")