[JS IR BE] Support 'is Number' and 'is Comparable<>'
This commit is contained in:
@@ -115,6 +115,9 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
|
||||
// val isCharSymbol = getInternalFunction("isChar")
|
||||
val isObjectSymbol = getInternalFunction("isObject")
|
||||
|
||||
val isNumberSymbol = getInternalFunction("isNumber")
|
||||
val isComparableSymbol = getInternalFunction("isComparable")
|
||||
|
||||
val isPrimitiveArray = mapOf(
|
||||
PrimitiveType.BOOLEAN to getInternalFunction("isBooleanArray"),
|
||||
PrimitiveType.BYTE to getInternalFunction("isByteArray"),
|
||||
|
||||
+8
-1
@@ -141,7 +141,6 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
||||
type.isInt() ||
|
||||
type.isFloat() ||
|
||||
type.isDouble() ||
|
||||
type.isNumber() ||
|
||||
type.isBoolean() ||
|
||||
type.isFunctionOrKFunction() ||
|
||||
type.isString()
|
||||
@@ -217,6 +216,8 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
||||
toType.isAny() -> generateIsObjectCheck(argument)
|
||||
isTypeOfCheckingType(toType) -> generateTypeOfCheck(argument, toType)
|
||||
// toType.isChar() -> generateCheckForChar(argument)
|
||||
toType.isNumber() -> generateNumberCheck(argument)
|
||||
toType.isComparable() -> generateComparableCheck(argument)
|
||||
toType.isArray() -> generateGenericArrayCheck(argument)
|
||||
toType.isPrimitiveArray() -> generatePrimitiveArrayTypeCheck(argument, toType)
|
||||
toType.isTypeParameter() -> generateTypeCheckWithTypeParameter(argument, toType)
|
||||
@@ -272,6 +273,12 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
||||
private fun generateGenericArrayCheck(argument: IrExpression) =
|
||||
JsIrBuilder.buildCall(isArraySymbol).apply { putValueArgument(0, argument) }
|
||||
|
||||
private fun generateNumberCheck(argument: IrExpression) =
|
||||
JsIrBuilder.buildCall(context.intrinsics.isNumberSymbol).apply { putValueArgument(0, argument) }
|
||||
|
||||
private fun generateComparableCheck(argument: IrExpression) =
|
||||
JsIrBuilder.buildCall(context.intrinsics.isComparableSymbol).apply { putValueArgument(0, argument) }
|
||||
|
||||
private fun generatePrimitiveArrayTypeCheck(argument: IrExpression, toType: IrType): IrExpression {
|
||||
val f = context.intrinsics.isPrimitiveArray[toType.getPrimitiveArrayElementType()]!!
|
||||
return JsIrBuilder.buildCall(f).apply { putValueArgument(0, argument) }
|
||||
|
||||
Reference in New Issue
Block a user