[IR] Distinguish IrModuleDeserializers with and w/o underlying KLIBs
Fixes #KT-50591
This commit is contained in:
+2
@@ -151,6 +151,8 @@ abstract class BasicIrModuleDeserializer(
|
|||||||
|
|
||||||
return fileDeserializer.symbolDeserializer.signatureDeserializer
|
return fileDeserializer.symbolDeserializer.signatureDeserializer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val origin get() = IrModuleOrigin.DESERIALIZED
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) {
|
private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) {
|
||||||
|
|||||||
+2
-2
@@ -162,8 +162,8 @@ class CurrentModuleWithICDeserializer(
|
|||||||
get() = delegate.moduleFragment
|
get() = delegate.moduleFragment
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer>
|
override val moduleDependencies: Collection<IrModuleDeserializer>
|
||||||
get() = delegate.moduleDependencies
|
get() = delegate.moduleDependencies
|
||||||
override val isCurrent: Boolean
|
override val origin: IrModuleOrigin
|
||||||
get() = delegate.isCurrent
|
get() = delegate.origin
|
||||||
|
|
||||||
override fun fileDeserializers(): Collection<IrFileDeserializer> {
|
override fun fileDeserializers(): Collection<IrFileDeserializer> {
|
||||||
return delegate.fileDeserializers()
|
return delegate.fileDeserializers()
|
||||||
|
|||||||
+7
-3
@@ -51,6 +51,10 @@ class CompatibilityMode(val abiVersion: KotlinAbiVersion) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class IrModuleOrigin {
|
||||||
|
CURRENT, DESERIALIZED, SYNTHETIC
|
||||||
|
}
|
||||||
|
|
||||||
abstract class IrModuleDeserializer(private val _moduleDescriptor: ModuleDescriptor?, val libraryAbiVersion: KotlinAbiVersion) {
|
abstract class IrModuleDeserializer(private val _moduleDescriptor: ModuleDescriptor?, val libraryAbiVersion: KotlinAbiVersion) {
|
||||||
abstract operator fun contains(idSig: IdSignature): Boolean
|
abstract operator fun contains(idSig: IdSignature): Boolean
|
||||||
abstract fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol
|
abstract fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol
|
||||||
@@ -90,7 +94,7 @@ abstract class IrModuleDeserializer(private val _moduleDescriptor: ModuleDescrip
|
|||||||
|
|
||||||
open val strategyResolver: (String) -> DeserializationStrategy = { DeserializationStrategy.ONLY_DECLARATION_HEADERS }
|
open val strategyResolver: (String) -> DeserializationStrategy = { DeserializationStrategy.ONLY_DECLARATION_HEADERS }
|
||||||
|
|
||||||
open val isCurrent = false
|
abstract val origin: IrModuleOrigin
|
||||||
|
|
||||||
open fun fileDeserializers(): Collection<IrFileDeserializer> = error("Unsupported")
|
open fun fileDeserializers(): Collection<IrFileDeserializer> = error("Unsupported")
|
||||||
|
|
||||||
@@ -227,7 +231,7 @@ class IrModuleDeserializerWithBuiltIns(
|
|||||||
|
|
||||||
override val moduleFragment: IrModuleFragment get() = delegate.moduleFragment
|
override val moduleFragment: IrModuleFragment get() = delegate.moduleFragment
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer> get() = delegate.moduleDependencies
|
override val moduleDependencies: Collection<IrModuleDeserializer> get() = delegate.moduleDependencies
|
||||||
override val isCurrent get() = delegate.isCurrent
|
override val origin get() = delegate.origin
|
||||||
|
|
||||||
override fun fileDeserializers(): Collection<IrFileDeserializer> {
|
override fun fileDeserializers(): Collection<IrFileDeserializer> {
|
||||||
return delegate.fileDeserializers()
|
return delegate.fileDeserializers()
|
||||||
@@ -254,5 +258,5 @@ open class CurrentModuleDeserializer(
|
|||||||
|
|
||||||
override fun declareIrSymbol(symbol: IrSymbol) {}
|
override fun declareIrSymbol(symbol: IrSymbol) {}
|
||||||
|
|
||||||
override val isCurrent = true
|
override val origin get() = IrModuleOrigin.CURRENT
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -75,6 +75,8 @@ abstract class KotlinIrLinker(
|
|||||||
override val moduleFragment: IrModuleFragment
|
override val moduleFragment: IrModuleFragment
|
||||||
get() = TODO("Not yet implemented")
|
get() = TODO("Not yet implemented")
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer> get() = emptyList()
|
override val moduleDependencies: Collection<IrModuleDeserializer> get() = emptyList()
|
||||||
|
override val origin: IrModuleOrigin
|
||||||
|
get() = TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw SignatureIdNotFoundInModuleWithDependencies(
|
throw SignatureIdNotFoundInModuleWithDependencies(
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.common.serialization.linkerissues
|
package org.jetbrains.kotlin.backend.common.serialization.linkerissues
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.IrModuleDeserializer
|
import org.jetbrains.kotlin.backend.common.serialization.IrModuleDeserializer
|
||||||
|
import org.jetbrains.kotlin.backend.common.serialization.IrModuleOrigin
|
||||||
import org.jetbrains.kotlin.konan.file.File
|
import org.jetbrains.kotlin.konan.file.File
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
import org.jetbrains.kotlin.library.uniqueName
|
import org.jetbrains.kotlin.library.uniqueName
|
||||||
@@ -199,7 +200,7 @@ open class UserVisibleIrModulesSupport(externalDependenciesLoader: ExternalDepen
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected val IrModuleDeserializer.kotlinLibrary: KotlinLibrary?
|
protected val IrModuleDeserializer.kotlinLibrary: KotlinLibrary?
|
||||||
get() = klib as? KotlinLibrary
|
get() = if (origin == IrModuleOrigin.DESERIALIZED) klib as? KotlinLibrary else null
|
||||||
|
|
||||||
val moduleIdComparator: Comparator<ResolvedDependencyId> = Comparator { a, b ->
|
val moduleIdComparator: Comparator<ResolvedDependencyId> = Comparator { a, b ->
|
||||||
when {
|
when {
|
||||||
|
|||||||
+1
@@ -163,5 +163,6 @@ class JvmIrLinker(
|
|||||||
override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns, emptyList())
|
override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns, emptyList())
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer> = dependencies
|
override val moduleDependencies: Collection<IrModuleDeserializer> = dependencies
|
||||||
|
|
||||||
|
override val origin get() = IrModuleOrigin.SYNTHETIC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -610,6 +610,8 @@ internal class KonanIrLinker(
|
|||||||
|
|
||||||
override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns)
|
override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns)
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer> = listOfNotNull(forwardDeclarationDeserializer)
|
override val moduleDependencies: Collection<IrModuleDeserializer> = listOfNotNull(forwardDeclarationDeserializer)
|
||||||
|
|
||||||
|
override val origin get() = IrModuleOrigin.DESERIALIZED
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class KonanCachedLibraryModuleDeserializer(
|
inner class KonanCachedLibraryModuleDeserializer(
|
||||||
@@ -842,6 +844,8 @@ internal class KonanIrLinker(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val origin get() = IrModuleOrigin.DESERIALIZED
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class KonanForwardDeclarationModuleDeserializer(moduleDescriptor: ModuleDescriptor) : IrModuleDeserializer(moduleDescriptor, KotlinAbiVersion.CURRENT) {
|
private inner class KonanForwardDeclarationModuleDeserializer(moduleDescriptor: ModuleDescriptor) : IrModuleDeserializer(moduleDescriptor, KotlinAbiVersion.CURRENT) {
|
||||||
@@ -892,6 +896,8 @@ internal class KonanIrLinker(
|
|||||||
|
|
||||||
override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns)
|
override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns)
|
||||||
override val moduleDependencies: Collection<IrModuleDeserializer> = emptyList()
|
override val moduleDependencies: Collection<IrModuleDeserializer> = emptyList()
|
||||||
|
|
||||||
|
override val origin get() = IrModuleOrigin.SYNTHETIC
|
||||||
}
|
}
|
||||||
|
|
||||||
private val String.isForwardDeclarationModuleName: Boolean get() = this == "<forward declarations>"
|
private val String.isForwardDeclarationModuleName: Boolean get() = this == "<forward declarations>"
|
||||||
|
|||||||
Reference in New Issue
Block a user