X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcoerce.lisp;h=98d0a2977c744edfd5d6f2136c4bbf53c8b0e4b3;hb=409c08485fd358c78107d91f9e3aec4d17b3fd0d;hp=c9630f6c85d31daf6e09cdb2ceb39a988d195746;hpb=d40a76606c86722b0aef8179155f9f2840739b72;p=sbcl.git diff --git a/src/code/coerce.lisp b/src/code/coerce.lisp index c9630f6..98d0a29 100644 --- a/src/code/coerce.lisp +++ b/src/code/coerce.lisp @@ -11,7 +11,7 @@ (in-package "SB!IMPL") -(macrolet ((def-frob (name result access src-type &optional typep) +(macrolet ((def (name result access src-type &optional typep) `(defun ,name (object ,@(if typep '(type) ())) (do* ((index 0 (1+ index)) (length (length (the ,(ecase src-type @@ -27,20 +27,20 @@ (:list '(pop in-object)) (:vector '(aref in-object index)))))))) - (def-frob list-to-simple-string* (make-string length) schar :list) + (def list-to-simple-string* (make-string length) schar :list) - (def-frob list-to-bit-vector* (make-array length :element-type '(mod 2)) + (def list-to-bit-vector* (make-array length :element-type '(mod 2)) sbit :list) - (def-frob list-to-vector* (make-sequence-of-type type length) + (def list-to-vector* (make-sequence-of-type type length) aref :list t) - (def-frob vector-to-vector* (make-sequence-of-type type length) + (def vector-to-vector* (make-sequence-of-type type length) aref :vector t) - (def-frob vector-to-simple-string* (make-string length) schar :vector) + (def vector-to-simple-string* (make-string length) schar :vector) - (def-frob vector-to-bit-vector* (make-array length :element-type '(mod 2)) + (def vector-to-bit-vector* (make-array length :element-type '(mod 2)) sbit :vector)) (defun vector-to-list* (object) @@ -166,6 +166,11 @@ (not (fboundp object))) (error 'simple-type-error :datum object + ;; FIXME: SATISFIES FBOUNDP is a kinda bizarre broken + ;; type specifier, since the set of values it describes + ;; isn't in general constant in time. Maybe we could + ;; find a better way of expressing this error? (Maybe + ;; with the UNDEFINED-FUNCTION condition?) :expected-type '(satisfies fboundp) :format-control "~S isn't fbound." :format-arguments (list object)))