From aca7a4921464ed0aae789db0ed2f758d49fba4f9 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Sun, 10 Nov 2019 20:40:03 +0300 Subject: [PATCH] Add some sort of correct calculation with const modifier --- .../kotlin/backend/common/interpreter/IrInterpreter.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 074bc51fcb3..e9fa9a2f7c5 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 @@ -42,6 +42,7 @@ class IrInterpreter : IrElementVisitor { is IrSetField -> visitSetField(element, data) is IrGetField -> visitGetField(element, data) is IrGetValue -> visitGetValue(element, data) + is IrConst<*> -> visitConst(element, data) else -> TODO("${element.javaClass} not supported") } } @@ -56,7 +57,7 @@ class IrInterpreter : IrElementVisitor { val dispatchReceiver = expression.dispatchReceiver?.accept(this, data) ?.setDescriptor(expression.symbol.descriptor.dispatchReceiverParameter!!) val extensionReceiver = expression.extensionReceiver?.accept(this, data) - ?.setDescriptor(expression.symbol.descriptor.extensionReceiverParameter?.containingDeclaration!!) + ?.setDescriptor(expression.symbol.descriptor.extensionReceiverParameter!!) (dispatchReceiver ?: extensionReceiver)?.also { newFrame.addVar(it) } return if (expression.getBody() == null) { @@ -120,7 +121,8 @@ class IrInterpreter : IrElementVisitor { } override fun visitGetField(expression: IrGetField, data: Frame): State { - val receiver = (expression.receiver as IrDeclarationReference).symbol.descriptor + val receiver = (expression.receiver as? IrDeclarationReference)?.symbol?.descriptor // receiver is null, for example, for top level fields + ?: return expression.symbol.owner.initializer!!.expression.accept(this, data) return data.getVar(receiver).getState(expression.symbol.descriptor).copy() }