[Native] Simplify *.isNativeStdlib() checks as much as possible
...still preserving their reliability.
This commit is contained in:
committed by
Space Team
parent
6a0a64eb6d
commit
4892a81178
+2
-8
@@ -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 }
|
||||
|
||||
+2
-3
@@ -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"
|
||||
}
|
||||
|
||||
+4
-8
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user