** FIND-METHOD signals an error if the lengths of the specializers
is incompatible with the generic function, even if the ERRORP
argument is true.
+ ** TYPE-OF returns recognizeable subtypes of all built-in-types of
+ which its argument is a member.
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles
(addr (* t))
(len integer)
(af integer)))
- (:structure hostent ("struct hostent"
- ((* t) name "char *" "h_name")
- (integer length "int" "h_length")))
-
(:function setsockopt ("setsockopt" integer
(socket integer)
(level integer)
(when (constant-continuation-p initial-element)
(let ((value (continuation-value initial-element)))
(cond
- ((not (csubtypep (ctype-of value)
- (saetp-ctype saetp)))
+ ((not (ctypep value (saetp-ctype saetp)))
;; this case will cause an error at runtime, so we'd
;; better WARN about it now.
(compiler-warn "~@<~S is not a ~S (which is the ~
value
(type-specifier (saetp-ctype saetp))
eltype))
- ((not (csubtypep (ctype-of value) eltype-type))
+ ((not (ctypep value eltype-type))
;; this case will not cause an error at runtime, but
;; it's still worth STYLE-WARNing about.
(compiler-style-warn "~S is not a ~S."
(defknown copy-to-system-area
((simple-unboxed-array (*)) index system-area-pointer index index)
- null
+ (values)
())
(defknown copy-from-system-area
(system-area-pointer index (simple-unboxed-array (*)) index index)
- null
+ (values)
())
(defknown system-area-copy
(system-area-pointer index system-area-pointer index index)
- null
+ (values)
())
(defknown bit-bash-copy
((simple-unboxed-array (*)) index
(simple-unboxed-array (*)) index index)
- null
+ (values)
())
;;; (not really a bit-bashing routine, but starting to take over from
(defknown %byte-blt
((or (simple-unboxed-array (*)) system-area-pointer) index
(or (simple-unboxed-array (*)) system-area-pointer) index index)
- null
+ (values)
())
\f
;;;; code/function/fdefn object manipulation routines
(memmove (sap+ (sapify dst) dst-start)
(sap+ (sapify src) src-start)
(- dst-end dst-start)))
- nil))
+ (values)))
\f
;;;; transforms for EQL of floating point values
(typecase x
(structure-class (values (info :type :documentation (class-name x))))
(t (and (typep x 'symbol) (values (info :type :documentation x))))))
- (setf (info :setf :documentation x))
+ (setf (values (info :setf :documentation x)))
((t)
(typecase x
(function (%fun-doc x))
(values-specifier-type
`(values ,@(mapcar (lambda (x)
(type-specifier (continuation-type x)))
- values))))
+ values)
+ &optional)))
\f
;;;; byte operations
;;;;
EOF
expect_clean_compile $tmpfilename
-# This in an ideal world would fail, but at present it doesn't.
+# This in an ideal world would fail (that is, return with FAILURE-P
+# set), but at present it doesn't.
cat > $tmpfilename <<EOF
(in-package :cl-user)
(defun foo (x) (list x))
EOF
# expect_failed_compile $tmpfilename
+# This used to not warn, because the VALUES derive-type optimizer was
+# insufficiently precise.
+cat > $tmpfilename <<EOF
+ (in-package :cl-user)
+ (defun foo (x) (declare (ignore x)) (values))
+ (defun bar (x) (1+ (foo x)))
+EOF
+expect_failed_compile $tmpfilename
+
+# Even after making the VALUES derive-type optimizer more precise, the
+# following should still be clean.
+cat > $tmpfilename <<EOF
+ (in-package :cl-user)
+ (defun foo (x) (declare (ignore x)) (values))
+ (defun bar (x) (car x))
+EOF
+expect_clean_compile $tmpfilename
+
rm $tmpfilename
rm $compiled_tmpfilename
;;; 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".)
-"0.8.0.58"
+"0.8.0.59"