Serialize native klib extensions to pass most ObjCExport and CInterop tests.

Merge-request: KT-MR-8398
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2023-01-23 11:34:47 +00:00
committed by Space Team
parent 576e8ba127
commit 195ecbac2e
5 changed files with 130 additions and 8 deletions
@@ -58,6 +58,8 @@ import org.jetbrains.kotlin.fir.pipeline.runCheckers
import org.jetbrains.kotlin.fir.pipeline.runResolution
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
import org.jetbrains.kotlin.fir.session.FirJsSessionFactory
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
@@ -631,7 +633,12 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
jsOutputName = null
) { file ->
val firFile = firFilesBySourceFile[file] ?: error("cannot find FIR file by source file ${file.name} (${file.path})")
serializeSingleFirFile(firFile, session, scopeSession, metadataVersion)
serializeSingleFirFile(
firFile,
session,
scopeSession,
FirKLibSerializerExtension(session, metadataVersion, FirElementAwareSerializableStringTable())
)
}
}
@@ -17,8 +17,7 @@ import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.SerializableStringTable
fun serializeSingleFirFile(file: FirFile, session: FirSession, scopeSession: ScopeSession, metadataVersion: BinaryVersion): ProtoBuf.PackageFragment {
val serializerExtension = FirKLibSerializerExtension(session, metadataVersion, FirElementAwareSerializableStringTable())
fun serializeSingleFirFile(file: FirFile, session: FirSession, scopeSession: ScopeSession, serializerExtension: FirKLibSerializerExtension): ProtoBuf.PackageFragment {
val approximator = TypeApproximatorForMetadataSerializer(session)
val packageSerializer = FirElementSerializer.createTopLevel(session, scopeSession, serializerExtension, approximator)
@@ -51,7 +50,7 @@ fun serializeSingleFirFile(file: FirFile, session: FirSession, scopeSession: Sco
)
}
class FirKLibSerializerExtension(
open class FirKLibSerializerExtension(
override val session: FirSession,
override val metadataVersion: BinaryVersion,
override val stringTable: FirElementAwareSerializableStringTable
@@ -29,6 +29,8 @@ import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.ir.backend.js.JsFactories
@@ -90,7 +92,12 @@ class Fir2IrJsResultsConverter(
hasErrors,
) { file ->
val firFile = firFilesBySourceFile[file] ?: error("cannot find FIR file by source file ${file.name} (${file.path})")
serializeSingleFirFile(firFile, components.session, components.scopeSession, metadataVersion)
serializeSingleFirFile(
firFile,
components.session,
components.scopeSession,
FirKLibSerializerExtension(components.session, metadataVersion, FirElementAwareSerializableStringTable())
)
}
}
}