IR: add BackendContext.typeSystem and JvmIrTypeSystemContext
To be able to override JVM-specific behavior of IrTypeSystemContext in JVM IR, for things like JVM flexible types.
This commit is contained in:
+5
@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
||||
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||
@@ -330,6 +332,9 @@ internal class Context(config: KonanConfig) : KonanBackendContext(config) {
|
||||
override val irBuiltIns
|
||||
get() = ir.irModule.irBuiltins
|
||||
|
||||
override val typeSystem: IrTypeSystemContext
|
||||
get() = IrTypeSystemContextImpl(irBuiltIns)
|
||||
|
||||
val interopBuiltIns by lazy {
|
||||
InteropBuiltIns(this.builtIns)
|
||||
}
|
||||
|
||||
+5
-4
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.builders.irBlockBody
|
||||
import org.jetbrains.kotlin.ir.builders.irCall
|
||||
@@ -32,9 +31,11 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.typeWith
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.util.constructors
|
||||
import org.jetbrains.kotlin.ir.util.defaultType
|
||||
import org.jetbrains.kotlin.ir.util.functions
|
||||
import org.jetbrains.kotlin.ir.util.module
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
|
||||
|
||||
internal object DECLARATION_ORIGIN_ENUM : IrDeclarationOriginImpl("ENUM")
|
||||
@@ -203,7 +204,7 @@ internal class EnumSpecialDeclarationsFactory(val context: Context) {
|
||||
)
|
||||
|
||||
implObject.superTypes += context.irBuiltIns.anyType
|
||||
implObject.addFakeOverrides(context.irBuiltIns)
|
||||
implObject.addFakeOverrides(context.typeSystem)
|
||||
|
||||
val itemGetterSymbol = findItemGetterSymbol()
|
||||
val enumEntriesMap = enumEntriesMap(enumClass)
|
||||
|
||||
+2
-1
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
internal interface KotlinStubs {
|
||||
val irBuiltIns: IrBuiltIns
|
||||
val typeSystem: IrTypeSystemContext
|
||||
val symbols: KonanSymbols
|
||||
val target: KonanTarget
|
||||
val language: String
|
||||
@@ -1221,7 +1222,7 @@ private class ObjCBlockPointerValuePassing(
|
||||
+irReturn(callBlock(blockPointer, arguments))
|
||||
}
|
||||
|
||||
irClass.addFakeOverrides(stubs.irBuiltIns)
|
||||
irClass.addFakeOverrides(stubs.typeSystem)
|
||||
|
||||
stubs.addKotlin(irClass)
|
||||
return constructor
|
||||
|
||||
+1
-1
@@ -294,7 +294,7 @@ internal class FunctionReferenceLowering(val context: Context): FileLoweringPass
|
||||
|
||||
functionReferenceClass.superTypes += superTypes
|
||||
|
||||
functionReferenceClass.addFakeOverrides(context.irBuiltIns)
|
||||
functionReferenceClass.addFakeOverrides(context.typeSystem)
|
||||
|
||||
return BuiltFunctionReference(functionReferenceClass, buildConstructor())
|
||||
}
|
||||
|
||||
+1
@@ -80,6 +80,7 @@ private abstract class BaseInteropIrTransformer(private val context: Context) :
|
||||
return object : KotlinStubs {
|
||||
override val irBuiltIns get() = context.irBuiltIns
|
||||
override val symbols get() = context.ir.symbols
|
||||
override val typeSystem: IrTypeSystemContext get() = context.typeSystem
|
||||
|
||||
val klib: KonanLibrary? get() {
|
||||
return (element as? IrCall)?.symbol?.owner?.konanLibrary as? KonanLibrary
|
||||
|
||||
+1
-1
@@ -518,7 +518,7 @@ internal class TestProcessor (val context: Context) {
|
||||
companionGetter?.let { declarations += it }
|
||||
|
||||
superTypes += symbols.baseClassSuite.typeWith(listOf(testClassType, testCompanionType))
|
||||
addFakeOverrides(context.irBuiltIns)
|
||||
addFakeOverrides(context.typeSystem)
|
||||
}
|
||||
//endregion
|
||||
|
||||
|
||||
+3
-1
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPublicSymbolBase
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
@@ -91,7 +92,8 @@ internal class KonanIrLinker(
|
||||
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = moduleDescriptor.isNativeStdlib()
|
||||
|
||||
private val forwardDeclarationDeserializer = forwardModuleDescriptor?.let { KonanForwardDeclarationModuleDeserializer(it) }
|
||||
override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, KonanManglerIr, builtIns, KonanFakeOverrideClassFilter)
|
||||
override val fakeOverrideBuilder: FakeOverrideBuilder =
|
||||
FakeOverrideBuilder(this, symbolTable, KonanManglerIr, IrTypeSystemContextImpl(builtIns), KonanFakeOverrideClassFilter)
|
||||
|
||||
override fun createModuleDeserializer(moduleDescriptor: ModuleDescriptor, klib: KotlinLibrary?, strategy: DeserializationStrategy): IrModuleDeserializer {
|
||||
if (moduleDescriptor === forwardModuleDescriptor) {
|
||||
|
||||
Reference in New Issue
Block a user