diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/CompareTo.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/CompareTo.kt index b7100d17dce..c2bb1d8b341 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/CompareTo.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/CompareTo.kt @@ -20,7 +20,7 @@ import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.codegen.* import org.jetbrains.kotlin.backend.jvm.ir.isSmartcastFromHigherThanNullable -import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.PrimitiveType import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.AsmUtil.comparisonOperandType import org.jetbrains.kotlin.codegen.BranchedValue @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.Type @@ -183,11 +182,11 @@ class PrimitiveToObjectComparison( } class PrimitiveComparison( - private val primitiveNumberType: KotlinType, + private val primitiveNumberType: PrimitiveType, private val operatorToken: KtSingleValueToken ) : IntrinsicMethod() { override fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo): PromisedValue? { - val parameterType = Type.getType(JvmPrimitiveType.get(KotlinBuiltIns.getPrimitiveType(primitiveNumberType)!!).desc) + val parameterType = Type.getType(JvmPrimitiveType.get(primitiveNumberType).desc) val (left, right) = expression.receiverAndArgs() val a = left.accept(codegen, data).materializedAt(parameterType, left.type) val b = right.accept(codegen, data).materializedAt(parameterType, right.type) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt index 0ee1925879b..084eead64be 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.classOrNull +import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.classifierOrNull import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.isFileClass @@ -212,11 +213,21 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) { createKeyMapping(ArrayIterator, arrayClass, "iterator") ) + private fun primitiveComparisonIntrinsics( + typeToIrFun: Map, + operator: KtSingleValueToken + ): List> = + PrimitiveType.values().mapNotNull { primitiveType -> + val irPrimitiveClassifier = irBuiltIns.primitiveTypeToIrType[primitiveType]!!.classifierOrFail + val irFunSymbol = typeToIrFun[irPrimitiveClassifier] ?: return@mapNotNull null + irFunSymbol.toKey()!! to PrimitiveComparison(primitiveType, operator) + } + data class Key(val owner: FqName, val receiverParameterTypeName: FqName?, val name: String, val valueParameterTypeNames: List) companion object { - internal val INTRINSICS_CLASS_NAME = "kotlin/jvm/internal/Intrinsics" + internal const val INTRINSICS_CLASS_NAME = "kotlin/jvm/internal/Intrinsics" private val INC = Increment(1) private val DEC = Increment(-1) @@ -267,12 +278,5 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) { } - private fun primitiveComparisonIntrinsics( - typeToIrFun: Map, - operator: KtSingleValueToken - ): List> = - typeToIrFun.map { (type, irFunSymbol) -> - irFunSymbol.toKey()!! to PrimitiveComparison(type.descriptor.defaultType, operator) - } } }