@@ -47,7 +47,7 @@ object Checkable {
47
47
*
48
48
* 1. if `P` is a singleton type, TRUE
49
49
* 2. if `P` is WildcardType, TRUE
50
- * 3. if `P` refers to an abstract type member or type parameter, FALSE
50
+ * 3. if `P` refers to an abstract type member or type parameter, `X <:< P`
51
51
* 4. if `P = Array[T]`, checkable(E, T) where `E` is the element type of `X`, defaults to `Any`.
52
52
* 5. if `P` is `pre.F[Ts]` and `pre.F` refers to a class which is not `Array`:
53
53
* (a) replace `Ts` with fresh type variables `Xs`
@@ -88,19 +88,20 @@ object Checkable {
88
88
}
89
89
90
90
val res = replaceBinderMap.apply(P ) match {
91
+ case _ if isAbstract => X <:< P
91
92
case _ : SingletonType => true
92
93
case WildcardType => true
93
94
case defn.ArrayOf (tpT) =>
94
- X match {
95
+ X .widen match {
95
96
case defn.ArrayOf (tpE) => checkable(tpE, tpT)
96
97
case _ => checkable(defn.AnyType , tpT)
97
98
}
98
- case tpe : AppliedType => ! isAbstract && isClassDetermined(tpe)
99
+ case tpe : AppliedType => isClassDetermined(tpe)
99
100
case AndType (tp1, tp2) => checkable(X , tp1) && checkable(X , tp2)
100
101
case OrType (tp1, tp2) => checkable(X , tp1) && checkable(X , tp2)
101
102
case AnnotatedType (t, an) => checkable(X , t)
102
103
case _ : RefinedType => false
103
- case _ => ! isAbstract
104
+ case _ => true
104
105
}
105
106
106
107
debug.println(i " checking ${X .show} isInstanceOf ${P } = $res" )
0 commit comments