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