diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrCallGenerator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrCallGenerator.kt index aab3305726a..39657003d3d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrCallGenerator.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrCallGenerator.kt @@ -40,12 +40,13 @@ interface IrCallGenerator { } fun genValueAndPut( - valueParameterDescriptor: ValueParameterDescriptor?, - argumentExpression: IrExpression, - parameterType: Type, - parameterIndex: Int, - codegen: ExpressionCodegen, - blockInfo: BlockInfo) { + valueParameterDescriptor: ValueParameterDescriptor?, + argumentExpression: IrExpression, + parameterType: Type, + parameterIndex: Int, + codegen: ExpressionCodegen, + blockInfo: BlockInfo + ) { codegen.gen(argumentExpression, parameterType, blockInfo) } @@ -53,7 +54,5 @@ interface IrCallGenerator { value.put(parameterType, codegen.visitor) } - object DefaultCallGenerator: IrCallGenerator { - - } + object DefaultCallGenerator : IrCallGenerator } \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt index c2ceec0f729..36b9b779349 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt @@ -23,11 +23,11 @@ import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.commons.Method class IrInlineCodegen( - codegen: ExpressionCodegen, - state: GenerationState, - function: FunctionDescriptor, - typeParameterMappings: TypeParameterMappings, - sourceCompiler: SourceCompilerForInline + codegen: ExpressionCodegen, + state: GenerationState, + function: FunctionDescriptor, + typeParameterMappings: TypeParameterMappings, + sourceCompiler: SourceCompilerForInline ) : InlineCodegen(codegen, state, function, typeParameterMappings, sourceCompiler), IrCallGenerator { override fun putClosureParametersOnStack(next: LambdaInfo, functionReferenceReceiver: StackValue?) { @@ -41,17 +41,30 @@ class IrInlineCodegen( activeLambda = null } - override fun genValueAndPut(valueParameterDescriptor: ValueParameterDescriptor?, argumentExpression: IrExpression, parameterType: Type, parameterIndex: Int, codegen: ExpressionCodegen, blockInfo: BlockInfo) { + override fun genValueAndPut( + valueParameterDescriptor: ValueParameterDescriptor?, + argumentExpression: IrExpression, + parameterType: Type, + parameterIndex: Int, + codegen: ExpressionCodegen, + blockInfo: BlockInfo + ) { if (valueParameterDescriptor?.let { isInlineParameter(it) } == true && isInlineIrExpression(argumentExpression)) { - val irReference: IrFunctionReference = (argumentExpression as IrBlock).statements.filterIsInstance().single() + val irReference: IrFunctionReference = + (argumentExpression as IrBlock).statements.filterIsInstance().single() rememberClosure(irReference, parameterType, valueParameterDescriptor!!) as IrExpressionLambda - } - else { + } else { putValueOnStack(argumentExpression, parameterType, valueParameterDescriptor?.index ?: -1) } } - override fun putValueIfNeeded(parameterType: Type, value: StackValue, kind: ValueKind, parameterIndex: Int, codegen: ExpressionCodegen) { + override fun putValueIfNeeded( + parameterType: Type, + value: StackValue, + kind: ValueKind, + parameterIndex: Int, + codegen: ExpressionCodegen + ) { putArgumentOrCapturedToLocalVal(JvmKotlinType(value.type, value.kotlinType), value, -1, parameterIndex, ValueKind.CAPTURED) } @@ -81,7 +94,7 @@ class IrInlineCodegen( val expression = irReference.symbol.owner as IrFunction return IrExpressionLambda( - irReference, expression, typeMapper, parameter.isCrossinline, false/*TODO*/ + irReference, expression, typeMapper, parameter.isCrossinline, false/*TODO*/ ).also { lambda -> val closureInfo = invocationParamBuilder.addNextValueParameter(type, true, null, parameter.index) closureInfo.lambda = lambda @@ -91,11 +104,11 @@ class IrInlineCodegen( } class IrExpressionLambda( - val reference: IrFunctionReference, - val function: IrFunction, - typeMapper: KotlinTypeMapper, - isCrossInline: Boolean, - override val isBoundCallableReference: Boolean + val reference: IrFunctionReference, + val function: IrFunction, + typeMapper: KotlinTypeMapper, + isCrossInline: Boolean, + override val isBoundCallableReference: Boolean ) : ExpressionLambda(typeMapper, isCrossInline) { override fun isMyLabel(name: String): Boolean { @@ -109,9 +122,9 @@ class IrExpressionLambda( override val capturedVars: List by lazy { arrayListOf().apply { reference.getArguments().forEachIndexed { _, (_, ir) -> - val getValue = ir as? IrGetValue ?: error("Unrecognized expression: $ir") - add(capturedParamDesc(getValue.descriptor.name.asString(), typeMapper.mapType(getValue.descriptor.type))) - } + val getValue = ir as? IrGetValue ?: error("Unrecognized expression: $ir") + add(capturedParamDesc(getValue.descriptor.name.asString(), typeMapper.mapType(getValue.descriptor.type))) + } } } @@ -130,4 +143,4 @@ class IrExpressionLambda( } fun isInlineIrExpression(argumentExpression: IrExpression) = - argumentExpression is IrBlock && argumentExpression.origin == IrStatementOrigin.LAMBDA \ No newline at end of file + argumentExpression is IrBlock && argumentExpression.origin == IrStatementOrigin.LAMBDA \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt index 2a8f9acf08f..b8cb83d7200 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt @@ -37,10 +37,10 @@ import org.jetbrains.org.objectweb.asm.commons.Method import org.jetbrains.org.objectweb.asm.tree.MethodNode class IrSourceCompilerForInline( - override val state: GenerationState, - override val callElement: IrMemberAccessExpression, - private val codegen: ExpressionCodegen - ): SourceCompilerForInline { + override val state: GenerationState, + override val callElement: IrMemberAccessExpression, + private val codegen: ExpressionCodegen +) : SourceCompilerForInline { //TODO @@ -81,7 +81,12 @@ class IrSourceCompilerForInline( return SMAP(/*TODO*/listOf(FileMapping("TODO", "TODO").also { it.id = 1; it.addRangeMapping(RangeMapping(1, 1, 1)) })) } - override fun doCreateMethodNodeFromSource(callableDescriptor: FunctionDescriptor, jvmSignature: JvmMethodSignature, callDefault: Boolean, asmMethod: Method): SMAPAndMethodNode { + override fun doCreateMethodNodeFromSource( + callableDescriptor: FunctionDescriptor, + jvmSignature: JvmMethodSignature, + callDefault: Boolean, + asmMethod: Method + ): SMAPAndMethodNode { assert(callableDescriptor == callElement.descriptor.original) val owner = (callElement as IrCall).symbol.owner as IrFunction //ExpressionCodegen() @@ -89,10 +94,12 @@ class IrSourceCompilerForInline( var maxCalcAdapter: MethodVisitor? = null val functionCodegen = object : FunctionCodegen(owner, codegen.classCodegen) { override fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor { - node = MethodNode(API, - flags, - signature.asmMethod.name, signature.asmMethod.descriptor, - signature.genericsSignature, null) + node = MethodNode( + API, + flags, + signature.asmMethod.name, signature.asmMethod.descriptor, + signature.genericsSignature, null + ) maxCalcAdapter = wrapWithMaxLocalCalc(node!!) return maxCalcAdapter!! } @@ -104,7 +111,11 @@ class IrSourceCompilerForInline( return SMAPAndMethodNode(node!!, SMAP(/*TODO*/listOf(FileMapping.SKIP))) } - override fun generateAndInsertFinallyBlocks(intoNode: MethodNode, insertPoints: List, offsetForFinallyLocalVar: Int) { + override fun generateAndInsertFinallyBlocks( + intoNode: MethodNode, + insertPoints: List, + offsetForFinallyLocalVar: Int + ) { //TODO("not implemented") }