Fix coercion for stack value property in case of inline classes
#KT-25771 Fixed
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR
|
||||
|
||||
inline class SuccessOrFailure<out T>(val value: Any?) {
|
||||
val isFailure: Boolean get() = value is Failure
|
||||
|
||||
public companion object {
|
||||
public inline fun <T> success(value: T): SuccessOrFailure<T> =
|
||||
SuccessOrFailure(value)
|
||||
|
||||
public inline fun <T> failure(exception: Throwable): SuccessOrFailure<T> =
|
||||
SuccessOrFailure(Failure(exception))
|
||||
}
|
||||
|
||||
class Failure (
|
||||
val exception: Throwable
|
||||
)
|
||||
}
|
||||
|
||||
inline fun <R> runCatching(block: () -> R): SuccessOrFailure<R> {
|
||||
return try {
|
||||
SuccessOrFailure.success(block())
|
||||
} catch (e: Throwable) {
|
||||
SuccessOrFailure.failure(e)
|
||||
}
|
||||
}
|
||||
|
||||
class Box<T>(val x: T)
|
||||
|
||||
fun box(): String {
|
||||
val r = runCatching { TODO() }
|
||||
val b = Box(r)
|
||||
if (r.isFailure != b.x.isFailure || !r.isFailure) return "Fail: r=${r.isFailure}; b.x=${b.x.isFailure}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline class Foo(val s: Any) {
|
||||
fun isString(): Boolean = s is String
|
||||
}
|
||||
|
||||
class Box<T>(val x: T)
|
||||
|
||||
fun box(): String {
|
||||
val f = Foo("string")
|
||||
val g = Box(f)
|
||||
val r = g.x.isString()
|
||||
|
||||
if (!r) return "Fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user