K2: Postpone inference forks resolution until FULL completion
It helps to use expected type information when choosing the branch even in the nested calls ^KT-43296 In Progress
This commit is contained in:
committed by
Space Team
parent
c958c79362
commit
10d63cc52a
+30
@@ -0,0 +1,30 @@
|
||||
// SKIP_TXT
|
||||
|
||||
interface Slice<V>
|
||||
|
||||
interface A
|
||||
interface B : A
|
||||
interface C : A
|
||||
|
||||
val SL0: Slice<A> = TODO()
|
||||
val SL1: Slice<B> = TODO()
|
||||
val SL2: Slice<C> = TODO()
|
||||
|
||||
fun <X> foo(s: Slice<X>): X? {
|
||||
if (s.hashCode() == 0) {
|
||||
return id(bar(s))
|
||||
}
|
||||
|
||||
if (s === SL0) {
|
||||
return id(bar(s))
|
||||
}
|
||||
|
||||
if (s === SL1 || s === SL2) {
|
||||
return id(bar(s))
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun <T> id(x: T): T = x
|
||||
|
||||
fun <Y> bar(w: Slice<Y>): Y? = null
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// SKIP_TXT
|
||||
|
||||
interface Slice<V>
|
||||
|
||||
interface A
|
||||
interface B : A
|
||||
interface C : A
|
||||
|
||||
val SL0: Slice<A> = TODO()
|
||||
val SL1: Slice<B> = TODO()
|
||||
val SL2: Slice<C> = TODO()
|
||||
|
||||
fun <X> foo(s: Slice<X>): X? {
|
||||
if (s.hashCode() == 0) {
|
||||
return id(bar(s))
|
||||
}
|
||||
|
||||
if (s === SL0) {
|
||||
return <!TYPE_MISMATCH, TYPE_MISMATCH!>id(bar(<!DEBUG_INFO_SMARTCAST!>s<!>))<!>
|
||||
}
|
||||
|
||||
if (s === SL1 || s === SL2) {
|
||||
return id(bar(s))
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun <T> id(x: T): T = x
|
||||
|
||||
fun <Y> bar(w: Slice<Y>): Y? = null
|
||||
Reference in New Issue
Block a user