[IR] Refactor ir infrastructure
- Remove range-based uniq id indexes using to link built ins - Limit KotlinType usages, replace them with corresponding IrType
This commit is contained in:
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.defaultType
|
||||
import org.jetbrains.kotlin.ir.types.isLong
|
||||
import org.jetbrains.kotlin.ir.util.constructors
|
||||
@@ -92,7 +93,7 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
|
||||
// Type checks:
|
||||
|
||||
val jsInstanceOf = binOpBool("jsInstanceOf")
|
||||
val jsTypeOf = unOp("jsTypeOf", irBuiltIns.string)
|
||||
val jsTypeOf = unOp("jsTypeOf", irBuiltIns.stringType)
|
||||
|
||||
// Number conversions:
|
||||
|
||||
@@ -336,18 +337,18 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
|
||||
}
|
||||
}
|
||||
|
||||
private fun unOp(name: String, returnType: KotlinType = irBuiltIns.anyN) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyN)) }
|
||||
private fun unOp(name: String, returnType: IrType = irBuiltIns.anyNType) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyNType)) }
|
||||
|
||||
private fun unOpBool(name: String) = unOp(name, irBuiltIns.bool)
|
||||
private fun unOpInt(name: String) = unOp(name, irBuiltIns.int)
|
||||
private fun unOpBool(name: String) = unOp(name, irBuiltIns.booleanType)
|
||||
private fun unOpInt(name: String) = unOp(name, irBuiltIns.intType)
|
||||
|
||||
private fun binOp(name: String, returnType: KotlinType = irBuiltIns.anyN) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyN, anyN)) }
|
||||
private fun binOp(name: String, returnType: IrType = irBuiltIns.anyNType) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyNType, anyNType)) }
|
||||
|
||||
private fun tripleOp(name: String, returnType: KotlinType = irBuiltIns.anyN) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyN, anyN, anyN)) }
|
||||
private fun tripleOp(name: String, returnType: IrType = irBuiltIns.anyNType) =
|
||||
irBuiltIns.run { defineOperator(name, returnType, listOf(anyNType, anyNType, anyNType)) }
|
||||
|
||||
private fun binOpBool(name: String) = binOp(name, irBuiltIns.bool)
|
||||
private fun binOpInt(name: String) = binOp(name, irBuiltIns.int)
|
||||
private fun binOpBool(name: String) = binOp(name, irBuiltIns.booleanType)
|
||||
private fun binOpInt(name: String) = binOp(name, irBuiltIns.intType)
|
||||
}
|
||||
|
||||
+3
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.calls
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.irCall
|
||||
@@ -16,13 +17,13 @@ import org.jetbrains.kotlin.types.SimpleType
|
||||
|
||||
typealias SymbolToTransformer = MutableMap<IrFunctionSymbol, (IrFunctionAccessExpression) -> IrExpression>
|
||||
|
||||
internal fun SymbolToTransformer.add(from: Map<SimpleType, IrFunctionSymbol>, to: IrFunctionSymbol) {
|
||||
internal fun SymbolToTransformer.add(from: Map<IrClassifierSymbol, IrFunctionSymbol>, to: IrFunctionSymbol) {
|
||||
from.forEach { _, func ->
|
||||
add(func, to)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun SymbolToTransformer.add(from: Map<SimpleType, IrFunctionSymbol>, to: (IrFunctionAccessExpression) -> IrExpression) {
|
||||
internal fun SymbolToTransformer.add(from: Map<IrClassifierSymbol, IrFunctionSymbol>, to: (IrFunctionAccessExpression) -> IrExpression) {
|
||||
from.forEach { _, func ->
|
||||
add(func, to)
|
||||
}
|
||||
|
||||
+8
-8
@@ -34,15 +34,15 @@ class EqualityAndComparisonCallsTransformer(context: JsIrBackendContext) : Calls
|
||||
|
||||
add(irBuiltIns.booleanNotSymbol, intrinsics.jsNot)
|
||||
|
||||
add(irBuiltIns.lessFunByOperandType.filterKeys { it != irBuiltIns.long }, intrinsics.jsLt)
|
||||
add(irBuiltIns.lessOrEqualFunByOperandType.filterKeys { it != irBuiltIns.long }, intrinsics.jsLtEq)
|
||||
add(irBuiltIns.greaterFunByOperandType.filterKeys { it != irBuiltIns.long }, intrinsics.jsGt)
|
||||
add(irBuiltIns.greaterOrEqualFunByOperandType.filterKeys { it != irBuiltIns.long }, intrinsics.jsGtEq)
|
||||
add(irBuiltIns.lessFunByOperandType.filterKeys { it != irBuiltIns.longClass }, intrinsics.jsLt)
|
||||
add(irBuiltIns.lessOrEqualFunByOperandType.filterKeys { it != irBuiltIns.longClass }, intrinsics.jsLtEq)
|
||||
add(irBuiltIns.greaterFunByOperandType.filterKeys { it != irBuiltIns.longClass }, intrinsics.jsGt)
|
||||
add(irBuiltIns.greaterOrEqualFunByOperandType.filterKeys { it != irBuiltIns.longClass }, intrinsics.jsGtEq)
|
||||
|
||||
add(irBuiltIns.lessFunByOperandType[irBuiltIns.long]!!, transformLongComparison(intrinsics.jsLt))
|
||||
add(irBuiltIns.lessOrEqualFunByOperandType[irBuiltIns.long]!!, transformLongComparison(intrinsics.jsLtEq))
|
||||
add(irBuiltIns.greaterFunByOperandType[irBuiltIns.long]!!, transformLongComparison(intrinsics.jsGt))
|
||||
add(irBuiltIns.greaterOrEqualFunByOperandType[irBuiltIns.long]!!, transformLongComparison(intrinsics.jsGtEq))
|
||||
add(irBuiltIns.lessFunByOperandType[irBuiltIns.longClass]!!, transformLongComparison(intrinsics.jsLt))
|
||||
add(irBuiltIns.lessOrEqualFunByOperandType[irBuiltIns.longClass]!!, transformLongComparison(intrinsics.jsLtEq))
|
||||
add(irBuiltIns.greaterFunByOperandType[irBuiltIns.longClass]!!, transformLongComparison(intrinsics.jsGt))
|
||||
add(irBuiltIns.greaterOrEqualFunByOperandType[irBuiltIns.longClass]!!, transformLongComparison(intrinsics.jsGtEq))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user