[FIR2IR] Implement tables merging in Fir2Ir classes and SymbolTable

- Pass dependent (usually common code) components to further FIR2IR converters
- Don't reinitialize builtin
This commit is contained in:
Ivan Kochurkin
2022-11-18 19:54:36 +01:00
committed by Space Team
parent 5d273ce839
commit f17e1314f6
20 changed files with 376 additions and 101 deletions
@@ -123,7 +123,7 @@ object GenerationUtils {
generateSignatures = false
)
val fir2IrExtensions = JvmFir2IrExtensions(configuration, JvmIrDeserializerImpl(), JvmIrMangler)
val (moduleFragment, components, pluginContext) = firAnalyzerFacade.convertToIr(fir2IrExtensions)
val (moduleFragment, components, pluginContext) = firAnalyzerFacade.convertToIr(fir2IrExtensions, dependentComponents = emptyList())
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
val codegenFactory = JvmIrCodegenFactory(
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
import org.jetbrains.kotlin.fir.backend.Fir2IrResult
@@ -37,7 +38,7 @@ abstract class AbstractFirAnalyzerFacade {
abstract fun runResolution(): List<FirFile>
abstract fun convertToIr(fir2IrExtensions: Fir2IrExtensions): Fir2IrResult
abstract fun convertToIr(fir2IrExtensions: Fir2IrExtensions, dependentComponents: List<Fir2IrComponents>): Fir2IrResult
}
class FirAnalyzerFacade(
@@ -103,7 +104,7 @@ class FirAnalyzerFacade(
return collectedDiagnostics!!
}
override fun convertToIr(fir2IrExtensions: Fir2IrExtensions): Fir2IrResult {
override fun convertToIr(fir2IrExtensions: Fir2IrExtensions, dependentComponents: List<Fir2IrComponents>): Fir2IrResult {
if (_scopeSession == null) runResolution()
val mangler = JvmDescriptorMangler(null)
val signaturer = JvmIdSignatureDescriptor(mangler)
@@ -117,7 +118,8 @@ class FirAnalyzerFacade(
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions,
generateSignatures,
kotlinBuiltIns = DefaultBuiltIns.Instance // TODO: consider passing externally
kotlinBuiltIns = DefaultBuiltIns.Instance, // TODO: consider passing externally,
dependentComponents = dependentComponents
)
}
}