Use explicit/allParametersCount in cases the parameters list isn't needed (#4414)
(cherry picked from commit e4f0586568383a1e4225a70d959c417873faa402)
This commit is contained in:
committed by
Vasily Levchenko
parent
db65e8d2c3
commit
fa853592e3
+5
-4
@@ -9,6 +9,7 @@ import kotlinx.cinterop.*
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
||||
import org.jetbrains.kotlin.backend.common.ir.allParametersCount
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.InlinerExpressionLocationHint
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||
@@ -2013,7 +2014,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
||||
private fun getContinuation(): LLVMValueRef {
|
||||
val caller = functionGenerationContext.irFunction!!
|
||||
return if (caller.isSuspend)
|
||||
codegen.param(caller, caller.allParameters.size) // The last argument.
|
||||
codegen.param(caller, caller.allParametersCount) // The last argument.
|
||||
else {
|
||||
// Suspend call from non-suspend function - must be [invokeSuspend].
|
||||
assert ((caller as IrSimpleFunction).overrides(context.ir.symbols.invokeSuspendFunction.owner),
|
||||
@@ -2033,10 +2034,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
||||
val result = expression.getArgumentsWithIr().map { (_, argExpr) ->
|
||||
evaluateExpression(argExpr)
|
||||
}
|
||||
val explicitParametersSize = expression.symbol.owner.explicitParameters.size
|
||||
if (result.size != explicitParametersSize) {
|
||||
val explicitParametersCount = expression.symbol.owner.explicitParametersCount
|
||||
if (result.size != explicitParametersCount) {
|
||||
error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " +
|
||||
"$explicitParametersSize in ${ir2string(expression)}")
|
||||
"$explicitParametersCount in ${ir2string(expression)}")
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm.objcexport
|
||||
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
||||
import org.jetbrains.kotlin.backend.common.ir.allParametersCount
|
||||
import org.jetbrains.kotlin.backend.common.ir.simpleFunctions
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||
@@ -982,7 +983,7 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge(
|
||||
}
|
||||
|
||||
MethodBridgeValueParameter.SuspendCompletion -> {
|
||||
val continuation = param(irFunction.allParameters.size) // The last argument.
|
||||
val continuation = param(irFunction.allParametersCount) // The last argument.
|
||||
// TODO: consider placing interception into the converter to reduce code size.
|
||||
val intercepted = callFromBridge(
|
||||
context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction,
|
||||
|
||||
+3
-3
@@ -1401,12 +1401,12 @@ internal object Devirtualization {
|
||||
callSite.origin,
|
||||
actualCallee.parentAsClass.symbol
|
||||
)
|
||||
if (actualCallee.explicitParameters.size == arguments.size) {
|
||||
if (actualCallee.explicitParametersCount == arguments.size) {
|
||||
arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) }
|
||||
return call
|
||||
}
|
||||
assert(actualCallee.isSuspend && actualCallee.explicitParameters.size == arguments.size - 1) {
|
||||
"Incorrect number of arguments: expected [${actualCallee.explicitParameters.size}] but was [${arguments.size - 1}]\n" +
|
||||
assert(actualCallee.isSuspend && actualCallee.explicitParametersCount == arguments.size - 1) {
|
||||
"Incorrect number of arguments: expected [${actualCallee.explicitParametersCount}] but was [${arguments.size - 1}]\n" +
|
||||
actualCallee.dump()
|
||||
}
|
||||
val continuation = arguments.last()
|
||||
|
||||
Reference in New Issue
Block a user