A bit of infrastructure for the klib pretty printer.
This commit is contained in:
committed by
alexander-gorshenev
parent
9e8ca0fa8d
commit
a23c64012b
+3
-3
@@ -50,15 +50,15 @@ abstract open class FileBasedLibraryReader(
|
||||
override val moduleName: String
|
||||
get() = namedModuleData.name
|
||||
|
||||
protected val tableOfContentsAsString : String
|
||||
val tableOfContents : Base64
|
||||
get() = namedModuleData.base64
|
||||
|
||||
protected fun packageMetadata(fqName: String): Base64 =
|
||||
fun packageMetadata(fqName: String): Base64 =
|
||||
reader.loadSerializedPackageFragment(fqName)
|
||||
|
||||
override fun moduleDescriptor(specifics: LanguageVersionSettings)
|
||||
= deserializeModule(specifics, {packageMetadata(it)},
|
||||
tableOfContentsAsString, moduleName)
|
||||
tableOfContents, moduleName)
|
||||
}
|
||||
|
||||
// This scheme describes the Konan Library (klib) layout.
|
||||
|
||||
+2
-2
@@ -45,8 +45,8 @@ override fun loadSerializedModule(currentAbiVersion: Int): NamedModuleData {
|
||||
throw Error("Expected ABI version ${currentAbiVersion}, but the binary is ${abiVersion}")
|
||||
}
|
||||
val moduleName = string(nameNode)
|
||||
val tableOfContentsAsString = string(dataNode)
|
||||
return NamedModuleData(moduleName, tableOfContentsAsString)
|
||||
val tableOfContents = string(dataNode)
|
||||
return NamedModuleData(moduleName, tableOfContents)
|
||||
}
|
||||
|
||||
override fun loadSerializedPackageFragment(fqName: String): String {
|
||||
|
||||
+10
-9
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData.*
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
@@ -123,11 +124,13 @@ fun createKonanPackageFragmentProvider(
|
||||
return provider
|
||||
}
|
||||
|
||||
internal fun deserializePackageFragment(base64: Base64): KonanLinkData.PackageFragment {
|
||||
return KonanLinkData.PackageFragment
|
||||
.parseFrom(base64ToStream(base64),
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
}
|
||||
public fun parsePackageFragment(base64: Base64): PackageFragment =
|
||||
PackageFragment.parseFrom(base64ToStream(base64),
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
|
||||
public fun parseModuleHeader(base64: Base64): Library =
|
||||
Library.parseFrom(base64ToStream(base64),
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
|
||||
internal fun deserializeModule(languageVersionSettings: LanguageVersionSettings,
|
||||
packageLoader:(String)->Base64, library: Base64, moduleName: String): ModuleDescriptorImpl {
|
||||
@@ -139,13 +142,11 @@ internal fun deserializeModule(languageVersionSettings: LanguageVersionSettings,
|
||||
builtIns.builtInsModule = moduleDescriptor
|
||||
val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||
|
||||
val libraryProto = KonanLinkData.Library
|
||||
.parseFrom(base64ToStream(library),
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
val libraryProto = parseModuleHeader(library)
|
||||
|
||||
val provider = createKonanPackageFragmentProvider(
|
||||
libraryProto.packageFragmentNameList,
|
||||
{it -> deserializePackageFragment(packageLoader(it))},
|
||||
{it -> parsePackageFragment(packageLoader(it))},
|
||||
storageManager,
|
||||
moduleDescriptor, deserializationConfiguration)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user