FILE: a.kt public sealed class Base : R|kotlin/Any| { protected constructor(): R|Base| { super() } } public final class A : R|Base| { public constructor(): R|A| { super() } } FILE: b.kt public final object B : R|Base| { private constructor(): R|B| { super() } } FILE: c.kt public final fun test_1(base: R|Base|): R|kotlin/Unit| { lval x: R|kotlin/Unit| = when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } } lval y: R|kotlin/Unit| = when (R|/base|) { ==($subj$, Q|B|) -> { Int(1) } } lval z: R|kotlin/Int| = when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } ==($subj$, Q|B|) -> { Int(2) } } } public final fun test_2(base: R|Base?|): R|kotlin/Unit| { lval x: R|kotlin/Unit| = when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } ($subj$ is R|B|) -> { Int(2) } } lval y: R|kotlin/Unit| = when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } ==($subj$, Q|B|) -> { Int(2) } } lval z: R|kotlin/Int| = when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } ==($subj$, Q|B|) -> { Int(2) } ==($subj$, Null(null)) -> { Int(3) } } } public final fun test_3(base: R|Base|): R|kotlin/Unit| { when (R|/base|) { ($subj$ is R|A|) -> { Int(1) } } }