[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
+10
-19
@@ -16,18 +16,14 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
import org.jetbrains.kotlin.library.metadata.*
|
||||
import org.jetbrains.kotlin.library.hasDependencies
|
||||
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.parentOrNull
|
||||
import org.jetbrains.kotlin.library.isNativeStdlib
|
||||
import org.jetbrains.kotlin.name.*
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.sam.SamConversionResolverImpl
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
|
||||
private val ModuleDescriptorImpl.isStdlibModule
|
||||
get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library?.let { !it.hasDependencies } ?: false
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||
|
||||
class KlibMetadataModuleDescriptorFactoryImpl(
|
||||
override val descriptorFactory: KlibModuleDescriptorFactory,
|
||||
@@ -49,27 +45,22 @@ class KlibMetadataModuleDescriptorFactoryImpl(
|
||||
val moduleName = Name.special(libraryProto.moduleName)
|
||||
val moduleOrigin = DeserializedKlibModuleOrigin(library)
|
||||
|
||||
val moduleDescriptor = if (builtIns != null )
|
||||
val moduleDescriptor = if (builtIns != null)
|
||||
descriptorFactory.createDescriptor(moduleName, storageManager, builtIns, moduleOrigin)
|
||||
else
|
||||
descriptorFactory.createDescriptorAndNewBuiltIns(moduleName, storageManager, moduleOrigin)
|
||||
|
||||
val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||
|
||||
val compositePackageFragmentAddend =
|
||||
if (moduleDescriptor.isStdlibModule) {
|
||||
functionInterfacePackageFragmentProvider(storageManager, moduleDescriptor)
|
||||
} else null
|
||||
|
||||
val provider = createPackageFragmentProvider(
|
||||
library,
|
||||
packageAccessHandler,
|
||||
libraryProto.packageFragmentNameList,
|
||||
packageFragmentNames = libraryProto.packageFragmentNameList,
|
||||
storageManager,
|
||||
moduleDescriptor,
|
||||
deserializationConfiguration,
|
||||
compositePackageFragmentAddend,
|
||||
lookupTracker
|
||||
configuration = CompilerDeserializationConfiguration(languageVersionSettings),
|
||||
compositePackageFragmentAddend = runIf(library.isNativeStdlib) {
|
||||
functionInterfacePackageFragmentProvider(storageManager, moduleDescriptor)
|
||||
},
|
||||
lookupTracker = lookupTracker
|
||||
)
|
||||
|
||||
moduleDescriptor.initialize(provider)
|
||||
|
||||
+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
|
||||
|
||||
@@ -12,8 +12,9 @@ import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
|
||||
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
val NATIVE_STDLIB_MODULE_NAME = Name.special("<$KONAN_STDLIB_NAME>")
|
||||
val NATIVE_STDLIB_MODULE_NAME: Name = Name.special("<$KONAN_STDLIB_NAME>")
|
||||
|
||||
fun ModuleDescriptor.isNativeStdlib() = name == NATIVE_STDLIB_MODULE_NAME
|
||||
fun ClassDescriptor.getForwardDeclarationKindOrNull() =
|
||||
fun ModuleDescriptor.isNativeStdlib(): Boolean = name == NATIVE_STDLIB_MODULE_NAME
|
||||
|
||||
fun ClassDescriptor.getForwardDeclarationKindOrNull(): NativeForwardDeclarationKind? =
|
||||
NativeForwardDeclarationKind.packageFqNameToKind[(containingDeclaration as? PackageFragmentDescriptor)?.fqName]
|
||||
Reference in New Issue
Block a user