X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Flate-type.lisp;h=3953c543a637e8684e5eac4e5cffcad0ade3e82f;hb=57bf8a7e65a81a8cff946a65e7e33e3f9b948ac6;hp=bf4630a5335a3baf022c5ae0df7130f08a5b7453;hpb=751e312b3f7cf6a1134f25e3f760c4599e5c4b39;p=sbcl.git diff --git a/src/code/late-type.lisp b/src/code/late-type.lisp index bf4630a..3953c54 100644 --- a/src/code/late-type.lisp +++ b/src/code/late-type.lisp @@ -1378,36 +1378,35 @@ (hairy-spec2 (hairy-type-specifier type2))) (cond ((equal-but-no-car-recursion hairy-spec1 hairy-spec2) (values t t)) + ((maybe-reparse-specifier! type1) + (csubtypep type1 type2)) + ((maybe-reparse-specifier! type2) + (csubtypep type1 type2)) (t (values nil nil))))) (!define-type-method (hairy :complex-subtypep-arg2) (type1 type2) - (let ((specifier (hairy-type-specifier type2))) - (cond - ((and (consp specifier) (eql (car specifier) 'satisfies)) - (case (cadr specifier) - ((keywordp) (if (type= type1 (specifier-type 'symbol)) - (values nil t) - (invoke-complex-subtypep-arg1-method type1 type2))) - (t (invoke-complex-subtypep-arg1-method type1 type2)))) - (t (invoke-complex-subtypep-arg1-method type1 type2))))) + (if (maybe-reparse-specifier! type2) + (csubtypep type1 type2) + (let ((specifier (hairy-type-specifier type2))) + (cond ((and (consp specifier) (eql (car specifier) 'satisfies)) + (case (cadr specifier) + ((keywordp) (if (type= type1 (specifier-type 'symbol)) + (values nil t) + (invoke-complex-subtypep-arg1-method type1 type2))) + (t (invoke-complex-subtypep-arg1-method type1 type2)))) + (t + (invoke-complex-subtypep-arg1-method type1 type2)))))) (!define-type-method (hairy :complex-subtypep-arg1) (type1 type2) - (declare (ignore type1 type2)) - (values nil nil)) + (if (maybe-reparse-specifier! type1) + (csubtypep type1 type2) + (values nil nil))) (!define-type-method (hairy :complex-=) (type1 type2) - (if (and (unknown-type-p type2) - (let* ((specifier2 (unknown-type-specifier type2)) - (name2 (if (consp specifier2) - (car specifier2) - specifier2))) - (info :type :kind name2))) - (let ((type2 (specifier-type (unknown-type-specifier type2)))) - (if (unknown-type-p type2) - (values nil nil) - (type= type1 type2))) - (values nil nil))) + (if (maybe-reparse-specifier! type2) + (type= type1 type2) + (values nil nil))) (!define-type-method (hairy :simple-intersection2 :complex-intersection2) (type1 type2)