diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt index 60671a76ec4..cf0a9a73618 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt @@ -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)!! diff --git a/libraries/stdlib/js-ir/runtime/coreRuntime.kt b/libraries/stdlib/js-ir/runtime/coreRuntime.kt index 1e517e81e78..d64a8cc7e5a 100644 --- a/libraries/stdlib/js-ir/runtime/coreRuntime.kt +++ b/libraries/stdlib/js-ir/runtime/coreRuntime.kt @@ -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() @@ -110,7 +112,7 @@ internal fun setPropertiesToThrowableInstance(this_: dynamic, message: String?, cause?.toString() ?: undefined } else { // real null - message + undefined } } else message }