Do not generate empty bodies for suspend functions
This commit is contained in:
+11
-28
@@ -48,7 +48,7 @@ open class FunctionCodegen(
|
|||||||
val signature = classCodegen.typeMapper.mapSignatureWithGeneric(irFunction, OwnerKind.IMPLEMENTATION)
|
val signature = classCodegen.typeMapper.mapSignatureWithGeneric(irFunction, OwnerKind.IMPLEMENTATION)
|
||||||
|
|
||||||
val flags = calculateMethodFlags(irFunction.isStatic)
|
val flags = calculateMethodFlags(irFunction.isStatic)
|
||||||
val methodVisitor = createMethod(flags, signature)
|
var methodVisitor = createMethod(flags, signature)
|
||||||
|
|
||||||
generateParameterNames(irFunction, methodVisitor, signature, state, flags.and(Opcodes.ACC_SYNTHETIC) != 0)
|
generateParameterNames(irFunction, methodVisitor, signature, state, flags.and(Opcodes.ACC_SYNTHETIC) != 0)
|
||||||
|
|
||||||
@@ -68,33 +68,16 @@ open class FunctionCodegen(
|
|||||||
val element = irFunction.symbol.descriptor.psiElement as? KtElement
|
val element = irFunction.symbol.descriptor.psiElement as? KtElement
|
||||||
?: classCodegen.context.suspendLambdaClasses[classCodegen.context.suspendLambdaClasses.keys.find { it == irFunction.parent }]
|
?: classCodegen.context.suspendLambdaClasses[classCodegen.context.suspendLambdaClasses.keys.find { it == irFunction.parent }]
|
||||||
val continuationClassBuilder = classCodegen.context.continuationClassBuilders[irClass]
|
val continuationClassBuilder = classCodegen.context.continuationClassBuilders[irClass]
|
||||||
ExpressionCodegen(
|
methodVisitor = when {
|
||||||
irFunction,
|
irFunction.isSuspend -> generateStateMachineForNamedFunction(
|
||||||
frameMap,
|
irFunction, classCodegen, methodVisitor, flags, signature, continuationClassBuilder, element!!
|
||||||
InstructionAdapter(
|
)
|
||||||
when {
|
irFunction.isInvokeSuspendOfLambda(classCodegen.context) -> generateStateMachineForLambda(
|
||||||
irFunction.isSuspend -> generateStateMachineForNamedFunction(
|
classCodegen, methodVisitor, flags, signature, element!!
|
||||||
irFunction,
|
)
|
||||||
classCodegen,
|
else -> methodVisitor
|
||||||
methodVisitor,
|
}
|
||||||
flags,
|
ExpressionCodegen(irFunction, frameMap, InstructionAdapter(methodVisitor), classCodegen, isInlineLambda).generate()
|
||||||
signature,
|
|
||||||
continuationClassBuilder,
|
|
||||||
element!!
|
|
||||||
)
|
|
||||||
irFunction.isInvokeSuspendOfLambda(classCodegen.context) -> generateStateMachineForLambda(
|
|
||||||
classCodegen,
|
|
||||||
methodVisitor,
|
|
||||||
flags,
|
|
||||||
signature,
|
|
||||||
element!!
|
|
||||||
)
|
|
||||||
else -> methodVisitor
|
|
||||||
}
|
|
||||||
),
|
|
||||||
classCodegen,
|
|
||||||
isInlineLambda
|
|
||||||
).generate()
|
|
||||||
methodVisitor.visitMaxs(-1, -1)
|
methodVisitor.visitMaxs(-1, -1)
|
||||||
continuationClassBuilder?.done()
|
continuationClassBuilder?.done()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user