Introduce some helpful type aliases in interpreter
This commit is contained in:
committed by
TeamCityServer
parent
1808f14677
commit
69fe7e66a5
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.interpreter.exceptions.*
|
||||
import org.jetbrains.kotlin.ir.interpreter.proxy.CommonProxy.Companion.asProxy
|
||||
import org.jetbrains.kotlin.ir.interpreter.proxy.Proxy
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.CallStack
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.*
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.reflection.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
@@ -600,8 +601,8 @@ class IrInterpreter(internal val environment: IrInterpreterEnvironment, internal
|
||||
val function = KFunctionState(
|
||||
reference,
|
||||
environment,
|
||||
dispatchReceiver?.let { irFunction.getDispatchReceiver()!! to it },
|
||||
extensionReceiver?.let { irFunction.getExtensionReceiver()!! to it }
|
||||
dispatchReceiver?.let { Field(irFunction.getDispatchReceiver()!!, it) },
|
||||
extensionReceiver?.let { Field(irFunction.getExtensionReceiver()!!, it) }
|
||||
)
|
||||
if (irFunction.isLocal) callStack.storeUpValues(function)
|
||||
callStack.pushState(function)
|
||||
|
||||
+5
-1
@@ -6,5 +6,9 @@
|
||||
package org.jetbrains.kotlin.ir.interpreter.stack
|
||||
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.State
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
|
||||
internal data class Variable(var state: State?)
|
||||
internal data class Variable(var state: State?)
|
||||
|
||||
internal typealias Fields = MutableMap<IrSymbol, State>
|
||||
internal typealias Field = Pair<IrSymbol, State>
|
||||
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.createCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.fqName
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.isNullableAny
|
||||
@@ -19,12 +21,10 @@ import org.jetbrains.kotlin.ir.util.nameForIrSerialization
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class Common private constructor(
|
||||
override val irClass: IrClass, override val fields: MutableMap<IrSymbol, State>
|
||||
) : Complex, StateWithClosure {
|
||||
internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure {
|
||||
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
|
||||
override var superWrapperClass: Wrapper? = null
|
||||
override var outerClass: Pair<IrSymbol, State>? = null
|
||||
override var outerClass: Field? = null
|
||||
|
||||
constructor(irClass: IrClass) : this(irClass, mutableMapOf())
|
||||
|
||||
|
||||
@@ -12,14 +12,14 @@ import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.fqName
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.CallStack
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.util.overrides
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
||||
|
||||
internal interface Complex : State {
|
||||
var superWrapperClass: Wrapper?
|
||||
var outerClass: Pair<IrSymbol, State>?
|
||||
var outerClass: Field?
|
||||
|
||||
fun irClassFqName() = irClass.fqName
|
||||
|
||||
|
||||
+5
-3
@@ -7,17 +7,19 @@ package org.jetbrains.kotlin.ir.interpreter.state
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.interpreter.getOriginalPropertyByName
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.isSubclassOf
|
||||
import kotlin.math.min
|
||||
|
||||
internal class ExceptionState private constructor(
|
||||
override val irClass: IrClass, override val fields: MutableMap<IrSymbol, State>, stackTrace: List<String>
|
||||
override val irClass: IrClass, override val fields: Fields, stackTrace: List<String>
|
||||
) : Complex, StateWithClosure, Throwable() {
|
||||
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
|
||||
override var superWrapperClass: Wrapper? = null
|
||||
override var outerClass: Pair<IrSymbol, State>? = null
|
||||
override var outerClass: Field? = null
|
||||
|
||||
override val message: String?
|
||||
get() = getField(messageProperty.symbol)?.asStringOrNull()
|
||||
@@ -100,7 +102,7 @@ internal class ExceptionState private constructor(
|
||||
override fun toString(): String = message?.let { "$exceptionFqName: $it" } ?: exceptionFqName
|
||||
|
||||
companion object {
|
||||
private fun evaluateFields(exception: Throwable, irClass: IrClass, stackTrace: List<String>): MutableMap<IrSymbol, State> {
|
||||
private fun evaluateFields(exception: Throwable, irClass: IrClass, stackTrace: List<String>): Fields {
|
||||
val messageProperty = irClass.getOriginalPropertyByName("message")
|
||||
val causeProperty = irClass.getOriginalPropertyByName("cause")
|
||||
|
||||
|
||||
+2
-1
@@ -9,13 +9,14 @@ import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.getLastOverridden
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||
import org.jetbrains.kotlin.ir.util.defaultType
|
||||
|
||||
internal class Primitive<T>(val value: T, val type: IrType) : State {
|
||||
override val fields: MutableMap<IrSymbol, State> = mutableMapOf()
|
||||
override val fields: Fields = mutableMapOf()
|
||||
override val irClass: IrClass = type.classOrNull!!.owner
|
||||
|
||||
override fun getField(symbol: IrSymbol): State? = null
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment
|
||||
import org.jetbrains.kotlin.ir.interpreter.exceptions.handleUserException
|
||||
import org.jetbrains.kotlin.ir.interpreter.isFunction
|
||||
import org.jetbrains.kotlin.ir.interpreter.isKFunction
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.reflection.KFunctionState
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.reflection.ReflectionState
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
@@ -21,7 +22,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
internal interface State {
|
||||
val fields: MutableMap<IrSymbol, State>
|
||||
val fields: Fields
|
||||
val irClass: IrClass
|
||||
|
||||
fun getField(symbol: IrSymbol): State? {
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.*
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
@@ -23,10 +25,10 @@ import kotlin.collections.HashMap
|
||||
import kotlin.collections.LinkedHashMap
|
||||
|
||||
internal class Wrapper(val value: Any, override val irClass: IrClass, environment: IrInterpreterEnvironment) : Complex {
|
||||
override val fields: MutableMap<IrSymbol, State> = mutableMapOf()
|
||||
override val fields: Fields = mutableMapOf()
|
||||
|
||||
override var superWrapperClass: Wrapper? = null
|
||||
override var outerClass: Pair<IrSymbol, State>? = null
|
||||
override var outerClass: Field? = null
|
||||
|
||||
private val receiverClass = irClass.defaultType.getClass(true)
|
||||
|
||||
|
||||
+5
-3
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.ir.interpreter.*
|
||||
import org.jetbrains.kotlin.ir.interpreter.proxy.reflection.KParameterProxy
|
||||
import org.jetbrains.kotlin.ir.interpreter.proxy.reflection.KTypeParameterProxy
|
||||
import org.jetbrains.kotlin.ir.interpreter.proxy.reflection.KTypeProxy
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Field
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.State
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.StateWithClosure
|
||||
@@ -35,7 +37,7 @@ internal class KFunctionState(
|
||||
val irFunction: IrFunction,
|
||||
override val irClass: IrClass,
|
||||
environment: IrInterpreterEnvironment,
|
||||
override val fields: MutableMap<IrSymbol, State> = mutableMapOf()
|
||||
override val fields: Fields = mutableMapOf()
|
||||
) : ReflectionState(), StateWithClosure {
|
||||
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
|
||||
|
||||
@@ -125,8 +127,8 @@ internal class KFunctionState(
|
||||
constructor(
|
||||
functionReference: IrFunctionReference,
|
||||
environment: IrInterpreterEnvironment,
|
||||
dispatchReceiver: Pair<IrSymbol, State>?,
|
||||
extensionReceiver: Pair<IrSymbol, State>?
|
||||
dispatchReceiver: Field?,
|
||||
extensionReceiver: Field?
|
||||
) : this(
|
||||
functionReference.symbol.owner,
|
||||
functionReference.type.classOrNull!!.owner,
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Fields
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.State
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
@@ -18,7 +19,7 @@ import org.jetbrains.kotlin.ir.util.render
|
||||
import kotlin.math.min
|
||||
|
||||
internal abstract class ReflectionState : State {
|
||||
override val fields: MutableMap<IrSymbol, State> = mutableMapOf()
|
||||
override val fields: Fields = mutableMapOf()
|
||||
|
||||
override fun getIrFunctionByIrCall(expression: IrCall): IrFunction? = null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user