JVM_IR: repair after switching Ir.Symbols to non-lazy table

Symbols referenced from Jvm>Ir.Symbols stayed unbound, hence I have
to run ExternalDeopendenciesGenerator a second time after
creating JvmBackendContext :(
This commit is contained in:
Georgy Bronnikov
2019-12-02 18:32:20 +03:00
parent 08aeed3b46
commit 4a0f683bea
3 changed files with 16 additions and 11 deletions
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -66,7 +65,7 @@ class JvmBackendContext(
override val ir = JvmIr(irModuleFragment, this.symbolTable)
val irIntrinsics = IrIntrinsicMethods(irBuiltIns, ir.symbols)
val irIntrinsics by lazy { IrIntrinsicMethods(irBuiltIns, ir.symbols) }
private val localClassType = mutableMapOf<IrAttributeContainer, Type>()
@@ -115,16 +114,16 @@ class JvmBackendContext(
}
internal fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol =
symbolTable.referenceClass(descriptor)
symbolTable.lazyWrapper.referenceClass(descriptor)
internal fun referenceTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameterSymbol =
symbolTable.referenceTypeParameter(descriptor)
symbolTable.lazyWrapper.referenceTypeParameter(descriptor)
internal fun referenceFunction(descriptor: FunctionDescriptor): IrFunctionSymbol =
if (descriptor is ClassConstructorDescriptor)
symbolTable.referenceConstructor(descriptor)
symbolTable.lazyWrapper.referenceConstructor(descriptor)
else
symbolTable.referenceSimpleFunction(descriptor)
symbolTable.lazyWrapper.referenceSimpleFunction(descriptor)
override fun log(message: () -> String) {
/*TODO*/
@@ -16,9 +16,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
@@ -50,7 +48,9 @@ object JvmBackendFacade {
extensions = extensions
)
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files, irProviders = irProviders)
doGenerateFilesInternal(state, irModuleFragment, psi2irContext.symbolTable, psi2irContext.sourceManager, phaseConfig, extensions)
doGenerateFilesInternal(
state, irModuleFragment, psi2irContext.symbolTable, psi2irContext.sourceManager, phaseConfig, irProviders, extensions
)
}
internal fun doGenerateFilesInternal(
@@ -59,11 +59,15 @@ object JvmBackendFacade {
symbolTable: SymbolTable,
sourceManager: PsiSourceManager,
phaseConfig: PhaseConfig,
irProviders: List<IrProvider>,
extensions: JvmGeneratorExtensions
) {
val context = JvmBackendContext(
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions.classNameOverride
)
/* JvmBackendContext creates new unbound symbols, have to resolve them. */
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
state.irBasedMapAsmMethod = { descriptor ->
context.methodSignatureMapper.mapAsmMethod(context.referenceFunction(descriptor).owner)
}
@@ -45,7 +45,9 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory
irModuleFragment.descriptor, irModuleFragment.irBuiltins, symbolTable, extensions = extensions
)
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
JvmBackendFacade.doGenerateFilesInternal(state, irModuleFragment, symbolTable, sourceManager, phaseConfig, extensions)
JvmBackendFacade.doGenerateFilesInternal(
state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions
)
}
override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName): PackageCodegen {