X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Ffndb.lisp;h=ac59674ccb86acb9ea93969db4693648bbef6b02;hb=15ecd1ada227a60bcb3a660a4924c8d9449cb997;hp=8ab1e064bd8ffe6278d2c43f8439dfdd699fc926;hpb=8902b8b6bd2e9285749dd39d313b33b6c69c5213;p=sbcl.git diff --git a/src/compiler/fndb.lisp b/src/compiler/fndb.lisp index 8ab1e06..ac59674 100644 --- a/src/compiler/fndb.lisp +++ b/src/compiler/fndb.lisp @@ -17,24 +17,8 @@ (defknown coerce (t type-specifier) t ;; Note: - ;; (1) This is not FLUSHABLE because it's defined to signal errors. - ;; (2) It's not worth trying to make this FOLDABLE in the - ;; cross-compiler,because - ;; (a) it would probably be really hard to make all the - ;; tricky issues (e.g. which specialized array types are - ;; supported) match between cross-compiler and target - ;; compiler, and besides - ;; (b) leaving it not FOLDABLE lets us use the idiom - ;; (COERCE FOO 'SOME-SPECIALIZED-ARRAY-TYPE-OR-ANOTHER) - ;; as a way of delaying the generation of specialized - ;; array types until runtime, which helps us keep the - ;; cross-compiler's dumper relatively simple and which - ;; lets us preserve distinctions which might not even exist - ;; on the cross-compilation host (because ANSI doesn't - ;; guarantee that specialized array types exist there). - ;; FIXME: It's actually not clear that COERCE on non-NUMBER types - ;; is FOLDABLE at all. Check this. - (movable #-sb-xc-host foldable) + ;; This is not FLUSHABLE because it's defined to signal errors. + (movable) ;; :DERIVE-TYPE RESULT-TYPE-SPEC-NTH-ARG 2 ? Nope... (COERCE 1 'COMPLEX) ;; returns REAL/INTEGER, not COMPLEX. ) @@ -44,7 +28,7 @@ (defknown type-of (t) t (foldable flushable)) ;;; These can be affected by type definitions, so they're not FOLDABLE. -(defknown (upgraded-complex-part-type sb!xc:upgraded-array-element-type) +(defknown (sb!xc:upgraded-complex-part-type sb!xc:upgraded-array-element-type) (type-specifier &optional lexenv-designator) type-specifier (unsafely-flushable)) @@ -421,7 +405,7 @@ (movable foldable flushable)) (defknown name-char (string-designator) (or character null) (movable foldable flushable)) -(defknown code-char (char-code) base-char +(defknown code-char (char-code) character ;; By suppressing constant folding on CODE-CHAR when the ;; cross-compiler is running in the cross-compilation host vanilla ;; ANSI Common Lisp, we can use CODE-CHAR expressions to delay until @@ -827,12 +811,12 @@ bit-orc1 bit-orc2) ((array bit) (array bit) &optional (or (array bit) (member t nil))) (array bit) - (foldable) + () #|:derive-type #'result-type-last-arg|#) (defknown bit-not ((array bit) &optional (or (array bit) (member t nil))) (array bit) - (foldable) + () #|:derive-type #'result-type-last-arg|#) (defknown bit-vector-= (bit-vector bit-vector) boolean @@ -1192,7 +1176,7 @@ :rename-and-delete :overwrite :append :supersede nil)) (:if-does-not-exist (member :error :create nil)) - (:external-format (member :default))) + (:external-format keyword)) (or stream null)) (defknown rename-file (pathname-designator filename) @@ -1215,7 +1199,7 @@ (:verbose t) (:print t) (:if-does-not-exist (member :error :create nil)) - (:external-format (member :default))) + (:external-format keyword)) t) (defknown directory (pathname-designator &key) @@ -1257,17 +1241,17 @@ (values (or function symbol cons) boolean boolean)) (defknown compile-file - (filename + (pathname-designator &key ;; ANSI options - (:output-file (or filename + (:output-file (or pathname-designator null ;; FIXME: This last case is a non-ANSI hack. (member t))) (:verbose t) (:print t) - (:external-format t) + (:external-format keyword) ;; extensions (:trace-file t) @@ -1343,6 +1327,8 @@ ;;;; miscellaneous extensions (defknown get-bytes-consed () unsigned-byte (flushable)) +(defknown mask-signed-field ((integer 0 *) integer) integer + (movable flushable foldable)) ;;; PCOUNTERs (defknown incf-pcounter (pcounter unsigned-byte) pcounter) @@ -1380,6 +1366,7 @@ (defknown %%primitive (t t &rest t) *) (defknown %pop-values (t) t) (defknown %nip-values (t t &rest t) (values)) +(defknown %allocate-closures (t) *) (defknown %type-check-error (t t) nil) ;; FIXME: This function does not return, but due to the implementation @@ -1476,7 +1463,7 @@ (movable flushable)) (defknown foreign-symbol-address-as-integer (simple-string &optional boolean) - integer + (values integer boolean) (movable flushable)) ;;;; miscellaneous internal utilities