;; IR1-CONVERT-MAYBE-PREDICATE requires DEST to be CIF, so the
;; order of the following two forms is important
(setf (lvar-dest pred-lvar) node)
- (ir1-convert start pred-ctran pred-lvar test)
+ (multiple-value-bind (context count) (possible-rest-arg-context test)
+ (if context
+ (ir1-convert start pred-ctran pred-lvar `(%rest-true ,test ,context ,count))
+ (ir1-convert start pred-ctran pred-lvar test)))
(link-node-to-previous-ctran node pred-ctran)
(let ((start-block (ctran-block pred-ctran)))
(cond (cname
`(global-function ,cname))
(give-up
- (give-up-ir1-transform give-up))
+ (give-up-ir1-transform "not known to be a function"))
(t
`(%coerce-callable-to-fun ,lvar-name))))))
\f
(define-source-transform funcall (function &rest args)
`(%funcall ,(ensure-source-fun-form function) ,@args))
-(deftransform %coerce-callable-to-fun ((thing) * *)
- (ensure-lvar-fun-form thing 'thing "optimize away possible call to FDEFINITION at runtime"))
+(deftransform %coerce-callable-to-fun ((thing) * * :node node)
+ "optimize away possible call to FDEFINITION at runtime"
+ (ensure-lvar-fun-form thing 'thing t))
(define-source-transform %coerce-callable-to-fun (thing)
(ensure-source-fun-form thing t))
(values-subtypep (make-single-value-type (leaf-type value))
type))
(and (sb!xc:constantp value)
+ (or (not (values-type-p type))
+ (values-type-may-be-single-value-p type))
(ctypep (constant-form-value value)
(single-value-type type))))
(ir1-convert start next result value))