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 llvm.*
|
||||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||||
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
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.common.lower.inline.InlinerExpressionLocationHint
|
||||||
import org.jetbrains.kotlin.backend.konan.*
|
import org.jetbrains.kotlin.backend.konan.*
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
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 {
|
private fun getContinuation(): LLVMValueRef {
|
||||||
val caller = functionGenerationContext.irFunction!!
|
val caller = functionGenerationContext.irFunction!!
|
||||||
return if (caller.isSuspend)
|
return if (caller.isSuspend)
|
||||||
codegen.param(caller, caller.allParameters.size) // The last argument.
|
codegen.param(caller, caller.allParametersCount) // The last argument.
|
||||||
else {
|
else {
|
||||||
// Suspend call from non-suspend function - must be [invokeSuspend].
|
// Suspend call from non-suspend function - must be [invokeSuspend].
|
||||||
assert ((caller as IrSimpleFunction).overrides(context.ir.symbols.invokeSuspendFunction.owner),
|
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) ->
|
val result = expression.getArgumentsWithIr().map { (_, argExpr) ->
|
||||||
evaluateExpression(argExpr)
|
evaluateExpression(argExpr)
|
||||||
}
|
}
|
||||||
val explicitParametersSize = expression.symbol.owner.explicitParameters.size
|
val explicitParametersCount = expression.symbol.owner.explicitParametersCount
|
||||||
if (result.size != explicitParametersSize) {
|
if (result.size != explicitParametersCount) {
|
||||||
error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " +
|
error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " +
|
||||||
"$explicitParametersSize in ${ir2string(expression)}")
|
"$explicitParametersCount in ${ir2string(expression)}")
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm.objcexport
|
|||||||
|
|
||||||
import llvm.*
|
import llvm.*
|
||||||
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
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.common.ir.simpleFunctions
|
||||||
import org.jetbrains.kotlin.backend.konan.*
|
import org.jetbrains.kotlin.backend.konan.*
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||||
@@ -982,7 +983,7 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge(
|
|||||||
}
|
}
|
||||||
|
|
||||||
MethodBridgeValueParameter.SuspendCompletion -> {
|
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.
|
// TODO: consider placing interception into the converter to reduce code size.
|
||||||
val intercepted = callFromBridge(
|
val intercepted = callFromBridge(
|
||||||
context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction,
|
context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction,
|
||||||
|
|||||||
+3
-3
@@ -1401,12 +1401,12 @@ internal object Devirtualization {
|
|||||||
callSite.origin,
|
callSite.origin,
|
||||||
actualCallee.parentAsClass.symbol
|
actualCallee.parentAsClass.symbol
|
||||||
)
|
)
|
||||||
if (actualCallee.explicitParameters.size == arguments.size) {
|
if (actualCallee.explicitParametersCount == arguments.size) {
|
||||||
arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) }
|
arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) }
|
||||||
return call
|
return call
|
||||||
}
|
}
|
||||||
assert(actualCallee.isSuspend && actualCallee.explicitParameters.size == arguments.size - 1) {
|
assert(actualCallee.isSuspend && actualCallee.explicitParametersCount == arguments.size - 1) {
|
||||||
"Incorrect number of arguments: expected [${actualCallee.explicitParameters.size}] but was [${arguments.size - 1}]\n" +
|
"Incorrect number of arguments: expected [${actualCallee.explicitParametersCount}] but was [${arguments.size - 1}]\n" +
|
||||||
actualCallee.dump()
|
actualCallee.dump()
|
||||||
}
|
}
|
||||||
val continuation = arguments.last()
|
val continuation = arguments.last()
|
||||||
|
|||||||
Reference in New Issue
Block a user