From cb8f70189db516efdda291e88623ef1bf21c45e4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 9 Aug 2019 15:46:27 +0200 Subject: [PATCH] Minor, add debug info to assertion in AddContinuationLowering --- .../backend/jvm/lower/AddContinuationLowering.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt index 469338b7fc8..3038ba48a06 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.descriptors.WrappedFunctionDescriptorWithContainerSource import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.backend.common.descriptors.synthesizedName -import org.jetbrains.kotlin.backend.common.ir.copyTo -import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom -import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor -import org.jetbrains.kotlin.backend.common.ir.isSuspend +import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.parents import org.jetbrains.kotlin.backend.common.peek @@ -470,13 +467,13 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : return res } - private fun getContinuationFromCaller(): IrGetValue { + private fun getContinuationFromCaller(): IrGetValue? { val caller = functionStack.peek()!! val continuationParameter = if (caller.isSuspend) caller.valueParameters.last().symbol else if (caller.name.asString() == INVOKE_SUSPEND_METHOD_NAME && caller.parent in context.suspendLambdaToOriginalFunctionMap) caller.dispatchReceiverParameter!!.symbol - else error("suspend call outside suspend context") + else return null return IrGetValueImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, @@ -493,7 +490,12 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : for (i in 0 until expression.valueArgumentsCount) { putValueArgument(i, expression.getValueArgument(i)) } - putValueArgument(expression.valueArgumentsCount, getContinuationFromCaller()) + val continuation = getContinuationFromCaller() ?: error( + "Cannot get continuation from context for a suspend call.\n" + + "Caller: ${ir2string(functionStack.peek())}\n" + + "Callee: ${ir2string(expression)}" + ) + putValueArgument(expression.valueArgumentsCount, continuation) } return super.visitCall(res) }