IR: simplify initialization cycle of TypeTranslator/ConstantValueGenerator
This commit is contained in:
@@ -256,15 +256,7 @@ class Fir2IrConverter(
|
||||
): Fir2IrResult {
|
||||
val moduleDescriptor = FirModuleDescriptor(session)
|
||||
val symbolTable = SymbolTable(signaturer, irFactory)
|
||||
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
val typeTranslator = TypeTranslator(
|
||||
symbolTable,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor.builtIns,
|
||||
extensions = generatorExtensions
|
||||
)
|
||||
constantValueGenerator.typeTranslator = typeTranslator
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor, extensions = generatorExtensions)
|
||||
val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
|
||||
FirBuiltinSymbols(irBuiltIns, moduleDescriptor.builtIns, symbolTable)
|
||||
val sourceManager = PsiSourceManager()
|
||||
|
||||
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
||||
import org.jetbrains.kotlin.ir.linkage.IrProvider
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.ConstantValueGenerator
|
||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||
import org.jetbrains.kotlin.ir.util.noUnboundLeft
|
||||
@@ -53,10 +52,7 @@ class Psi2IrTranslator(
|
||||
symbolTable: SymbolTable,
|
||||
extensions: GeneratorExtensions = GeneratorExtensions()
|
||||
): GeneratorContext {
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns, extensions = extensions)
|
||||
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
constantValueGenerator.typeTranslator = typeTranslator
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor, extensions = extensions)
|
||||
return GeneratorContext(
|
||||
configuration,
|
||||
moduleDescriptor,
|
||||
@@ -65,7 +61,7 @@ class Psi2IrTranslator(
|
||||
symbolTable,
|
||||
extensions,
|
||||
typeTranslator,
|
||||
constantValueGenerator,
|
||||
typeTranslator.constantValueGenerator,
|
||||
IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -27,11 +26,9 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
class ConstantValueGenerator(
|
||||
private val moduleDescriptor: ModuleDescriptor,
|
||||
private val symbolTable: ReferenceSymbolTable
|
||||
private val symbolTable: ReferenceSymbolTable,
|
||||
private val typeTranslator: TypeTranslator,
|
||||
) {
|
||||
|
||||
lateinit var typeTranslator: TypeTranslator
|
||||
|
||||
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||
|
||||
fun generateConstantValueAsExpression(
|
||||
|
||||
@@ -52,24 +52,18 @@ class DeclarationStubGenerator(
|
||||
lazyTable.stubGenerator = if (value) this else null
|
||||
}
|
||||
|
||||
val typeTranslator =
|
||||
val typeTranslator: TypeTranslator =
|
||||
TypeTranslator(
|
||||
lazyTable,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor.builtIns,
|
||||
moduleDescriptor,
|
||||
{ LazyScopedTypeParametersResolver(lazyTable) },
|
||||
true,
|
||||
extensions
|
||||
)
|
||||
private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, lazyTable)
|
||||
|
||||
private val facadeClassMap = mutableMapOf<DeserializedContainerSource, IrClass?>()
|
||||
|
||||
init {
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
constantValueGenerator.typeTranslator = typeTranslator
|
||||
}
|
||||
|
||||
override fun getDeclaration(symbol: IrSymbol): IrDeclaration? {
|
||||
// Special case: generating field for an already generated property.
|
||||
// -- this used to be done via a trick (ab)using WrappedDescriptors. Not clear if this code should ever be invoked,
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.util
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -30,18 +29,18 @@ import java.util.*
|
||||
class TypeTranslator(
|
||||
private val symbolTable: ReferenceSymbolTable,
|
||||
val languageVersionSettings: LanguageVersionSettings,
|
||||
builtIns: KotlinBuiltIns,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
typeParametersResolverBuilder: () -> TypeParametersResolver = { ScopedTypeParametersResolver() },
|
||||
private val enterTableScope: Boolean = false,
|
||||
private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
|
||||
) {
|
||||
val constantValueGenerator: ConstantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable, this)
|
||||
|
||||
private val typeParametersResolver by threadLocal { typeParametersResolverBuilder() }
|
||||
|
||||
private val erasureStack = Stack<PropertyDescriptor>()
|
||||
|
||||
private val typeApproximatorForNI = TypeApproximator(builtIns)
|
||||
lateinit var constantValueGenerator: ConstantValueGenerator
|
||||
private val typeApproximatorForNI = TypeApproximator(moduleDescriptor.builtIns)
|
||||
|
||||
fun enterScope(irElement: IrTypeParametersContainer) {
|
||||
typeParametersResolver.enterTypeParameterScope(irElement)
|
||||
|
||||
@@ -260,14 +260,8 @@ fun loadIr(
|
||||
val mangler = JsManglerDesc
|
||||
val signaturer = IdSignatureDescriptor(mangler)
|
||||
val symbolTable = SymbolTable(signaturer, irFactory)
|
||||
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
val typeTranslator = TypeTranslator(
|
||||
symbolTable,
|
||||
depsDescriptors.compilerConfiguration.languageVersionSettings,
|
||||
builtIns = moduleDescriptor.builtIns
|
||||
)
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
constantValueGenerator.typeTranslator = typeTranslator
|
||||
val typeTranslator =
|
||||
TypeTranslator(symbolTable, depsDescriptors.compilerConfiguration.languageVersionSettings, moduleDescriptor)
|
||||
val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
|
||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||
val irLinker =
|
||||
|
||||
@@ -193,20 +193,15 @@ private fun getIrMethodSymbolByName(methodName: String): String {
|
||||
}
|
||||
|
||||
private fun getIrBuiltIns(): IrBuiltIns {
|
||||
val builtIns = DefaultBuiltIns.Instance
|
||||
val languageSettings = LanguageVersionSettingsImpl(LanguageVersion.KOTLIN_1_3, ApiVersion.KOTLIN_1_3)
|
||||
|
||||
val moduleDescriptor = ModuleDescriptorImpl(Name.special("<test-module>"), LockBasedStorageManager(""), builtIns)
|
||||
val moduleDescriptor = ModuleDescriptorImpl(Name.special("<test-module>"), LockBasedStorageManager(""), DefaultBuiltIns.Instance)
|
||||
val signaturer = object : IdSignatureComposer {
|
||||
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? = null
|
||||
|
||||
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? = null
|
||||
}
|
||||
val symbolTable = SymbolTable(signaturer, IrFactoryImpl)
|
||||
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageSettings, builtIns)
|
||||
constantValueGenerator.typeTranslator = typeTranslator
|
||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||
|
||||
return IrBuiltIns(builtIns, typeTranslator, symbolTable)
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageSettings, moduleDescriptor)
|
||||
return IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
|
||||
}
|
||||
|
||||
@@ -513,9 +513,7 @@ class GenerateIrRuntime {
|
||||
val mangler = JsManglerDesc
|
||||
val signaturer = IdSignatureDescriptor(mangler)
|
||||
val symbolTable = SymbolTable(signaturer, PersistentIrFactory())
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns).also {
|
||||
it.constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
}
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor)
|
||||
|
||||
val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
|
||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||
@@ -542,10 +540,7 @@ class GenerateIrRuntime {
|
||||
val mangler = JsManglerDesc
|
||||
val signaturer = IdSignatureDescriptor(mangler)
|
||||
val symbolTable = SymbolTable(signaturer, PersistentIrFactory())
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns).also {
|
||||
it.constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
}
|
||||
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor)
|
||||
val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
|
||||
|
||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||
|
||||
+1
-4
@@ -41,10 +41,7 @@ class JsScriptDependencyCompiler(
|
||||
it.initialize(PackageFragmentProvider.Empty)
|
||||
}
|
||||
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns).also {
|
||||
it.constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||
}
|
||||
|
||||
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor)
|
||||
val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable)
|
||||
val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable)
|
||||
irBuiltIns.functionFactory = functionFactory
|
||||
|
||||
Reference in New Issue
Block a user