[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.INT to getInternalFunction("isIntArray"),
|
||||||
PrimitiveType.FLOAT to getInternalFunction("isFloatArray"),
|
PrimitiveType.FLOAT to getInternalFunction("isFloatArray"),
|
||||||
PrimitiveType.LONG to getInternalFunction("isLongArray"),
|
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>()
|
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) =
|
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 {
|
public fun isChar(c: Any): Boolean {
|
||||||
@@ -103,14 +107,14 @@ public fun isChar(c: Any): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Distinguish Boolean/Byte and Short/Char
|
// 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 isByteArray(a: dynamic): Boolean = js("a instanceof Int8Array").unsafeCast<Boolean>()
|
||||||
public fun isShortArray(a: dynamic): Boolean = js("a instanceof Int16Array").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 isIntArray(a: dynamic): Boolean = js("a instanceof Int32Array").unsafeCast<Boolean>()
|
||||||
public fun isFloatArray(a: dynamic): Boolean = js("a instanceof Float32Array").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 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")
|
internal fun jsIn(x: String, y: dynamic): Boolean = js("x in y")
|
||||||
|
|||||||
Reference in New Issue
Block a user