Skip to content

Commit

Permalink
1.0.30.42: missing array predicate definitions
Browse files Browse the repository at this point in the history
 * Not all specialized array predicates had an out-of-line predicate.
   Generate them from the SAETP vector. Reported by Stelian Ionescu.

 * Test case.
  • Loading branch information
nikodemus committed Aug 10, 2009
1 parent d442c23 commit 877c768
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 31 deletions.
2 changes: 2 additions & 0 deletions NEWS
Expand Up @@ -50,6 +50,8 @@ changes relative to sbcl-1.0.30:
Elsasser)
* improvement: pretty-printing of various Lisp forms has been improved
(thanks to Tobias Rittweiler)
* bug fix: some out-of-line array predicates were missing (reported by
Stelian Ionescu)
* bug fix: a failing AVER in CONVERT-MV-CALL has been fixed. (thanks to
Larry D'Anna)
* bug fix: a failing AVER in %ALLOCATE-CLOSURES conversion has been fixed
Expand Down
50 changes: 20 additions & 30 deletions src/code/pred.lisp
Expand Up @@ -115,43 +115,33 @@
(def-type-predicate-wrapper ratiop)
(def-type-predicate-wrapper realp)
(def-type-predicate-wrapper short-float-p)
(def-type-predicate-wrapper simple-array-p)
(def-type-predicate-wrapper simple-bit-vector-p)
(def-type-predicate-wrapper simple-base-string-p)
#!+sb-unicode (def-type-predicate-wrapper simple-character-string-p)
(def-type-predicate-wrapper simple-string-p)
(def-type-predicate-wrapper simple-vector-p)
(def-type-predicate-wrapper single-float-p)
(def-type-predicate-wrapper stringp)
(def-type-predicate-wrapper %instancep)
(def-type-predicate-wrapper symbolp)
(def-type-predicate-wrapper system-area-pointer-p)
(def-type-predicate-wrapper weak-pointer-p)
(def-type-predicate-wrapper vectorp)
#!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
(def-type-predicate-wrapper unsigned-byte-32-p)
#!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
(def-type-predicate-wrapper signed-byte-32-p)
(progn
(def-type-predicate-wrapper unsigned-byte-32-p)
(def-type-predicate-wrapper signed-byte-32-p))
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
(def-type-predicate-wrapper unsigned-byte-64-p)
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
(def-type-predicate-wrapper signed-byte-64-p)
(def-type-predicate-wrapper simple-array-nil-p)
(def-type-predicate-wrapper simple-array-unsigned-byte-2-p)
(def-type-predicate-wrapper simple-array-unsigned-byte-4-p)
(def-type-predicate-wrapper simple-array-unsigned-byte-8-p)
(def-type-predicate-wrapper simple-array-unsigned-byte-16-p)
(def-type-predicate-wrapper simple-array-unsigned-byte-32-p)
(def-type-predicate-wrapper simple-array-signed-byte-8-p)
(def-type-predicate-wrapper simple-array-signed-byte-16-p)
(def-type-predicate-wrapper simple-array-signed-byte-30-p)
(def-type-predicate-wrapper simple-array-signed-byte-32-p)
(def-type-predicate-wrapper simple-array-single-float-p)
(def-type-predicate-wrapper simple-array-double-float-p)
#!+long-float (def-type-predicate-wrapper simple-array-long-float-p)
(def-type-predicate-wrapper simple-array-complex-single-float-p)
(def-type-predicate-wrapper simple-array-complex-double-float-p)
#!+long-float (def-type-predicate-wrapper simple-array-complex-long-float-p)
(progn
(def-type-predicate-wrapper unsigned-byte-64-p)
(def-type-predicate-wrapper signed-byte-64-p))
;; Specialized array types
(macrolet ((saetp-defs ()
`(progn
,@(map 'list
(lambda (saetp)
`(def-type-predicate-wrapper
,(symbolicate (sb!vm:saetp-primitive-type-name saetp) "-P")))
sb!vm:*specialized-array-element-type-properties*))))
(saetp-defs))
;; Other array types
(def-type-predicate-wrapper simple-array-p)
(def-type-predicate-wrapper simple-string-p)
(def-type-predicate-wrapper stringp)
(def-type-predicate-wrapper vectorp)
(def-type-predicate-wrapper vector-nil-p))

;;; Return the specifier for the type of object. This is not simply
Expand Down
14 changes: 14 additions & 0 deletions tests/compiler.pure.lisp
Expand Up @@ -3233,6 +3233,20 @@
t))))
(ctu:assert-no-consing (funcall f))))

(with-test (:name :array-type-predicates)
(dolist (et sb-kernel::*specialized-array-element-types*)
(when et
(let* ((v (make-array 3 :element-type et))
(fun (compile nil `(lambda ()
(list
(if (typep ,v '(simple-array ,et (*)))
:good
:bad)
(if (typep (elt ,v 0) '(simple-array ,et (*)))
:bad
:good))))))
(assert (equal '(:good :good) (funcall fun)))))))

(with-test (:name :truncate-float)
(let ((s (compile nil `(lambda (x)
(declare (single-float x))
Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Expand Up @@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
"1.0.30.41"
"1.0.30.42"

0 comments on commit 877c768

Please sign in to comment.