FILE: smartcastsFromEquals_sameModule.kt public final class Final : R|kotlin/Any| { public constructor(): R|Final| { super() } } public open class Base : R|kotlin/Any| { public constructor(): R|Base| { super() } } public final class Derived : R|Base| { public constructor(): R|Derived| { super|>() } } public final class FinalWithOverride : R|kotlin/Any| { public constructor(): R|FinalWithOverride| { super() } public open override operator fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean| { ^equals ===(this@R|/FinalWithOverride|, R|/other|) } } public final fun testFinal(x: R|Final<*>|, y: R|Final|): R|kotlin/Unit| { when () { ==(R|/x|, R|/y|) -> { R|/takeIntFinal|(R|/x|) } } when () { ===(R|/x|, R|/y|) -> { R|/takeIntFinal|(R|/x|) } } } public final fun testBase(x: R|Base<*>|, y: R|Base|): R|kotlin/Unit| { when () { ==(R|/x|, R|/y|) -> { R|/takeIntBase#|(R|/x|) } } when () { ===(R|/x|, R|/y|) -> { R|/takeIntBase|(R|/x|) } } } public final fun testDerived(x: R|Derived<*>|, y: R|Derived|): R|kotlin/Unit| { when () { ==(R|/x|, R|/y|) -> { R|/takeIntDerived|(R|/x|) } } when () { ===(R|/x|, R|/y|) -> { R|/takeIntDerived|(R|/x|) } } } public final fun testFinalWithOverride(x: R|FinalWithOverride<*>|, y: R|FinalWithOverride|): R|kotlin/Unit| { when () { ==(R|/x|, R|/y|) -> { R|/takeIntFinalWithOverride#|(R|/x|) } } when () { ===(R|/x|, R|/y|) -> { R|/takeIntFinalWithOverride|(R|/x|) } } } public final fun takeIntFinal(x: R|Final|): R|kotlin/Unit| { } public final fun takeIntBase(x: R|Base|): R|kotlin/Unit| { } public final fun takeIntDerived(x: R|Derived|): R|kotlin/Unit| { } public final fun takeIntFinalWithOverride(x: R|FinalWithOverride|): R|kotlin/Unit| { }