JVM_IR: basic suspend conversion on argument test passed
This commit is contained in:
+5
-3
@@ -95,13 +95,15 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
|
||||
|
||||
override fun visitFunctionReference(expression: IrFunctionReference) {
|
||||
expression.acceptChildrenVoid(this)
|
||||
if (expression.isSuspend && expression.isLambdaOrAdaptedCallableReference() && expression !in inlineReferences) {
|
||||
if (expression.isSuspend && expression.shouldBeTreatedAsSuspendLambda() && expression !in inlineReferences) {
|
||||
suspendLambdas[expression] = SuspendLambdaInfo(expression)
|
||||
}
|
||||
}
|
||||
|
||||
private fun IrFunctionReference.isLambdaOrAdaptedCallableReference() =
|
||||
origin == IrStatementOrigin.LAMBDA || origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE
|
||||
private fun IrFunctionReference.shouldBeTreatedAsSuspendLambda() =
|
||||
origin == IrStatementOrigin.LAMBDA ||
|
||||
origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE ||
|
||||
origin == IrStatementOrigin.SUSPEND_CONVERSION
|
||||
})
|
||||
|
||||
for (lambda in suspendLambdas.values) {
|
||||
|
||||
+6
-1
@@ -456,7 +456,12 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
|
||||
if (suspendFunReturnType.isUnit()) {
|
||||
+irAdapteeCall
|
||||
} else {
|
||||
+irReturn(irAdapteeCall)
|
||||
+IrReturnImpl(
|
||||
startOffset, endOffset,
|
||||
context.irBuiltIns.nothingType,
|
||||
irAdapterFun.symbol,
|
||||
irAdapteeCall
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user