[IR] Add KType to IrBuiltins

This commit is contained in:
Ivan Kylchik
2023-05-26 13:45:12 +02:00
committed by Space Team
parent 0021a5f655
commit 6f4f06757a
7 changed files with 13 additions and 5 deletions
@@ -265,6 +265,8 @@ class IrBuiltInsOverFir(
override val kPropertyClass: IrClassSymbol get() = kProperty.klass
private val kClass by loadClass(StandardClassIds.KClass)
override val kClassClass: IrClassSymbol get() = kClass.klass
private val kType by loadClass(StandardClassIds.KType)
override val kTypeClass: IrClassSymbol get() = kType.klass
private val kProperty0 by loadClass(StandardClassIds.KProperty0)
override val kProperty0Class: IrClassSymbol get() = kProperty0.klass
private val kProperty1 by loadClass(StandardClassIds.KProperty1)
@@ -37,11 +37,7 @@ class IrInterpreterEnvironment(
internal val kTypeParameterClass by lazy { irBuiltIns.kClassClass.getIrClassOfReflectionFromList("typeParameters")!! }
internal val kParameterClass by lazy { irBuiltIns.kFunctionClass.getIrClassOfReflectionFromList("parameters")!! }
internal val kTypeProjectionClass by lazy { kTypeClass.getIrClassOfReflectionFromList("arguments")!! }
internal val kTypeClass: IrClassSymbol by lazy {
// here we use fallback to `Any` because `KType` cannot be found on JS/Native by this way
// but still this class is used to represent type arguments in interpreter
irBuiltIns.kClassClass.getIrClassOfReflectionFromList("supertypes") ?: irBuiltIns.anyClass
}
internal val kTypeClass: IrClassSymbol by lazy { irBuiltIns.kTypeClass }
init {
mapOfObjects[irBuiltIns.unitClass] = Common(irBuiltIns.unitClass.owner)
@@ -340,6 +340,7 @@ class IrBuiltInsOverDescriptors(
override val kCallableClass = builtIns.kCallable.toIrSymbol()
override val kPropertyClass = builtIns.kProperty.toIrSymbol()
override val kClassClass = builtIns.kClass.toIrSymbol()
override val kTypeClass = builtIns.kType.toIrSymbol()
override val kProperty0Class = builtIns.kProperty0.toIrSymbol()
override val kProperty1Class = builtIns.kProperty1.toIrSymbol()
@@ -83,6 +83,7 @@ abstract class IrBuiltIns {
abstract val kCallableClass: IrClassSymbol
abstract val kPropertyClass: IrClassSymbol
abstract val kClassClass: IrClassSymbol
abstract val kTypeClass: IrClassSymbol
abstract val kProperty0Class: IrClassSymbol
abstract val kProperty1Class: IrClassSymbol
abstract val kProperty2Class: IrClassSymbol
@@ -164,6 +164,7 @@ object StandardNames {
@JvmField val mutableMapEntry: FqName = mutableMap.child(Name.identifier("MutableEntry"))
@JvmField val kClass: FqNameUnsafe = reflect("KClass")
@JvmField val kType: FqNameUnsafe = reflect("KType")
@JvmField val kCallable: FqNameUnsafe = reflect("KCallable")
@JvmField val kProperty0: FqNameUnsafe = reflect("KProperty0")
@JvmField val kProperty1: FqNameUnsafe = reflect("KProperty1")
@@ -70,6 +70,7 @@ object StandardClassIds {
val KFunction = "KFunction".reflectId()
val KClass = "KClass".reflectId()
val KCallable = "KCallable".reflectId()
val KType = "KType".reflectId()
val Comparable = "Comparable".baseId()
val Number = "Number".baseId()
@@ -354,6 +354,12 @@ public abstract class KotlinBuiltIns {
return getBuiltInClassByFqName(FqNames.kClass.toSafe());
}
@NotNull
public ClassDescriptor getKType() {
return getBuiltInClassByFqName(FqNames.kType.toSafe());
}
@NotNull
public ClassDescriptor getKCallable() {
return getBuiltInClassByFqName(FqNames.kCallable.toSafe());