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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user