[JS IR BE] Fix arrays type checks
This commit is contained in:
@@ -126,7 +126,7 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
|
||||
PrimitiveType.INT to getInternalFunction("isIntArray"),
|
||||
PrimitiveType.FLOAT to getInternalFunction("isFloatArray"),
|
||||
PrimitiveType.LONG to getInternalFunction("isLongArray"),
|
||||
PrimitiveType.DOUBLE to getInternalFunction("isLongArray")
|
||||
PrimitiveType.DOUBLE to getInternalFunction("isDoubleArray")
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -90,12 +90,16 @@ fun isObject(obj: dynamic): Boolean {
|
||||
}
|
||||
}
|
||||
|
||||
public fun isArray(obj: Any): Boolean {
|
||||
private fun isJsArray(obj: Any): Boolean {
|
||||
return js("Array.isArray(obj)").unsafeCast<Boolean>()
|
||||
}
|
||||
|
||||
public fun isArray(obj: Any): Boolean {
|
||||
return isJsArray(obj) && js("!obj.\$type\$").unsafeCast<Boolean>()
|
||||
}
|
||||
|
||||
public fun isArrayish(o: dynamic) =
|
||||
isArray(o) || js("ArrayBuffer.isView(o)").unsafeCast<Boolean>()
|
||||
isJsArray(o) || js("ArrayBuffer.isView(o)").unsafeCast<Boolean>()
|
||||
|
||||
|
||||
public fun isChar(c: Any): Boolean {
|
||||
@@ -103,14 +107,14 @@ public fun isChar(c: Any): Boolean {
|
||||
}
|
||||
|
||||
// TODO: Distinguish Boolean/Byte and Short/Char
|
||||
public fun isBooleanArray(a: dynamic): Boolean = isArray(a) && a.`$type$` == "BooleanArray"
|
||||
public fun isBooleanArray(a: dynamic): Boolean = isJsArray(a) && a.`$type$` == "BooleanArray"
|
||||
public fun isByteArray(a: dynamic): Boolean = js("a instanceof Int8Array").unsafeCast<Boolean>()
|
||||
public fun isShortArray(a: dynamic): Boolean = js("a instanceof Int16Array").unsafeCast<Boolean>()
|
||||
public fun isCharArray(a: dynamic): Boolean = isArray(a) && a.`$type$` == "CharArray"
|
||||
public fun isCharArray(a: dynamic): Boolean = isJsArray(a) && a.`$type$` == "CharArray"
|
||||
public fun isIntArray(a: dynamic): Boolean = js("a instanceof Int32Array").unsafeCast<Boolean>()
|
||||
public fun isFloatArray(a: dynamic): Boolean = js("a instanceof Float32Array").unsafeCast<Boolean>()
|
||||
public fun isDoubleArray(a: dynamic): Boolean = js("a instanceof Float64Array").unsafeCast<Boolean>()
|
||||
public fun isLongArray(a: dynamic): Boolean = isArray(a) && a.`$type$` == "LongArray"
|
||||
public fun isLongArray(a: dynamic): Boolean = isJsArray(a) && a.`$type$` == "LongArray"
|
||||
|
||||
|
||||
internal fun jsIn(x: String, y: dynamic): Boolean = js("x in y")
|
||||
|
||||
Reference in New Issue
Block a user