X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Ffndb.lisp;h=113cb1da2dacf22615f597c7b2012692e7a954b5;hb=98a76d4426660876dec6649b1e228d2e5b47f579;hp=969c5d8a9c239254339bd1b7db42dea2222539b0;hpb=1bbb76fcfb9baddf0dc96412c87575d8aeb69c6d;p=sbcl.git diff --git a/src/compiler/fndb.lisp b/src/compiler/fndb.lisp index 969c5d8..113cb1d 100644 --- a/src/compiler/fndb.lisp +++ b/src/compiler/fndb.lisp @@ -96,10 +96,10 @@ ;;;; classes (sb!xc:deftype name-for-class () t) -(defknown class-name (sb!xc:class) name-for-class (flushable)) -(defknown find-class (name-for-class &optional t lexenv-designator) - (or sb!xc:class null) ()) -(defknown class-of (t) sb!xc:class (flushable)) +(defknown classoid-name (classoid) name-for-class (flushable)) +(defknown find-classoid (name-for-class &optional t lexenv-designator) + (or classoid null) ()) +(defknown classoid-of (t) classoid (flushable)) (defknown layout-of (t) layout (flushable)) (defknown copy-structure (structure-object) structure-object (flushable unsafe)) @@ -108,7 +108,14 @@ ;;; This is not FLUSHABLE, since it's required to signal an error if ;;; unbound. -(defknown (symbol-value symbol-function) (symbol) t ()) +(defknown (symbol-value) (symbol) t ()) +;;; From CLHS, "If the symbol is globally defined as a macro or a +;;; special operator, an object of implementation-dependent nature and +;;; identity is returned. If the symbol is not globally defined as +;;; either a macro or a special operator, and if the symbol is fbound, +;;; a function object is returned". Our objects of +;;; implementation-dependent nature happen to be functions. +(defknown (symbol-function) (symbol) function ()) (defknown boundp (symbol) boolean (flushable)) (defknown fboundp ((or symbol cons)) boolean (unsafely-flushable explicit-check)) @@ -467,6 +474,11 @@ (defknown %map-to-nil-on-vector (callable vector) null (flushable call)) (defknown %map-to-nil-on-sequence (callable sequence) null (flushable call)) +(defknown map-into (sequence callable &rest sequence) + sequence + (call) + :derive-type #'result-type-first-arg) + ;;; returns the result from the predicate... (defknown some (callable sequence &rest sequence) t (foldable unsafely-flushable call)) @@ -669,7 +681,7 @@ (defknown tree-equal (t t &key (:test callable) (:test-not callable)) boolean (foldable flushable call)) -(defknown endp (t) boolean (foldable unsafely-flushable movable)) +(defknown endp (list) boolean (foldable flushable movable)) (defknown list-length (list) (or index null) (foldable unsafely-flushable)) (defknown nth (index list) t (foldable flushable)) (defknown nthcdr (index list) t (foldable unsafely-flushable)) @@ -791,8 +803,8 @@ (defknown vector (&rest t) simple-vector (flushable unsafe)) -(defknown aref (array &rest index) t (foldable flushable)) -(defknown row-major-aref (array index) t (foldable flushable)) +(defknown aref (array &rest index) t (foldable)) +(defknown row-major-aref (array index) t (foldable)) (defknown array-element-type (array) type-specifier @@ -822,6 +834,9 @@ (foldable) #|:derive-type #'result-type-last-arg|#) +(defknown bit-vector-= (bit-vector bit-vector) boolean + (movable foldable flushable)) + (defknown array-has-fill-pointer-p (array) boolean (movable foldable flushable)) (defknown fill-pointer (vector) index (foldable unsafely-flushable)) @@ -946,7 +961,7 @@ (defknown (read read-preserving-whitespace read-char-no-hang read-char) (&optional streamlike t t t) t (explicit-check)) -(defknown read-delimited-list (character &optional streamlike t) t +(defknown read-delimited-list (character &optional streamlike t) list (explicit-check)) (defknown read-line (&optional streamlike t t t) (values t boolean) (explicit-check)) @@ -1133,7 +1148,12 @@ :rename-and-delete :overwrite :append :supersede nil)) (:if-does-not-exist (member :error :create nil)) - (:external-format (member :default))) + (:external-format + ;; FIXME: This is logically (MEMBER :DEFAULT), + ;; but as a workaround for bug 244, we don't + ;; declare it (to keep the compiler from trusting + ;; the declaration unchecked). + t)) (or stream null)) (defknown rename-file (pathname-designator filename) @@ -1156,7 +1176,11 @@ (:verbose t) (:print t) (:if-does-not-exist (member :error :create nil)) - (:external-format (member :default))) + (:external-format + ;; FIXME: This is logically (MEMBER :DEFAULT), but as a workaround + ;; for bug 244, we don't declare it (to keep the compiler from + ;; trusting the declaration unchecked). + t)) t) (defknown directory (pathname-designator &key) @@ -1195,9 +1219,10 @@ (:block-compile t)) (values (or pathname null) boolean boolean)) -(defknown disassemble (callable &key - (:stream stream) - (:use-labels t)) +;; FIXME: consider making (OR CALLABLE CONS) something like +;; EXTENDED-FUNCTION-DESIGNATOR +(defknown disassemble ((or callable cons) &key + (:stream stream) (:use-labels t)) null) (defknown fdocumentation (t symbol) @@ -1309,10 +1334,10 @@ (defknown %negate (number) number (movable foldable flushable explicit-check)) (defknown %check-bound (array index fixnum) index (movable foldable flushable)) (defknown data-vector-ref (simple-array index) t - (foldable flushable explicit-check)) + (foldable explicit-check)) (defknown data-vector-set (array index t) t (unsafe explicit-check)) (defknown hairy-data-vector-ref (array index) t - (foldable flushable explicit-check)) + (foldable explicit-check)) (defknown hairy-data-vector-set (array index t) t (unsafe explicit-check)) (defknown %caller-frame-and-pc () (values t t) (flushable)) (defknown %with-array-data (array index (or index null)) @@ -1344,7 +1369,8 @@ ;;; get efficient compilation of the inline expansion of ;;; %FIND-POSITION-IF, so it should maybe be in a more ;;; compiler-friendly package (SB-INT?) -(defknown sb!impl::signal-bounding-indices-bad-error (sequence index index) +(defknown sb!impl::signal-bounding-indices-bad-error + (sequence index sequence-end) nil) ; never returns