IR: reorganize IrProvider handling

Make DeclarationStubGenerator a subclass of IrProvider,
anticipating deserialization of IR structures for JVM_IR backend.
This commit is contained in:
Georgy Bronnikov
2019-11-25 14:03:34 +03:00
parent be04912f6f
commit 1ed23d7c54
17 changed files with 198 additions and 138 deletions
@@ -18,9 +18,11 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.generateJsCode
import org.jetbrains.kotlin.ir.backend.js.generateModuleFragment
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsMangler
import org.jetbrains.kotlin.ir.backend.js.utils.NameTables
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplCodeAnalyzer
@@ -58,7 +60,7 @@ class JsCoreScriptingCompiler(
val module = analysisResult.moduleDescriptor
val bindingContext = analysisResult.bindingContext
val psi2ir = Psi2IrTranslator(environment.configuration.languageVersionSettings)
val psi2ir = Psi2IrTranslator(environment.configuration.languageVersionSettings, mangler = JsMangler)
val psi2irContext = psi2ir.createGeneratorContext(module, bindingContext, symbolTable)
val irModuleFragment = psi2irContext.generateModuleFragment(listOf(snippetKtFile))
@@ -74,9 +76,12 @@ class JsCoreScriptingCompiler(
)
ExternalDependenciesGenerator(
irModuleFragment.descriptor,
psi2irContext.symbolTable,
psi2irContext.irBuiltIns
generateTypicalIrProviderList(
irModuleFragment.descriptor,
psi2irContext.irBuiltIns,
psi2irContext.symbolTable
)
).generateUnboundSymbolsAsDependencies()
environment.configuration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
@@ -50,8 +50,9 @@ class JsScriptDependencyCompiler(
val moduleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns)
val irDependencies = dependencies.map { jsLinker.deserializeFullModule(it) }
val irProviders = generateTypicalIrProviderList(moduleDescriptor, irBuiltIns, symbolTable, deserializer = jsLinker)
ExternalDependenciesGenerator(moduleDescriptor, symbolTable, irBuiltIns, jsLinker).generateUnboundSymbolsAsDependencies()
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
moduleFragment.patchDeclarationParents()
val backendContext = JsIrBackendContext(
@@ -64,7 +65,7 @@ class JsScriptDependencyCompiler(
true
)
ExternalDependenciesGenerator(moduleDescriptor, symbolTable, irBuiltIns, jsLinker).generateUnboundSymbolsAsDependencies()
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
moduleFragment.patchDeclarationParents()
moduleFragment.files += irDependencies.flatMap { it.files }