48 lines
1.3 KiB
Kotlin
Vendored
48 lines
1.3 KiB
Kotlin
Vendored
|
|
// Super calls to Throwable properties are not supported
|
|
// IGNORE_BACKEND: JS_IR
|
|
// IGNORE_BACKEND: JS_IR_ES6
|
|
|
|
open class Base(message: String? = null, cause: Throwable? = null) : Throwable(message, cause)
|
|
|
|
open class Base2(message: String? = null, cause: Throwable? = null): Base(message, cause)
|
|
|
|
open class Override(message: String? = null, cause: Throwable? = null) : Base2(message, cause) {
|
|
|
|
var i = 0
|
|
|
|
override val message: String?
|
|
get() = "Override: " + super.message + "${i++}"
|
|
}
|
|
|
|
open class OverBase(message: String? = null, cause: Throwable? = null): Override(message, cause)
|
|
|
|
open class OverOverride(message: String? = null, cause: Throwable? = null) : OverBase(message, cause) {
|
|
|
|
override val message: String?
|
|
get() = "OverOver: " + super.message + "${i++}"
|
|
|
|
override val cause: Throwable?
|
|
get() = super.cause ?: this
|
|
|
|
}
|
|
|
|
|
|
fun box(): String {
|
|
check(Base("O", Base("K")), "OK")
|
|
check(Override("OK"), "Override: OK0")
|
|
check(OverOverride("OK"), "OverOver: Override: OK01OverOver: Override: OK23")
|
|
return "OK"
|
|
}
|
|
|
|
|
|
fun check(t: Throwable, msg: String) {
|
|
try {
|
|
throw t
|
|
} catch (e: Throwable) {
|
|
val c = t.cause
|
|
val m = if (c != null) t.message!! + c.message!! else t.message!!
|
|
if (m != msg) throw AssertionError(m)
|
|
}
|
|
}
|