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.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
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.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -66,7 +65,7 @@ class JvmBackendContext(
|
|||||||
|
|
||||||
override val ir = JvmIr(irModuleFragment, this.symbolTable)
|
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>()
|
private val localClassType = mutableMapOf<IrAttributeContainer, Type>()
|
||||||
|
|
||||||
@@ -115,16 +114,16 @@ class JvmBackendContext(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol =
|
internal fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol =
|
||||||
symbolTable.referenceClass(descriptor)
|
symbolTable.lazyWrapper.referenceClass(descriptor)
|
||||||
|
|
||||||
internal fun referenceTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameterSymbol =
|
internal fun referenceTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameterSymbol =
|
||||||
symbolTable.referenceTypeParameter(descriptor)
|
symbolTable.lazyWrapper.referenceTypeParameter(descriptor)
|
||||||
|
|
||||||
internal fun referenceFunction(descriptor: FunctionDescriptor): IrFunctionSymbol =
|
internal fun referenceFunction(descriptor: FunctionDescriptor): IrFunctionSymbol =
|
||||||
if (descriptor is ClassConstructorDescriptor)
|
if (descriptor is ClassConstructorDescriptor)
|
||||||
symbolTable.referenceConstructor(descriptor)
|
symbolTable.lazyWrapper.referenceConstructor(descriptor)
|
||||||
else
|
else
|
||||||
symbolTable.referenceSimpleFunction(descriptor)
|
symbolTable.lazyWrapper.referenceSimpleFunction(descriptor)
|
||||||
|
|
||||||
override fun log(message: () -> String) {
|
override fun log(message: () -> String) {
|
||||||
/*TODO*/
|
/*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.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.types.defaultType
|
import org.jetbrains.kotlin.ir.types.defaultType
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList
|
|
||||||
import org.jetbrains.kotlin.ir.util.render
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
||||||
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
||||||
@@ -50,7 +48,9 @@ object JvmBackendFacade {
|
|||||||
extensions = extensions
|
extensions = extensions
|
||||||
)
|
)
|
||||||
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files, irProviders = irProviders)
|
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(
|
internal fun doGenerateFilesInternal(
|
||||||
@@ -59,11 +59,15 @@ object JvmBackendFacade {
|
|||||||
symbolTable: SymbolTable,
|
symbolTable: SymbolTable,
|
||||||
sourceManager: PsiSourceManager,
|
sourceManager: PsiSourceManager,
|
||||||
phaseConfig: PhaseConfig,
|
phaseConfig: PhaseConfig,
|
||||||
|
irProviders: List<IrProvider>,
|
||||||
extensions: JvmGeneratorExtensions
|
extensions: JvmGeneratorExtensions
|
||||||
) {
|
) {
|
||||||
val context = JvmBackendContext(
|
val context = JvmBackendContext(
|
||||||
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions.classNameOverride
|
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 ->
|
state.irBasedMapAsmMethod = { descriptor ->
|
||||||
context.methodSignatureMapper.mapAsmMethod(context.referenceFunction(descriptor).owner)
|
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
|
irModuleFragment.descriptor, irModuleFragment.irBuiltins, symbolTable, extensions = extensions
|
||||||
)
|
)
|
||||||
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()
|
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 {
|
override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName): PackageCodegen {
|
||||||
|
|||||||
Reference in New Issue
Block a user