Create separate constructor for ir interpreter with only ir builtins
By introducing this constructor, ir interpreter will no longer find ir exceptions in module and so interpreter is creating faster for fir2ir goals
This commit is contained in:
+4
-3
@@ -11,18 +11,19 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreter
|
||||
import org.jetbrains.kotlin.ir.interpreter.toIrConst
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
|
||||
fun evaluateConstants(irModuleFragment: IrModuleFragment) {
|
||||
val irConstTransformer = IrConstTransformer(irModuleFragment)
|
||||
val irConstTransformer = IrConstTransformer(irModuleFragment.irBuiltins)
|
||||
irModuleFragment.files.forEach { it.transformChildren(irConstTransformer, null) }
|
||||
}
|
||||
|
||||
//TODO create abstract class that will be common for this and lowering
|
||||
class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransformerVoid() {
|
||||
private val interpreter = IrInterpreter(irModuleFragment)
|
||||
class IrConstTransformer(irBuiltIns: IrBuiltIns) : IrElementTransformerVoid() {
|
||||
private val interpreter = IrInterpreter(irBuiltIns)
|
||||
|
||||
private fun IrExpression.replaceIfError(original: IrExpression): IrExpression {
|
||||
return if (this !is IrErrorExpression) this else original
|
||||
|
||||
+12
-4
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
||||
@@ -32,10 +33,8 @@ import kotlin.concurrent.thread
|
||||
|
||||
private const val MAX_COMMANDS = 500_000
|
||||
|
||||
class IrInterpreter(irModule: IrModuleFragment, private val bodyMap: Map<IdSignature, IrBody> = emptyMap()) {
|
||||
private val irBuiltIns = irModule.irBuiltins
|
||||
private val irExceptions = irModule.files.flatMap { it.declarations }.filterIsInstance<IrClass>()
|
||||
.filter { it.isSubclassOf(irBuiltIns.throwableClass.owner) }
|
||||
class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map<IdSignature, IrBody> = emptyMap()) {
|
||||
private val irExceptions = mutableListOf<IrClass>()
|
||||
|
||||
private val stack = StackImpl()
|
||||
private var commandCount = 0
|
||||
@@ -43,6 +42,15 @@ class IrInterpreter(irModule: IrModuleFragment, private val bodyMap: Map<IdSigna
|
||||
private val mapOfEnums = mutableMapOf<IrSymbol, Complex>()
|
||||
private val mapOfObjects = mutableMapOf<IrSymbol, Complex>()
|
||||
|
||||
constructor(irModule: IrModuleFragment): this(irModule.irBuiltins) {
|
||||
irExceptions.addAll(
|
||||
irModule.files
|
||||
.flatMap { it.declarations }
|
||||
.filterIsInstance<IrClass>()
|
||||
.filter { it.isSubclassOf(irBuiltIns.throwableClass.owner) }
|
||||
)
|
||||
}
|
||||
|
||||
private fun Any?.getType(defaultType: IrType): IrType {
|
||||
return when (this) {
|
||||
is Boolean -> irBuiltIns.booleanType
|
||||
|
||||
Reference in New Issue
Block a user