Introduced -Xdeserialize-fake-overrides
(cherry picked from commit 941a2e7ba6451bac9812a7a010c6cf8abe1943c9)
This commit is contained in:
committed by
Vasily Levchenko
parent
92722a480e
commit
ecf27d4dc2
+5
-1
@@ -169,6 +169,9 @@ internal val psiToIrPhase = konanUnitPhase(
|
|||||||
|
|
||||||
val irProviderForCEnumsAndCStructs =
|
val irProviderForCEnumsAndCStructs =
|
||||||
IrProviderForCEnumAndCStructStubs(generatorContext, interopBuiltIns, symbols)
|
IrProviderForCEnumAndCStructStubs(generatorContext, interopBuiltIns, symbols)
|
||||||
|
|
||||||
|
val deserializeFakeOverrides = config.configuration.getBoolean(CommonConfigurationKeys.DESERIALIZE_FAKE_OVERRIDES)
|
||||||
|
|
||||||
val linker =
|
val linker =
|
||||||
KonanIrLinker(
|
KonanIrLinker(
|
||||||
moduleDescriptor,
|
moduleDescriptor,
|
||||||
@@ -179,7 +182,8 @@ internal val psiToIrPhase = konanUnitPhase(
|
|||||||
forwardDeclarationsModuleDescriptor,
|
forwardDeclarationsModuleDescriptor,
|
||||||
stubGenerator,
|
stubGenerator,
|
||||||
irProviderForCEnumsAndCStructs,
|
irProviderForCEnumsAndCStructs,
|
||||||
exportedDependencies
|
exportedDependencies,
|
||||||
|
deserializeFakeOverrides
|
||||||
)
|
)
|
||||||
|
|
||||||
translator.addPostprocessingStep { module ->
|
translator.addPostprocessingStep { module ->
|
||||||
|
|||||||
+20
-6
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.konan.serialization
|
package org.jetbrains.kotlin.backend.konan.serialization
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.LoggingContext
|
import org.jetbrains.kotlin.backend.common.LoggingContext
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilderImpl
|
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.PlatformFakeOverrideClassFilter
|
import org.jetbrains.kotlin.backend.common.overrides.PlatformFakeOverrideClassFilter
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.*
|
import org.jetbrains.kotlin.backend.common.serialization.*
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData
|
import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData
|
||||||
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSe
|
|||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isInteropLibrary
|
import org.jetbrains.kotlin.backend.konan.descriptors.isInteropLibrary
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.konanLibrary
|
import org.jetbrains.kotlin.backend.konan.descriptors.konanLibrary
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs
|
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs
|
||||||
import org.jetbrains.kotlin.backend.konan.isObjCClass
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
|
import org.jetbrains.kotlin.descriptors.konan.isNativeStdlib
|
||||||
import org.jetbrains.kotlin.descriptors.konan.kotlinLibrary
|
import org.jetbrains.kotlin.descriptors.konan.kotlinLibrary
|
||||||
@@ -38,6 +37,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory
|
|||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPublicSymbolBase
|
||||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.library.IrLibrary
|
import org.jetbrains.kotlin.library.IrLibrary
|
||||||
@@ -48,7 +48,20 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
|
|
||||||
object KonanFakeOverrideClassFilter : PlatformFakeOverrideClassFilter {
|
object KonanFakeOverrideClassFilter : PlatformFakeOverrideClassFilter {
|
||||||
override fun constructFakeOverrides(clazz: IrClass): Boolean = !clazz.isObjCClass()
|
private fun IdSignature.isInteropSignature(): Boolean = with(this) {
|
||||||
|
IdSignature.Flags.IS_NATIVE_INTEROP_LIBRARY.test()
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is an alternative to .isObjCClass that doesn't need to walk up all the class heirarchy,
|
||||||
|
// rather it only looks at immediate super class symbols.
|
||||||
|
private fun IrClass.isObjCClass() = this.superTypes
|
||||||
|
.mapNotNull { it.classOrNull }
|
||||||
|
.filter { it is IrPublicSymbolBase<*> }
|
||||||
|
.any { it.signature.isInteropSignature() }
|
||||||
|
|
||||||
|
override fun constructFakeOverrides(clazz: IrClass): Boolean {
|
||||||
|
return !clazz.isObjCClass()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class KonanIrLinker(
|
internal class KonanIrLinker(
|
||||||
@@ -60,8 +73,9 @@ internal class KonanIrLinker(
|
|||||||
private val forwardModuleDescriptor: ModuleDescriptor?,
|
private val forwardModuleDescriptor: ModuleDescriptor?,
|
||||||
private val stubGenerator: DeclarationStubGenerator,
|
private val stubGenerator: DeclarationStubGenerator,
|
||||||
private val cenumsProvider: IrProviderForCEnumAndCStructStubs,
|
private val cenumsProvider: IrProviderForCEnumAndCStructStubs,
|
||||||
exportedDependencies: List<ModuleDescriptor>
|
exportedDependencies: List<ModuleDescriptor>,
|
||||||
) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, exportedDependencies) {
|
deserializeFakeOverrides: Boolean
|
||||||
|
) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, exportedDependencies, deserializeFakeOverrides) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val C_NAMES_NAME = Name.identifier("cnames")
|
private val C_NAMES_NAME = Name.identifier("cnames")
|
||||||
@@ -74,7 +88,7 @@ internal class KonanIrLinker(
|
|||||||
|
|
||||||
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = moduleDescriptor.isNativeStdlib()
|
override fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean = moduleDescriptor.isNativeStdlib()
|
||||||
|
|
||||||
override val fakeOverrideBuilderImpl = FakeOverrideBuilderImpl(symbolTable, IdSignatureSerializer(KonanManglerIr), builtIns, KonanFakeOverrideClassFilter)
|
override val fakeOverrideBuilder = FakeOverrideBuilder(symbolTable, IdSignatureSerializer(KonanManglerIr), builtIns, KonanFakeOverrideClassFilter)
|
||||||
|
|
||||||
private val forwardDeclarationDeserializer = forwardModuleDescriptor?.let { KonanForwardDeclarationModuleDeserialier(it) }
|
private val forwardDeclarationDeserializer = forwardModuleDescriptor?.let { KonanForwardDeclarationModuleDeserialier(it) }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user