\f
;;;; checking strategy determination
-(define-optimization-quality type-check
- (cond ((= safety 0) 0)
- ;; FIXME: It is duplicated in PROBABLE-TYPE-CHECK-P and in
- ;; some other places.
-
- ((and (<= speed safety)
- (<= space safety)
- (<= compilation-speed safety))
- 3)
- (t 2))
- ("no" "maybe" "fast" "full"))
-
;;; Return the type we should test for when we really want to check
;;; for TYPE. If type checking policy is "fast", then we return a
;;; weaker type if it is easier to check. First we try the defined
(dest (continuation-dest cont)))
(aver (not (eq ctype *wild-type*)))
(multiple-value-bind (ctypes count) (no-fun-values-types ctype)
- (multiple-value-bind (atypes acount) (no-fun-values-types ctype)
+ (multiple-value-bind (atypes acount) (no-fun-values-types atype)
(aver (eq count acount))
(cond ((not (eq count :unknown))
(if (or (exit-p dest)
(not (or (values-subtypep (continuation-proven-type cont)
(continuation-type-to-check cont))
(and (combination-p dest)
- (eq (combination-kind dest) :full)
+ (let ((kind (combination-kind dest)))
+ (or (eq kind :full)
+ (and (fun-info-p kind)
+ (null (fun-info-templates kind))
+ (not (fun-info-ir2-convert kind)))))
;; The theory is that the type assertion is from a
;; declaration in (or on) the callee, so the callee
;; should be able to do the check. We want to let