Minor, add debug info to assertion in AddContinuationLowering

This commit is contained in:
Alexander Udalov
2019-08-09 15:46:27 +02:00
parent 0065236bde
commit cb8f70189d
@@ -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)
}