Add method to evaluate constant expressions in ir module for fir2ir
This commit is contained in:
@@ -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.CallAndReferenceGenerator
|
||||||
import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator
|
import org.jetbrains.kotlin.fir.backend.generators.FakeOverrideGenerator
|
||||||
import org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer
|
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.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
@@ -241,9 +242,7 @@ class Fir2IrConverter(
|
|||||||
descriptor.owner.parent = parentClass ?: continue
|
descriptor.owner.parent = parentClass ?: continue
|
||||||
}
|
}
|
||||||
|
|
||||||
irModuleFragment.files.forEach {
|
evaluateConstants(irModuleFragment)
|
||||||
it.transformChildren(IrConstTransformer(irModuleFragment), null)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Fir2IrResult(irModuleFragment, symbolTable, sourceManager, components)
|
return Fir2IrResult(irModuleFragment, symbolTable, sourceManager, components)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -23,6 +23,10 @@ import org.jetbrains.kotlin.ir.types.isArray
|
|||||||
import org.jetbrains.kotlin.ir.types.typeOrNull
|
import org.jetbrains.kotlin.ir.types.typeOrNull
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
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
|
//TODO create abstract class that will be common for this and lowering
|
||||||
class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransformerVoid() {
|
class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransformerVoid() {
|
||||||
private val interpreter = IrInterpreter(irModuleFragment)
|
private val interpreter = IrInterpreter(irModuleFragment)
|
||||||
|
|||||||
Reference in New Issue
Block a user