FILE: whenElse.kt public final enum class A : R|kotlin/Enum| { private constructor(): R|A| { super|>() } public final static enum entry A1: R|A| public final static enum entry A2: R|A| public final static fun values(): R|kotlin/Array| { } public final static fun valueOf(value: R|kotlin/String|): R|A| { } public final static val entries: R|kotlin/enums/EnumEntries| public get(): R|kotlin/enums/EnumEntries| } public final class B : R|kotlin/Any| { public constructor(): R|B| { super() } } public final class C : R|kotlin/Any| { public constructor(b: R|B|): R|C| { super() } public final val b: R|B| = R|/b| public get(): R|B| } public final fun get(f: R|kotlin/Boolean|): R|kotlin/Any| { ^get when () { R|/f| -> { Q|A|.R|/A.A1| } else -> { String() } } } public final fun case2(): R|kotlin/Unit| { lval flag: R|kotlin/Any| = R|/get|(Boolean(false)) lval l1: R|B| = when (R|/flag|!!) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } lval l2: R|B| = when (R|/flag|) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } } public final fun case2(): R|kotlin/Unit| { lval flag: R|kotlin/Any| = R|/get|(Boolean(true)) lval l1: R|B| = when (R|/flag|!!) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } lval l2: R|B| = when (R|/flag|) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } } public final fun case3(): R|kotlin/Unit| { lval flag: R|kotlin/String| = String() lval l1: R|B| = when (R|/flag|!!) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } lval l2: R|B| = when (R|/flag|) { ==($subj$, Q|A|.R|/A.A1|) -> { R|/B.B|() } ==($subj$, Q|A|.R|/A.A2|) -> { R|/B.B|() } } }