From 8f6a1b418d816a64180e78da1c3752f2911c655f Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 17 Jun 2020 16:22:21 +0300 Subject: [PATCH] Add method to evaluate constant expressions in ir module for fir2ir --- .../src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt | 5 ++--- .../kotlin/fir/backend/evaluate/IrConstTransformer.kt | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 336188dff68..dfc57f6204b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.backend.generators.AnnotationGenerator import org.jetbrains.kotlin.fir.backend.generators.CallAndReferenceGenerator import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator import org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer +import org.jetbrains.kotlin.fir.backend.evaluate.evaluateConstants import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.psi @@ -241,9 +242,7 @@ class Fir2IrConverter( descriptor.owner.parent = parentClass ?: continue } - irModuleFragment.files.forEach { - it.transformChildren(IrConstTransformer(irModuleFragment), null) - } + evaluateConstants(irModuleFragment) return Fir2IrResult(irModuleFragment, symbolTable, sourceManager, components) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/evaluate/IrConstTransformer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/evaluate/IrConstTransformer.kt index 2ae94e487cd..cc1af1b9821 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/evaluate/IrConstTransformer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/evaluate/IrConstTransformer.kt @@ -23,6 +23,10 @@ import org.jetbrains.kotlin.ir.types.isArray import org.jetbrains.kotlin.ir.types.typeOrNull import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid +fun evaluateConstants(irModuleFragment: IrModuleFragment) { + irModuleFragment.files.forEach { it.transformChildren(IrConstTransformer(irModuleFragment), null) } +} + //TODO create abstract class that will be common for this and lowering class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransformerVoid() { private val interpreter = IrInterpreter(irModuleFragment)