// !LANGUAGE: +InlineClasses // IGNORE_BACKEND_FIR: JVM_IR inline class UInt(val u: Int) { override fun toString(): String { return "UInt: $u" } } fun Any.isUInt(): Boolean = this is UInt fun Any.notIsUInt(): Boolean = this !is UInt inline fun Any?.instanceOf(): Boolean = this is T fun UInt.extension(): String = "OK:" fun foo(x: UInt?): String { if (x is UInt) { return x.extension() + x.toString() } return "fail" } fun bar(x: UInt?): String { if (x is Any) { return x.extension() } return "fail" } fun box(): String { val u = UInt(12) if (!u.isUInt()) return "fail" if (u.notIsUInt()) return "fail" if (1.isUInt()) return "fail" if (!1.notIsUInt()) return "fail" if (!u.instanceOf()) return "fail" if (1.instanceOf()) return "fail" val nullableUInt: UInt? = UInt(10) if (!nullableUInt.instanceOf()) return "fail" val nullAsUInt: UInt? = null if (nullAsUInt.instanceOf()) return "fail" if (!nullAsUInt.instanceOf()) return "fail" if (foo(u) != "OK:UInt: 12") return "fail" if (bar(u) != "OK:") return "fail" return "OK" }