File tree Expand file tree Collapse file tree 2 files changed +25
-4
lines changed
compiler/src/dotty/tools/dotc/transform
tests/neg-custom-args/isInstanceOf Expand file tree Collapse file tree 2 files changed +25
-4
lines changed Original file line number Diff line number Diff line change @@ -157,8 +157,12 @@ object TypeTestsCasts {
157
157
val xClass = effectiveClass(x)
158
158
val pClass = effectiveClass(p)
159
159
160
- ! xClass.derivesFrom(pClass)
161
- && (xClass.is(Final ) || pClass.is(Final ) || ! xClass.is(Trait ) && ! pClass.is(Trait ))
160
+ val bothAreClasses = ! xClass.is(Trait ) && ! pClass.is(Trait )
161
+ val notXsubP = ! xClass.derivesFrom(pClass)
162
+ val notPsubX = ! pClass.derivesFrom(xClass)
163
+ bothAreClasses && notXsubP && notPsubX
164
+ || xClass.is(Final ) && notXsubP
165
+ || pClass.is(Final ) && notPsubX
162
166
else
163
167
false
164
168
}
@@ -183,7 +187,8 @@ object TypeTestsCasts {
183
187
val res1 = recur(tp1, P )
184
188
val res2 = recur(tp2, P )
185
189
186
- if res1.isEmpty && res2.isEmpty then res1
190
+ if res1.isEmpty && res2.isEmpty then
191
+ res1
187
192
else if res2.isEmpty then
188
193
if isCheckDefinitelyFalse(tp1, P ) then res2
189
194
else res1
Original file line number Diff line number Diff line change @@ -19,7 +19,23 @@ class Foo {
19
19
}
20
20
21
21
def test4 [A ](x : List [Int ] | (A => Int )) = x match {
22
- case ls : List [Int ] => ls.head // ok, List decomposes to Some and None
22
+ case ls : List [Int ] => ls.head // error, List extends Int => T
23
+ case _ => 0
24
+ }
25
+
26
+ final class C [T ] extends A [T ]
27
+
28
+ def test5 [T ](x : A [T ] | B [T ] | Option [T ]): Boolean = x.isInstanceOf [C [String ]] // error
29
+
30
+ def test6 [T ](x : A [T ] | B [T ] | Option [T ]): Boolean = x.isInstanceOf [C [T ]]
31
+
32
+ def test7 [A ](x : Option [Int ] | (A => Int )) = x match {
33
+ case ls : Option [Int ] => ls.head // OK, Option decomposes to Some and None
34
+ case _ => 0
35
+ }
36
+
37
+ def test8 (x : List [Int ] | A [String ]) = x match {
38
+ case ls : List [Int ] => ls.head // OK, List decomposes to :: and Nil
23
39
case _ => 0
24
40
}
25
41
}
You can’t perform that action at this time.
0 commit comments