From ad6ba0cf118f88cdc779dcc9868cc5674cec3591 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Fri, 7 Aug 2020 13:43:13 +0300 Subject: [PATCH] Support lateinit var interpretation --- .../jetbrains/kotlin/ir/interpreter/IrInterpreter.kt | 12 +++++------- .../kotlin/ir/interpreter/stack/Variable.kt | 8 +++++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt index e1e5cd5075b..0f2309dbb10 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt @@ -570,19 +570,17 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map } private fun interpretVariable(expression: IrVariable): ExecutionResult { - expression.initializer?.interpret()?.check { return it } ?: return Next + if (expression.initializer == null) { + return Next.apply { stack.addVar(Variable(expression.symbol)) } + } + expression.initializer?.interpret()?.check { return it } //?: return Next stack.addVar(Variable(expression.symbol, stack.popReturnValue())) return Next } private fun interpretSetVariable(expression: IrSetValue): ExecutionResult { expression.value.interpret().check { return it } - - if (stack.contains(expression.symbol)) { - stack.getVariable(expression.symbol).apply { this.state = stack.popReturnValue() } - } else { - stack.addVar(Variable(expression.symbol, stack.popReturnValue())) - } + stack.getVariable(expression.symbol).apply { this.state = stack.popReturnValue() } return Next } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/stack/Variable.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/stack/Variable.kt index f8d1272d632..92d5745c411 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/stack/Variable.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/stack/Variable.kt @@ -9,4 +9,10 @@ import org.jetbrains.kotlin.ir.interpreter.state.State import org.jetbrains.kotlin.ir.symbols.IrSymbol // TODO maybe switch to typealias and use map instead of list -internal data class Variable(val symbol: IrSymbol, var state: State) \ No newline at end of file +internal data class Variable(val symbol: IrSymbol) { + lateinit var state: State + + constructor(symbol: IrSymbol, state: State) : this(symbol) { + this.state = state + } +} \ No newline at end of file