[Interop] Support cache generation for CEnums
Force IR generation for all CEnums in case of cache generation
This commit is contained in:
committed by
Sergey Bogolepov
parent
44552393ad
commit
76ce5ebee3
+4
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.backend.common.phaser.*
|
|||||||
import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable
|
import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataMonolithicSerializer
|
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataMonolithicSerializer
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isForwardDeclarationModule
|
import org.jetbrains.kotlin.backend.konan.descriptors.isForwardDeclarationModule
|
||||||
|
import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.konanLibrary
|
import org.jetbrains.kotlin.backend.konan.descriptors.konanLibrary
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForInteropStubs
|
import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForInteropStubs
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
||||||
@@ -231,6 +232,9 @@ internal val psiToIrPhase = konanUnitPhase(
|
|||||||
if (this.stdlibModule in modulesWithoutDCE) {
|
if (this.stdlibModule in modulesWithoutDCE) {
|
||||||
functionIrClassFactory.buildAllClasses()
|
functionIrClassFactory.buildAllClasses()
|
||||||
}
|
}
|
||||||
|
modulesWithoutDCE
|
||||||
|
.filter(ModuleDescriptor::isFromInteropLibrary)
|
||||||
|
.forEach(irProviderForCEnums::buildAllEnumsFrom)
|
||||||
|
|
||||||
irModule = module
|
irModule = module
|
||||||
irModules = deserializer.modules.filterValues { llvmModuleSpecification.containsModule(it) }
|
irModules = deserializer.modules.filterValues { llvmModuleSpecification.containsModule(it) }
|
||||||
|
|||||||
+11
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.konan.ir.interop
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.konan.InteropBuiltIns
|
import org.jetbrains.kotlin.backend.konan.InteropBuiltIns
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
|
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
|
||||||
|
import org.jetbrains.kotlin.backend.konan.descriptors.getPackageFragments
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary
|
import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumByValueFunctionGenerator
|
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumByValueFunctionGenerator
|
||||||
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumClassGenerator
|
|||||||
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumCompanionGenerator
|
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumCompanionGenerator
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumVarClassGenerator
|
import org.jetbrains.kotlin.backend.konan.ir.interop.cenum.CEnumVarClassGenerator
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer
|
||||||
@@ -23,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.*
|
|||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For the most of descriptors that come from metadata-based interop libraries
|
* For the most of descriptors that come from metadata-based interop libraries
|
||||||
@@ -70,6 +73,14 @@ internal class IrProviderForCEnumStubs(
|
|||||||
return symbol.findCEnumDescriptor(interopBuiltIns) != null
|
return symbol.findCEnumDescriptor(interopBuiltIns) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun buildAllEnumsFrom(interopModule: ModuleDescriptor) {
|
||||||
|
interopModule.getPackageFragments()
|
||||||
|
.flatMap { it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) }
|
||||||
|
.filterIsInstance<ClassDescriptor>()
|
||||||
|
.filter { it.implementsCEnum(interopBuiltIns) }
|
||||||
|
.forEach { cEnumClassGenerator.findOrGenerateCEnum(it, irParentFor(it)) }
|
||||||
|
}
|
||||||
|
|
||||||
override fun getDeclaration(symbol: IrSymbol): IrDeclaration? {
|
override fun getDeclaration(symbol: IrSymbol): IrDeclaration? {
|
||||||
if (symbol.isBound) return symbol.owner as IrDeclaration
|
if (symbol.isBound) return symbol.owner as IrDeclaration
|
||||||
if (!canHandleSymbol(symbol)) return null
|
if (!canHandleSymbol(symbol)) return null
|
||||||
|
|||||||
Reference in New Issue
Block a user