From 8a89b2f29feff25afd632792a77208b98e53aa77 Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Fri, 21 Oct 2022 11:34:31 +0000 Subject: [PATCH] [K/JS] Remove the old interface runtime check because of bootstrapping Merge-request: KT-MR-7457 Merged-by: Artem Kobzar --- .../stdlib/js-ir/runtime/typeCheckUtils.kt | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/libraries/stdlib/js-ir/runtime/typeCheckUtils.kt b/libraries/stdlib/js-ir/runtime/typeCheckUtils.kt index 3f79d64e1b3..23dac3e982e 100644 --- a/libraries/stdlib/js-ir/runtime/typeCheckUtils.kt +++ b/libraries/stdlib/js-ir/runtime/typeCheckUtils.kt @@ -118,33 +118,13 @@ private fun searchForMetadata(obj: dynamic): Metadata? { return metadata } -// TODO: Remove after 1.8 bootstrapping -// Needed to pass all nodejs tests, because of stdlib compilation via bootstrapped compiler with old metadata format -private fun verySlowIsInterfaceImpl(obj: dynamic, iface: dynamic): Boolean { - val metadata = searchForMetadata(obj) ?: return false - val interfaces = metadata.asDynamic().associatedObjectKey - - if ( - interfaces != null && - (interfaces.indexOf(iface) != -1 || interfaces.some { x -> verySlowIsInterfaceImpl(x, iface) }) - ) { - return true - } - - return verySlowIsInterfaceImpl(getPrototypeOf(obj), iface) -} - private fun isInterfaceImpl(obj: dynamic, iface: Int): Boolean { val mask: BitMask = obj.`$imask$`.unsafeCast() ?: return false return mask.isBitSet(iface) } internal fun isInterface(obj: dynamic, iface: dynamic): Boolean { - return if (obj.`$imask$` != null) { - isInterfaceImpl(obj, iface.`$metadata$`.iid) - } else { - verySlowIsInterfaceImpl(obj, iface) - } + return isInterfaceImpl(obj, iface.`$metadata$`.iid) } internal fun isSuspendFunction(obj: dynamic, arity: Int): Boolean { @@ -238,8 +218,8 @@ internal fun jsIsType(obj: dynamic, jsClass: dynamic): Boolean { } if (klassMetadata.kind === "interface") { - val iid = klassMetadata.iid.unsafeCast() - return iid?.let { isInterfaceImpl(obj, it) } ?: verySlowIsInterfaceImpl(obj, constructor) + val iid = klassMetadata.iid.unsafeCast() ?: return false + return isInterfaceImpl(obj, iid) } return false