From 74c8f54fc8cd95364c2462dd70400af3060448ce Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Tue, 12 Feb 2019 21:29:47 +0300 Subject: [PATCH] [JS IR BE] Support cast to native interface --- .../kotlin/ir/backend/js/lower/TypeOperatorLowering.kt | 8 +++++++- .../testData/box/native/castToNativeInterface.kt | 1 - .../box/native/castToTypeParamBoundedByNativeInterface.kt | 1 - 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt index 376e07d41d6..bd79131bfe9 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt @@ -218,7 +218,13 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : FileLoweringPass { toType.isArray() -> generateGenericArrayCheck(argument) toType.isPrimitiveArray() -> generatePrimitiveArrayTypeCheck(argument, toType) toType.isTypeParameter() -> generateTypeCheckWithTypeParameter(argument, toType) - toType.isInterface() -> generateInterfaceCheck(argument, toType) + toType.isInterface() -> { + if ((toType.classifierOrFail.owner as IrClass).isEffectivelyExternal()) { + generateIsObjectCheck(argument) + } else { + generateInterfaceCheck(argument, toType) + } + } else -> generateNativeInstanceOf(argument, toType) } } diff --git a/js/js.translator/testData/box/native/castToNativeInterface.kt b/js/js.translator/testData/box/native/castToNativeInterface.kt index e68070988cc..862ef4ee181 100644 --- a/js/js.translator/testData/box/native/castToNativeInterface.kt +++ b/js/js.translator/testData/box/native/castToNativeInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JS_IR // EXPECTED_REACHABLE_NODES: 1282 // FILE: castToNativeInterface.kt external interface I { diff --git a/js/js.translator/testData/box/native/castToTypeParamBoundedByNativeInterface.kt b/js/js.translator/testData/box/native/castToTypeParamBoundedByNativeInterface.kt index b28e73fad64..b01d19eee5c 100644 --- a/js/js.translator/testData/box/native/castToTypeParamBoundedByNativeInterface.kt +++ b/js/js.translator/testData/box/native/castToTypeParamBoundedByNativeInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JS_IR // EXPECTED_REACHABLE_NODES: 1284 // FILE: castToTypeParamBoundedByNativeInterface.kt external interface I {