[JS IR BE] Fix throwable stuff to make exceptions similar to JVM

This commit is contained in:
Roman Artemev
2020-10-08 22:31:45 +03:00
parent ff093d363a
commit c16b11a124
2 changed files with 5 additions and 3 deletions
@@ -46,7 +46,7 @@ class ThrowableLowering(
private fun IrFunctionAccessExpression.extractThrowableArguments(): ThrowableArguments =
when (valueArgumentsCount) {
0 -> ThrowableArguments(nullValue(), undefinedValue())
0 -> ThrowableArguments(undefinedValue(), undefinedValue())
2 -> ThrowableArguments(
message = getValueArgument(0)!!,
cause = getValueArgument(1)!!
@@ -89,7 +89,9 @@ internal fun captureStack(instance: Throwable, constructorFunction: Any) {
internal fun newThrowable(message: String?, cause: Throwable?): Throwable {
val throwable = js("new Error()")
throwable.message = if (isUndefined(message)) cause?.toString() else message
throwable.message = if (isUndefined(message)) {
if (isUndefined(cause)) message else cause?.toString() ?: undefined
} else message ?: undefined
throwable.cause = cause
throwable.name = "Throwable"
return throwable.unsafeCast<Throwable>()
@@ -110,7 +112,7 @@ internal fun setPropertiesToThrowableInstance(this_: dynamic, message: String?,
cause?.toString() ?: undefined
} else {
// real null
message
undefined
}
} else message
}