JVM: rename IrIntrinsicFunction -> IntrinsicFunction

To avoid confusion that this might be an IR tree element.
This commit is contained in:
Alexander Udalov
2023-07-19 00:05:16 +02:00
committed by Space Team
parent f8faa0fe5a
commit 56ed240774
24 changed files with 48 additions and 48 deletions
@@ -28,9 +28,9 @@ object ArrayIterator : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen,
): IrIntrinsicFunction {
): IntrinsicFunction {
val owner = classCodegen.typeMapper.mapClass(expression.symbol.owner.parentAsClass)
return IrIntrinsicFunction.create(expression, signature, classCodegen, listOf(owner)) {
return IntrinsicFunction.create(expression, signature, classCodegen, listOf(owner)) {
val methodSignature = "(${owner.descriptor})${signature.returnType.descriptor}"
val intrinsicOwner =
if (AsmUtil.isPrimitive(owner.elementType))
@@ -23,8 +23,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object ArraySize : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
it.arraylength()
}
}
@@ -35,7 +35,7 @@ class BinaryOp(private val opcode: Int) : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
): IntrinsicFunction {
val returnType = signature.returnType
val intermediateResultType = numberFunctionOperandType(returnType)
val argTypes = if (!expression.symbol.owner.parentAsClass.defaultType.isChar()) {
@@ -44,7 +44,7 @@ class BinaryOp(private val opcode: Int) : IntrinsicMethod() {
listOf(Type.CHAR_TYPE, signature.valueParameters[0].asmType)
}
return IrIntrinsicFunction.create(expression, signature, classCodegen, argTypes) {
return IntrinsicFunction.create(expression, signature, classCodegen, argTypes) {
it.visitInsn(returnType.getOpcode(opcode))
StackValue.coerce(intermediateResultType, returnType, it)
}
@@ -32,14 +32,14 @@ object Clone : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
): IntrinsicFunction {
val isSuperCall = expression is IrCall && expression.superQualifierSymbol != null
val opcode = if (isSuperCall) Opcodes.INVOKESPECIAL else Opcodes.INVOKEVIRTUAL
val newSignature = signature.newReturnType(AsmTypes.OBJECT_TYPE)
val argTypes0 = expression.argTypes(classCodegen)
// Don't upcast receiver to java.lang.Cloneable, since 'clone' is protected in java.lang.Object.
val argTypes = if (isSuperCall || argTypes0[0] == CLONEABLE_TYPE) listOf(AsmTypes.OBJECT_TYPE) else argTypes0
return IrIntrinsicFunction.create(expression, newSignature, classCodegen, argTypes) { mv ->
return IntrinsicFunction.create(expression, newSignature, classCodegen, argTypes) { mv ->
mv.visitMethodInsn(opcode, "java/lang/Object", "clone", "()Ljava/lang/Object;", false)
}
}
@@ -54,14 +54,14 @@ object CompareTo : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
): IntrinsicFunction {
val callee = expression.symbol.owner
val calleeParameter = callee.dispatchReceiverParameter ?: callee.extensionReceiverParameter!!
val parameterType = comparisonOperandType(
classCodegen.typeMapper.mapType(calleeParameter.type),
signature.valueParameters.single().asmType,
)
return IrIntrinsicFunction.create(expression, signature, classCodegen, listOf(parameterType, parameterType)) {
return IntrinsicFunction.create(expression, signature, classCodegen, listOf(parameterType, parameterType)) {
genInvoke(parameterType, it)
}
}
@@ -160,11 +160,11 @@ class Ieee754Equals(val operandType: Type) : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
): IntrinsicFunction {
class Ieee754AreEqual(
val left: Type,
val right: Type
) : IrIntrinsicFunction(expression, signature, classCodegen, listOf(left, right)) {
) : IntrinsicFunction(expression, signature, classCodegen, listOf(left, right)) {
override fun genInvokeInstruction(v: InstructionAdapter) {
v.invokestatic(
IntrinsicMethods.INTRINSICS_CLASS_NAME, "areEqual",
@@ -197,7 +197,7 @@ class Ieee754Equals(val operandType: Type) : IntrinsicMethod() {
Ieee754AreEqual(AsmTypes.OBJECT_TYPE, AsmTypes.OBJECT_TYPE)
!arg0isNullable && !arg1isNullable ->
object : IrIntrinsicFunction(expression, signature, classCodegen, listOf(operandType, operandType)) {
object : IntrinsicFunction(expression, signature, classCodegen, listOf(operandType, operandType)) {
override fun genInvokeInstruction(v: InstructionAdapter) {
StackValue.cmp(KtTokens.EQEQ, operandType, StackValue.onStack(operandType), StackValue.onStack(operandType))
.put(Type.BOOLEAN_TYPE, v)
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
class Increment(private val myDelta: Int) : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
genIncrement(signature.returnType, myDelta, it)
}
}
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
abstract class IrIntrinsicFunction(
abstract class IntrinsicFunction(
val expression: IrFunctionAccessExpression,
val signature: JvmMethodSignature,
val classCodegen: ClassCodegen,
@@ -79,9 +79,9 @@ abstract class IrIntrinsicFunction(
signature: JvmMethodSignature,
classCodegen: ClassCodegen,
argsTypes: List<Type> = expression.argTypes(classCodegen),
invokeInstruction: IrIntrinsicFunction.(InstructionAdapter) -> Unit,
): IrIntrinsicFunction =
object : IrIntrinsicFunction(expression, signature, classCodegen, argsTypes) {
invokeInstruction: IntrinsicFunction.(InstructionAdapter) -> Unit,
): IntrinsicFunction =
object : IntrinsicFunction(expression, signature, classCodegen, argsTypes) {
override fun genInvokeInstruction(v: InstructionAdapter) = invokeInstruction(v)
}
}
@@ -17,7 +17,7 @@ abstract class IntrinsicMethod : IntrinsicMarker {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction = TODO("implement toCallable() or invoke() of $this")
): IntrinsicFunction = TODO("implement toCallable() or invoke() of $this")
open fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo): PromisedValue? =
with(codegen) {
@@ -15,7 +15,7 @@ object IntrinsicShouldHaveBeenLowered : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
): IntrinsicFunction {
error("Intrinsic should have been lowered: '${expression.symbol.owner.render()}'")
}
}
@@ -25,10 +25,10 @@ import org.jetbrains.org.objectweb.asm.Type
object Inv : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
): IntrinsicFunction {
val returnType = signature.returnType
val type = numberFunctionOperandType(returnType)
return IrIntrinsicFunction.create(expression, signature, classCodegen, listOf(type)) {
return IntrinsicFunction.create(expression, signature, classCodegen, listOf(type)) {
if (returnType == Type.LONG_TYPE) {
it.lconst(-1)
} else {
@@ -33,8 +33,8 @@ object IrIllegalArgumentException : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction {
return object : IrIntrinsicFunction(expression, signature, classCodegen, listOf(JAVA_STRING_TYPE)) {
): IntrinsicFunction {
return object : IntrinsicFunction(expression, signature, classCodegen, listOf(JAVA_STRING_TYPE)) {
override fun genInvokeInstruction(v: InstructionAdapter) {
v.invokespecial(
exceptionTypeDescriptor.internalName,
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object IrNoWhenBranchMatchedException : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
genThrow(it, "kotlin/NoWhenBranchMatchedException", null)
}
}
@@ -15,7 +15,7 @@ object IsArrayOf : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction = IrIntrinsicFunction.create(expression, signature, classCodegen) { v ->
): IntrinsicFunction = IntrinsicFunction.create(expression, signature, classCodegen) { v ->
val arrayType = classCodegen.context.irBuiltIns.arrayClass.typeWith(expression.getTypeArgument(0)!!)
v.instanceOf(classCodegen.typeMapper.mapType(arrayType))
}
@@ -29,12 +29,12 @@ import org.jetbrains.org.objectweb.asm.Type
object IteratorNext : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
): IntrinsicFunction {
// If the array element type is unboxed primitive, do not unbox. Otherwise AsmUtil.unbox throws exception
val type = if (AsmUtil.isBoxedPrimitiveType(signature.returnType)) AsmUtil.unboxType(signature.returnType) else signature.returnType
val newSignature = signature.newReturnType(type)
val primitiveClassName = getKotlinPrimitiveClassName(type)
return IrIntrinsicFunction.create(expression, newSignature, classCodegen, listOf(getPrimitiveIteratorType(primitiveClassName))) {
return IntrinsicFunction.create(expression, newSignature, classCodegen, listOf(getPrimitiveIteratorType(primitiveClassName))) {
it.invokevirtual(
getPrimitiveIteratorType(primitiveClassName).internalName,
"next${primitiveClassName.asString()}",
@@ -33,8 +33,8 @@ class MonitorInstruction private constructor(private val opcode: Int) : Intrinsi
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen, listOf(OBJECT_TYPE)) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen, listOf(OBJECT_TYPE)) {
it.visitInsn(opcode)
}
}
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object NumberCast : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
StackValue.coerce(argsTypes[0], signature.returnType, it)
}
}
@@ -17,9 +17,9 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
object RangeTo : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
): IntrinsicFunction {
val argType = mapRangeTypeToPrimitiveType(signature.returnType)
return object : IrIntrinsicFunction(
return object : IntrinsicFunction(
expression, signature, classCodegen, listOf(argType) + signature.valueParameters.map { argType }
) {
override fun genInvokeInstruction(v: InstructionAdapter) {
@@ -14,8 +14,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
object RangeUntil : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen
): IrIntrinsicFunction {
return object : IrIntrinsicFunction(expression, signature, classCodegen, expression.argTypes(classCodegen)) {
): IntrinsicFunction {
return object : IntrinsicFunction(expression, signature, classCodegen, expression.argTypes(classCodegen)) {
override fun genInvokeInstruction(v: InstructionAdapter) {
v.invokestatic(
"kotlin/ranges/RangesKt", "until",
@@ -23,8 +23,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object StringGetChar : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
it.invokevirtual("java/lang/String", "charAt", "(I)C", false)
}
}
@@ -18,8 +18,8 @@ object StringPlus : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction =
IrIntrinsicFunction.create(expression, signature, classCodegen, listOf(AsmTypes.JAVA_STRING_TYPE, AsmTypes.OBJECT_TYPE)) {
): IntrinsicFunction =
IntrinsicFunction.create(expression, signature, classCodegen, listOf(AsmTypes.JAVA_STRING_TYPE, AsmTypes.OBJECT_TYPE)) {
it.invokestatic(
IntrinsicMethods.INTRINSICS_CLASS_NAME,
"stringPlus",
@@ -15,8 +15,8 @@ object ThrowKotlinNothingValueException : IntrinsicMethod() {
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
classCodegen: ClassCodegen
): IrIntrinsicFunction =
IrIntrinsicFunction.create(expression, signature, classCodegen) { mv ->
): IntrinsicFunction =
IntrinsicFunction.create(expression, signature, classCodegen) { mv ->
if (classCodegen.context.state.useKotlinNothingValueException) {
mv.anew(Type.getObjectType("kotlin/KotlinNothingValueException"))
mv.dup()
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object UnaryMinus : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
it.neg(numberFunctionOperandType(signature.returnType))
}
}
@@ -23,8 +23,8 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object UnaryPlus : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression, signature: JvmMethodSignature, classCodegen: ClassCodegen,
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, classCodegen) {
): IntrinsicFunction {
return IntrinsicFunction.create(expression, signature, classCodegen) {
// Do nothing.
}
}