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