X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-defstruct.lisp;h=4138741cccdf0f97b15b59e18c6f2e884e5d9feb;hb=b420873de742dd0e9ff0d2231d2cc37cf6aba3f8;hp=bad8d9554e6265b4a97a2e442a0cfa751c8b13bc;hpb=8af1983e6de2609fec800b6ac2bf3b12ff9c68b9;p=sbcl.git diff --git a/src/code/target-defstruct.lisp b/src/code/target-defstruct.lisp index bad8d95..4138741 100644 --- a/src/code/target-defstruct.lisp +++ b/src/code/target-defstruct.lisp @@ -321,13 +321,21 @@ ;; through here. (%slotplace-accessor-funs (slotplace instance-type-check-form) (/show "macroexpanding %SLOTPLACE-ACCESSOR-FUNS" slotplace instance-type-check-form) - `(values (lambda (instance) - (/noshow0 "in %SLOTPLACE-ACCESSOR-FUNS-defined reader") - ,instance-type-check-form - (/noshow0 "back from INSTANCE-TYPE-CHECK-FORM") - ,slotplace) - (let ((typecheckfun (typespec-typecheckfun dsd-type))) - (lambda (new-value instance) + `(let ((typecheckfun (typespec-typecheckfun dsd-type))) + (values (if (dsd-safe-p dsd) + (lambda (instance) + (/noshow0 "in %SLOTPLACE-ACCESSOR-FUNS-defined reader") + ,instance-type-check-form + (/noshow0 "back from INSTANCE-TYPE-CHECK-FORM") + ,slotplace) + (lambda (instance) + (/noshow0 "in %SLOTPLACE-ACCESSOR-FUNS-defined reader") + ,instance-type-check-form + (/noshow0 "back from INSTANCE-TYPE-CHECK-FORM") + (let ((value ,slotplace)) + (funcall typecheckfun value) + value))) + (lambda (new-value instance) (/noshow0 "in %SLOTPLACE-ACCESSOR-FUNS-defined writer") ,instance-type-check-form (/noshow0 "back from INSTANCE-TYPE-CHECK-FORM") @@ -337,7 +345,7 @@ (let ((dsd-index (dsd-index dsd)) (dsd-type (dsd-type dsd))) - + #+sb-xc (/show0 "got DSD-TYPE=..") #+sb-xc (/hexstr dsd-type) (ecase (dd-type dd) @@ -346,7 +354,7 @@ (structure #+sb-xc (/show0 "case of DSD-TYPE = STRUCTURE") (%native-slot-accessor-funs %instance-ref)) - + ;; structures with the :TYPE option ;; FIXME: Worry about these later..