[K/JS] Remove the old interface runtime check because of bootstrapping
Merge-request: KT-MR-7457 Merged-by: Artem Kobzar <Artem.Kobzar@jetbrains.com>
This commit is contained in:
@@ -118,33 +118,13 @@ private fun searchForMetadata(obj: dynamic): Metadata? {
|
|||||||
return 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 {
|
private fun isInterfaceImpl(obj: dynamic, iface: Int): Boolean {
|
||||||
val mask: BitMask = obj.`$imask$`.unsafeCast<BitMask?>() ?: return false
|
val mask: BitMask = obj.`$imask$`.unsafeCast<BitMask?>() ?: return false
|
||||||
return mask.isBitSet(iface)
|
return mask.isBitSet(iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun isInterface(obj: dynamic, iface: dynamic): Boolean {
|
internal fun isInterface(obj: dynamic, iface: dynamic): Boolean {
|
||||||
return if (obj.`$imask$` != null) {
|
return isInterfaceImpl(obj, iface.`$metadata$`.iid)
|
||||||
isInterfaceImpl(obj, iface.`$metadata$`.iid)
|
|
||||||
} else {
|
|
||||||
verySlowIsInterfaceImpl(obj, iface)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun isSuspendFunction(obj: dynamic, arity: Int): Boolean {
|
internal fun isSuspendFunction(obj: dynamic, arity: Int): Boolean {
|
||||||
@@ -238,8 +218,8 @@ internal fun jsIsType(obj: dynamic, jsClass: dynamic): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (klassMetadata.kind === "interface") {
|
if (klassMetadata.kind === "interface") {
|
||||||
val iid = klassMetadata.iid.unsafeCast<Int?>()
|
val iid = klassMetadata.iid.unsafeCast<Int?>() ?: return false
|
||||||
return iid?.let { isInterfaceImpl(obj, it) } ?: verySlowIsInterfaceImpl(obj, constructor)
|
return isInterfaceImpl(obj, iid)
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user