Update 'this' extension receiver when there's a smart cast

If 'this' (implicit or explicit) was used as an extension receiver,
and the corresponding call required a smart-cast,
this information was effectively lost in "old" resolution & inference,
but is required by "old" JVM BE to generate proper CHECKCASTs.
This commit is contained in:
Dmitry Petrov
2017-07-19 11:56:42 +03:00
parent c9d54d7110
commit bf3e896464
9 changed files with 91 additions and 1 deletions
+19
View File
@@ -0,0 +1,19 @@
// TARGET_BACKEND: JVM
// FILE: Test.kt
open class KFoo {
fun foo(): String {
if (this is KFooBar) return bar
throw AssertionError()
}
}
class KFooBar : KFoo(), JBar
fun box(): String = KFooBar().foo()
// FILE: JBar.java
public interface JBar {
default String getBar() {
return "OK";
}
}
+12
View File
@@ -0,0 +1,12 @@
open class KFoo {
fun foo(): String {
if (this is KFooQux) return qux
throw AssertionError()
}
}
class KFooQux : KFoo()
val KFooQux.qux get() = "OK"
fun box() = KFooQux().foo()