[IR] Add a method to get ModuleDescriptor from IrPackageFragment
Ideally, instead of this method, there should be a link to IrModuleFragment. Unfortunately, it would require to big refactoring, as some of IrPackageFragment implementations doesn't have any IrModuleFragment inside, and are not located inside any IrModuleFragment. So for now, we just implement and use everywhere a single way of getting the module descriptor, which respects a IrModuleFragment link if it exists, and fallbacks to descriptor-based method if it doesn't. ^KT-62623
This commit is contained in:
committed by
Space Team
parent
9b9ddb760a
commit
ad5831acc6
+1
-1
@@ -90,7 +90,7 @@ val IrPackageFragment.konanLibrary: KotlinLibrary?
|
||||
val moduleDescriptor = fileMetadata?.descriptors?.singleOrNull() as? ModuleDescriptor
|
||||
moduleDescriptor?.konanLibrary?.let { return it }
|
||||
}
|
||||
return this.packageFragmentDescriptor.containingDeclaration.konanLibrary
|
||||
return this.moduleDescriptor.konanLibrary
|
||||
}
|
||||
// Any changes made to konanLibrary here should be ported to the containsDeclaration
|
||||
// function in LlvmModuleSpecificationBase in LlvmModuleSpecificationImpl.kt
|
||||
|
||||
+4
-8
@@ -7,20 +7,17 @@ package org.jetbrains.kotlin.backend.konan.llvm
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isExpectMember
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
|
||||
import org.jetbrains.kotlin.library.metadata.CompiledKlibModuleOrigin
|
||||
import org.jetbrains.kotlin.library.metadata.SyntheticModulesOrigin
|
||||
import org.jetbrains.kotlin.library.metadata.klibModuleOrigin
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
|
||||
internal val DeclarationDescriptor.llvmSymbolOrigin: CompiledKlibModuleOrigin
|
||||
private val ModuleDescriptor.llvmSymbolOrigin: CompiledKlibModuleOrigin
|
||||
get() {
|
||||
assert(!this.isExpectMember) { this }
|
||||
|
||||
val module = this.module
|
||||
val moduleOrigin = module.klibModuleOrigin
|
||||
val moduleOrigin = klibModuleOrigin
|
||||
when (moduleOrigin) {
|
||||
is CompiledKlibModuleOrigin -> return moduleOrigin
|
||||
SyntheticModulesOrigin -> error("Declaration is synthetic and can't be an origin of LLVM symbol:\n${this}")
|
||||
@@ -29,6 +26,5 @@ internal val DeclarationDescriptor.llvmSymbolOrigin: CompiledKlibModuleOrigin
|
||||
|
||||
internal val Context.standardLlvmSymbolsOrigin: CompiledKlibModuleOrigin get() = this.stdlibModule.llvmSymbolOrigin
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
internal val IrPackageFragment.llvmSymbolOrigin
|
||||
get() = packageFragmentDescriptor.llvmSymbolOrigin
|
||||
get() = moduleDescriptor.llvmSymbolOrigin
|
||||
+1
-2
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.konan.target.supportsCodeCoverage
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
|
||||
/**
|
||||
* "Umbrella" class of all the of the code coverage related logic.
|
||||
@@ -75,7 +74,7 @@ internal class CoverageManager(val generationState: NativeGenerationState) {
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
private fun fileCoverageFilter(file: IrFile) =
|
||||
file.packageFragmentDescriptor.module in coveredModules
|
||||
file.moduleDescriptor in coveredModules
|
||||
|
||||
/**
|
||||
* Walk [irModuleFragment] subtree and collect [FileRegionInfo] for files that are part of [coveredModules].
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ private abstract class BaseInteropIrTransformer(
|
||||
builder.getCompilerMessageLocation()
|
||||
}
|
||||
|
||||
val uniqueModuleName = irFile.packageFragmentDescriptor.module.name.asString()
|
||||
val uniqueModuleName = irFile.moduleDescriptor.name.asString()
|
||||
.let { it.substring(1, it.lastIndex) }
|
||||
val uniqueFileName = irFile.fileEntry.name
|
||||
val uniquePrefix = buildString {
|
||||
|
||||
+1
-5
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.common.reportWarning
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isAbstract
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
|
||||
import org.jetbrains.kotlin.backend.konan.getIncludedLibraryDescriptors
|
||||
import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation
|
||||
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
@@ -19,10 +18,8 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
|
||||
@@ -679,8 +676,7 @@ internal class TestProcessor (val context: Context) {
|
||||
}
|
||||
// endregion
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
private fun shouldProcessFile(irFile: IrFile): Boolean = irFile.packageFragmentDescriptor.module.let {
|
||||
private fun shouldProcessFile(irFile: IrFile): Boolean = irFile.moduleDescriptor.let {
|
||||
// Process test annotations in source libraries too.
|
||||
it in context.sourcesModules
|
||||
}
|
||||
|
||||
+2
-2
@@ -332,7 +332,7 @@ internal class KonanIrLinker(
|
||||
|
||||
fun getCachedDeclarationModuleDeserializer(declaration: IrDeclaration): KonanPartialModuleDeserializer? {
|
||||
val packageFragment = declaration.getPackageFragment()
|
||||
val moduleDescriptor = packageFragment.packageFragmentDescriptor.containingDeclaration
|
||||
val moduleDescriptor = packageFragment.moduleDescriptor
|
||||
val klib = packageFragment.konanLibrary
|
||||
val declarationBeingCached = packageFragment is IrFile && klib != null && libraryBeingCached?.klib == klib
|
||||
&& libraryBeingCached.strategy.contains(packageFragment.path)
|
||||
@@ -394,7 +394,7 @@ internal class KonanIrLinker(
|
||||
is IrFile -> packageFragment.path
|
||||
|
||||
is IrExternalPackageFragment -> {
|
||||
val moduleDescriptor = packageFragment.packageFragmentDescriptor.containingDeclaration
|
||||
val moduleDescriptor = packageFragment.moduleDescriptor
|
||||
val moduleDeserializer = moduleDeserializers[moduleDescriptor] ?: error("No module deserializer for $moduleDescriptor")
|
||||
moduleDeserializer.getFileNameOf(declaration)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user