[KLIB tool] Fail with an adequate error message on IR-less KLIBs
^KT-62341
This commit is contained in:
committed by
Space Team
parent
f276fe6506
commit
8ca62ad656
@@ -255,20 +255,24 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
|
|||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
fun ir(output: Appendable, printSignatures: Boolean) {
|
fun ir(output: Appendable, printSignatures: Boolean) {
|
||||||
val module = loadModule()
|
val module = loadModule()
|
||||||
if (module.kotlinLibrary.isInterop) error("Deserializing IR from IR-less libraries is not supported yet")
|
val library = module.kotlinLibrary
|
||||||
|
checkLibraryHasIr(library)
|
||||||
|
|
||||||
val versionSpec = LanguageVersionSettingsImpl(currentLanguageVersion, currentApiVersion)
|
val versionSpec = LanguageVersionSettingsImpl(currentLanguageVersion, currentApiVersion)
|
||||||
val idSignaturer = KonanIdSignaturer(KonanManglerDesc)
|
val idSignaturer = KonanIdSignaturer(KonanManglerDesc)
|
||||||
val symbolTable = SymbolTable(idSignaturer, IrFactoryImpl)
|
val symbolTable = SymbolTable(idSignaturer, IrFactoryImpl)
|
||||||
val typeTranslator = TypeTranslatorImpl(symbolTable, versionSpec, module)
|
val typeTranslator = TypeTranslatorImpl(symbolTable, versionSpec, module)
|
||||||
val irBuiltIns = IrBuiltInsOverDescriptors(module.builtIns, typeTranslator, symbolTable)
|
val irBuiltIns = IrBuiltInsOverDescriptors(module.builtIns, typeTranslator, symbolTable)
|
||||||
|
|
||||||
val linker = KlibToolLinker(module, irBuiltIns, symbolTable)
|
val linker = KlibToolLinker(module, irBuiltIns, symbolTable)
|
||||||
module.allDependencyModules.forEach {
|
module.allDependencyModules.forEach {
|
||||||
linker.deserializeOnlyHeaderModule(it, it.kotlinLibrary)
|
linker.deserializeOnlyHeaderModule(it, it.kotlinLibrary)
|
||||||
linker.resolveModuleDeserializer(it, null).init()
|
linker.resolveModuleDeserializer(it, null).init()
|
||||||
}
|
}
|
||||||
val irFragment = linker.deserializeFullModule(module, module.kotlinLibrary)
|
val irFragment = linker.deserializeFullModule(module, library)
|
||||||
linker.resolveModuleDeserializer(module, null).init()
|
linker.resolveModuleDeserializer(module, null).init()
|
||||||
linker.modulesWithReachableTopLevels.forEach(IrModuleDeserializer::deserializeReachableDeclarations)
|
linker.modulesWithReachableTopLevels.forEach(IrModuleDeserializer::deserializeReachableDeclarations)
|
||||||
|
|
||||||
output.append(irFragment.dump(DumpIrTreeOptions(printSignatures = printSignatures)))
|
output.append(irFragment.dump(DumpIrTreeOptions(printSignatures = printSignatures)))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,12 +295,17 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
|
|||||||
|
|
||||||
fun dumpIrSignatures(output: Appendable, signatureVersion: KotlinIrSignatureVersion?) {
|
fun dumpIrSignatures(output: Appendable, signatureVersion: KotlinIrSignatureVersion?) {
|
||||||
val library = libraryInCurrentDir(libraryNameOrPath)
|
val library = libraryInCurrentDir(libraryNameOrPath)
|
||||||
|
checkLibraryHasIr(library)
|
||||||
signatureVersion?.checkSupportedInLibrary(library)
|
signatureVersion?.checkSupportedInLibrary(library)
|
||||||
|
|
||||||
val signatures = IrSignaturesExtractor(library).extract()
|
val signatures = IrSignaturesExtractor(library).extract()
|
||||||
IrSignaturesRenderer(output, signatureVersion).render(signatures)
|
IrSignaturesRenderer(output, signatureVersion).render(signatures)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun checkLibraryHasIr(library: KotlinLibrary) {
|
||||||
|
if (!library.hasIr) error("Library ${library.libraryFile} is an IR-less library.")
|
||||||
|
}
|
||||||
|
|
||||||
private fun KotlinIrSignatureVersion.checkSupportedInLibrary(library: KotlinLibrary) {
|
private fun KotlinIrSignatureVersion.checkSupportedInLibrary(library: KotlinLibrary) {
|
||||||
val supportedSignatureVersions = library.versions.irSignatureVersions
|
val supportedSignatureVersions = library.versions.irSignatureVersions
|
||||||
if (this !in supportedSignatureVersions)
|
if (this !in supportedSignatureVersions)
|
||||||
|
|||||||
Reference in New Issue
Block a user