102c9c08d0
Before that commit we desugared `a ?: b` as
when (val elvis = a) {
null -> b
else -> elvis
}
It was incorrect, because `a` should be resolved in dependent mode,
but when it was `elvis` initializer it was resolved in independent
mode, so we can't infer type for `a` in some complex cases
32 lines
823 B
Plaintext
Vendored
32 lines
823 B
Plaintext
Vendored
FILE: elvis.kt
|
|
public abstract interface A : R|kotlin/Any| {
|
|
public abstract fun foo(): R|kotlin/Unit|
|
|
|
|
public abstract val b: R|kotlin/Boolean|
|
|
public get(): R|kotlin/Boolean|
|
|
|
|
}
|
|
public final fun test_1(x: R|A?|): R|kotlin/Unit| {
|
|
when () {
|
|
R|<local>/x|?.{ $subj$.R|/A.b| } ?: ^test_1 Unit -> {
|
|
R|<local>/x|.R|/A.foo|()
|
|
}
|
|
}
|
|
|
|
}
|
|
public final fun test2(a: R|kotlin/Any?|, b: R|kotlin/Any?|): R|kotlin/String| {
|
|
when () {
|
|
(R|<local>/b| !is R|kotlin/String|) -> {
|
|
^test2 String()
|
|
}
|
|
}
|
|
|
|
when () {
|
|
(R|<local>/a| !is R|kotlin/String?|) -> {
|
|
^test2 String()
|
|
}
|
|
}
|
|
|
|
^test2 R|<local>/a| ?: R|<local>/b|
|
|
}
|