JVM_IR: remove descriptor usage in CompareTo intrinsic
This commit is contained in:
+3
-4
@@ -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)
|
||||
|
||||
+12
-8
@@ -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<IrClassifierSymbol, IrSimpleFunctionSymbol>,
|
||||
operator: KtSingleValueToken
|
||||
): List<Pair<Key, PrimitiveComparison>> =
|
||||
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<FqName?>)
|
||||
|
||||
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<IrClassifierSymbol, IrSimpleFunctionSymbol>,
|
||||
operator: KtSingleValueToken
|
||||
): List<Pair<Key, PrimitiveComparison>> =
|
||||
typeToIrFun.map { (type, irFunSymbol) ->
|
||||
irFunSymbol.toKey()!! to PrimitiveComparison(type.descriptor.defaultType, operator)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user