diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 38fa69a1d12..712ea2033b7 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -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() diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt index 787495e8e55..6e734ff1937 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt @@ -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), ) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt index 774df50035f..1c936f77c9d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt @@ -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( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 7bcc7237ed6..4cfa44c0ad3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -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() - 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, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt index 2d5e2fa39b9..095b061aee1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt @@ -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() - private val typeApproximatorForNI = TypeApproximator(builtIns) - lateinit var constantValueGenerator: ConstantValueGenerator + private val typeApproximatorForNI = TypeApproximator(moduleDescriptor.builtIns) fun enterScope(irElement: IrTypeParametersContainer) { typeParametersResolver.enterTypeParameterScope(irElement) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index fef050c1046..a39ecb3674d 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -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 = diff --git a/generators/interpreter/GenerateInterpreterMap.kt b/generators/interpreter/GenerateInterpreterMap.kt index 1ecc64a7ab5..fa7d47fdcd3 100644 --- a/generators/interpreter/GenerateInterpreterMap.kt +++ b/generators/interpreter/GenerateInterpreterMap.kt @@ -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(""), LockBasedStorageManager(""), builtIns) + val moduleDescriptor = ModuleDescriptorImpl(Name.special(""), 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) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt index f9ff372c394..6e44d8c0992 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt @@ -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) diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt index eac1a5c4fc9..bec45f501b0 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt @@ -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