Simplify evaluation of explicit arguments (#4410)
This commit is contained in:
+8
-8
@@ -2022,15 +2022,15 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
* exactly correspond to a tail of LLVM parameters.
|
* exactly correspond to a tail of LLVM parameters.
|
||||||
*/
|
*/
|
||||||
private fun evaluateExplicitArgs(expression: IrFunctionAccessExpression): List<LLVMValueRef> {
|
private fun evaluateExplicitArgs(expression: IrFunctionAccessExpression): List<LLVMValueRef> {
|
||||||
val evaluatedArgs = expression.getArgumentsWithIr().map { (param, argExpr) ->
|
val result = expression.getArgumentsWithIr().map { (_, argExpr) ->
|
||||||
param to evaluateExpression(argExpr)
|
evaluateExpression(argExpr)
|
||||||
}.toMap()
|
|
||||||
|
|
||||||
val allValueParameters = expression.symbol.owner.allParameters
|
|
||||||
|
|
||||||
return allValueParameters.dropWhile { it !in evaluatedArgs }.map {
|
|
||||||
evaluatedArgs[it]!!
|
|
||||||
}
|
}
|
||||||
|
val explicitParametersSize = expression.symbol.owner.explicitParameters.size
|
||||||
|
if (result.size != explicitParametersSize) {
|
||||||
|
error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " +
|
||||||
|
"$explicitParametersSize in ${ir2string(expression)}")
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------//
|
//-------------------------------------------------------------------------//
|
||||||
|
|||||||
Reference in New Issue
Block a user