[Native] Simplify *.isNativeStdlib() checks as much as possible

...still preserving their reliability.
This commit is contained in:
Dmitriy Dolovov
2023-11-09 16:03:23 +01:00
committed by Space Team
parent 6a0a64eb6d
commit 4892a81178
5 changed files with 22 additions and 41 deletions
@@ -9,10 +9,8 @@ import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
import org.jetbrains.kotlin.backend.konan.llvm.*
import org.jetbrains.kotlin.backend.konan.llvm.objc.patchObjCRuntimeModule
import org.jetbrains.kotlin.konan.file.isBitcode
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.library.BaseKotlinLibrary
import org.jetbrains.kotlin.library.uniqueName
import org.jetbrains.kotlin.library.isNativeStdlib
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
import java.io.File
@@ -64,10 +62,6 @@ internal fun produceCStubs(generationState: NativeGenerationState) {
}
}
private val BaseKotlinLibrary.isStdlib: Boolean
get() = uniqueName == KONAN_STDLIB_NAME
private data class LlvmModules(
val runtimeModules: List<LLVMModuleRef>,
val additionalModules: List<LLVMModuleRef>
@@ -82,7 +76,7 @@ private fun collectLlvmModules(generationState: NativeGenerationState, generated
val config = generationState.config
val (bitcodePartOfStdlib, bitcodeLibraries) = generationState.dependenciesTracker.bitcodeToLink
.partition { it.isStdlib && generationState.producedLlvmModuleContainsStdlib }
.partition { it.isNativeStdlib && generationState.producedLlvmModuleContainsStdlib }
.toList()
.map { libraries ->
libraries.flatMap { it.bitcodePaths }.filter { it.isBitcode }
@@ -42,9 +42,8 @@ import org.jetbrains.kotlin.ir.objcinterop.IrObjCOverridabilityCondition
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.library.isNativeStdlib
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
import org.jetbrains.kotlin.library.uniqueName
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -150,7 +149,7 @@ internal fun PhaseContext.fir2Ir(
usedPackages.any { !module.packageFragmentProviderForModuleContentWithoutDependencies.isEmpty(it) }
}.map { it.second }.toSet()
resolvedLibraries.find { it.library.uniqueName == KONAN_STDLIB_NAME }?.let {
resolvedLibraries.find { it.library.isNativeStdlib }?.let {
require(usedLibraries.contains(it)) {
"Internal error: stdlib must be in usedLibraries, if it's in resolvedLibraries"
}
@@ -448,7 +448,7 @@ internal fun createNamerConfiguration(configuration: ObjCExportLazy.Configuratio
override val topLevelNamePrefix = abbreviate(configuration.frameworkName)
override fun getAdditionalPrefix(module: ModuleDescriptor): String? {
if (module.isStdlib()) return "Kotlin"
if (module.isNativeStdlib() || module.isCommonStdlibCheckSpecificallyForIDE()) return "Kotlin"
// Note: incorrect for compiler since it doesn't store ModuleInfo to ModuleDescriptor.
val moduleInfo = module.getCapability(ModuleInfo.Capability) ?: return null
@@ -463,15 +463,11 @@ internal fun createNamerConfiguration(configuration: ObjCExportLazy.Configuratio
}
}
// TODO: find proper solution.
private fun ModuleDescriptor.isStdlib(): Boolean =
this.builtIns == this || this.isCommonStdlib() || this.isNativeStdlib()
private val kotlinSequenceClassId = ClassId.topLevel(FqName("kotlin.sequences.Sequence"))
private fun ModuleDescriptor.isCommonStdlib() =
this.findClassAcrossModuleDependencies(kotlinSequenceClassId)?.module == this
// This is a special workaround needed for resolve in the IDE.
private fun ModuleDescriptor.isCommonStdlibCheckSpecificallyForIDE() =
findClassAcrossModuleDependencies(kotlinSequenceClassId)?.module == this
private val KtModifierListOwner.isPublic: Boolean
get() = this.visibilityModifierTypeOrDefault() == KtTokens.PUBLIC_KEYWORD