From fd51a9a085e0ee4f0880a1e9a5669af0672e7bf1 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 7 Apr 2020 10:59:17 +0300 Subject: [PATCH] Change signature in getArgsForMethodInvocation method --- .../kotlin/backend/common/interpreter/IrInterpreter.kt | 4 ++-- .../jetbrains/kotlin/backend/common/interpreter/Utils.kt | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/IrInterpreter.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/IrInterpreter.kt index 28c0f8bd045..7c39dec5b90 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/IrInterpreter.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/IrInterpreter.kt @@ -152,7 +152,7 @@ class IrInterpreter(irModule: IrModuleFragment) { private suspend fun MethodHandle?.invokeMethod(irFunction: IrFunction, data: Frame): ExecutionResult { this ?: return handleIntrinsicMethods(irFunction, data) - val result = this.invokeWithArguments(irFunction.getArgsForMethodInvocation(data)) + val result = this.invokeWithArguments(irFunction.getArgsForMethodInvocation(data.getAll())) data.pushReturnValue(result.toState(result.getType(irFunction.returnType))) return Next @@ -165,7 +165,7 @@ class IrInterpreter(irModule: IrModuleFragment) { data.pushReturnValue(result.toState(result.getType(irFunction.returnType))) } "arrayOf" -> { - val result = irFunction.getArgsForMethodInvocation(data).toTypedArray() + val result = irFunction.getArgsForMethodInvocation(data.getAll()).toTypedArray() data.pushReturnValue(result.toState(result.getType(irFunction.returnType))) } "arrayOfNulls" -> { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/Utils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/Utils.kt index d337816aa8d..94afb7ec9fd 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/Utils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/Utils.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.backend.common.interpreter import org.jetbrains.kotlin.backend.common.interpreter.builtins.evaluateIntrinsicAnnotation -import org.jetbrains.kotlin.backend.common.interpreter.stack.* +import org.jetbrains.kotlin.backend.common.interpreter.stack.Variable import org.jetbrains.kotlin.backend.common.interpreter.state.* import org.jetbrains.kotlin.builtins.UnsignedTypes import org.jetbrains.kotlin.descriptors.* @@ -178,8 +178,8 @@ fun IrType.getFqName(): String? { return this.classOrNull?.owner?.fqNameForIrSerialization?.asString() } -fun IrFunction.getArgsForMethodInvocation(data: Frame): List { - val argsValues = data.getAll().map { +fun IrFunction.getArgsForMethodInvocation(args: List): List { + val argsValues = args.map { when (val state = it.state) { is ExceptionState -> state.getThisAsCauseForException() is Wrapper -> state.value @@ -191,9 +191,8 @@ fun IrFunction.getArgsForMethodInvocation(data: Frame): List { // TODO if vararg isn't last parameter // must convert vararg array into separated elements for correct invoke if (this.valueParameters.lastOrNull()?.varargElementType != null) { + val varargValue = argsValues.last() argsValues.removeAt(argsValues.size - 1) - val varargState = data.getVariableState(this.valueParameters.last().descriptor) - val varargValue = (varargState as? Wrapper)?.value ?: (varargState as Primitive<*>).value argsValues.addAll(varargValue as Array) }