From 68cdcfa8532a30cc63470be42d99442f74c393a9 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 17 Aug 2016 18:09:54 +0300 Subject: [PATCH] Minor: assertion in IrSingleExpressionValue to ensure that corresponding expression is detached and instantiated once. --- .../kotlin/psi2ir/generators/values/IrValue.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/values/IrValue.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/values/IrValue.kt index 7c30300c7dd..d31fd977f81 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/values/IrValue.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/values/IrValue.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.psi2ir.generators.values +import org.jetbrains.kotlin.ir.assertDetached import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.psi2ir.createDefaultGetExpression @@ -31,7 +32,19 @@ class IrTemporaryVariableValue(val irVariable: IrVariable) : IrValue { } class IrSingleExpressionValue(val irExpression: IrExpression) : IrValue { - override fun load() = irExpression + init { + irExpression.assertDetached() + } + + private var instantiated = false + + override fun load() = + if (!instantiated) { + instantiated = true + irExpression + } + else + throw AssertionError("Single exprssion value is already instantiated") } interface IrLValue : IrValue {