X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fdeftype.lisp;h=fba4c91f2017a65430f9df427bcf0e5c10695cb0;hb=5745b5a5b2e3b967bf3876b4306f31b3c78495fa;hp=6e8fa2d6607974863f8e09a6abdbfc69d985bf51;hpb=45043cae0617dd0f8071e97cd9ee2d6359a9f9e9;p=sbcl.git diff --git a/src/compiler/deftype.lisp b/src/compiler/deftype.lisp index 6e8fa2d..fba4c91 100644 --- a/src/compiler/deftype.lisp +++ b/src/compiler/deftype.lisp @@ -16,6 +16,9 @@ (sb!kernel::arg-count-error 'deftype (car whole) (cdr whole) nil 0 0) expansion))) +(defun %deftype (name) + (setf (classoid-cell-pcl-class (find-classoid-cell name :create t)) nil)) + (def!macro sb!xc:deftype (name lambda-list &body body) #!+sb-doc "Define a new type, with syntax like DEFMACRO." @@ -28,8 +31,8 @@ ;; is not availble early enough. (if (and (not lambda-list) (not decls) (not (cdr forms)) (or (member (car forms) '(t nil)) - (eq 'quote (caar forms)))) - (values `(constant-type-expander ,@forms) doc '(sb!c:source-location)) + (and (consp (car forms)) (eq 'quote (caar forms))))) + (values `(constant-type-expander ,(car forms)) doc '(sb!c:source-location)) (with-unique-names (whole) (multiple-value-bind (macro-body local-decs doc) (parse-defmacro lambda-list whole body name 'deftype :default-default ''*) @@ -38,9 +41,13 @@ ,macro-body) doc nil))))) - `(eval-when (:compile-toplevel :load-toplevel :execute) - (%compiler-deftype ',name - ',lambda-list - ,expander-form - ,doc - ,source-location-form)))) + `(progn + (eval-when (:compile-toplevel :load-toplevel :execute) + (%compiler-deftype ',name + ',lambda-list + ,expander-form + ,doc + ,source-location-form)) + (eval-when (:load-toplevel :execute) + (%deftype ',name)) + ',name)))