(:include args-type
(class-info (type-class-or-lose 'values)))
(:constructor %make-values-type)
+ (:predicate %values-type-p)
(:copier nil)))
+(declaim (inline value-type-p))
+(defun values-type-p (x)
+ (or (eq x *wild-type*)
+ (%values-type-p x)))
+
(defun-cached (make-values-type-cached
:hash-bits 8
:hash-function (lambda (req opt rest allowp)
(cond
((and (not (eq spec u))
(info :type :builtin spec)))
+ ((and (consp spec) (symbolp (car spec))
+ (info :type :builtin (car spec))
+ (let ((expander (info :type :expander (car spec))))
+ (and expander (values-specifier-type (funcall expander spec))))))
((eq (info :type :kind spec) :instance)
(find-classoid spec))
((typep spec 'classoid)
(values nil nil))
((symbolp spec)
(values (info :type :expander spec) (list spec)))
+ ((and (consp spec) (symbolp (car spec)) (info :type :builtin (car spec)))
+ ;; see above
+ (values nil nil))
((and (consp spec) (symbolp (car spec)))
(values (info :type :expander (car spec)) spec))
(t nil)))