[IR] Remove descriptor-related methods from SymbolTable
Replace them with calls to SymbolTableExtension
This commit is contained in:
committed by
Space Team
parent
b886b7488d
commit
8ad202eb8b
+13
-16
@@ -51,7 +51,7 @@ internal class LazyIrFunctionFactory(
|
||||
override fun getDeclaration(symbol: IrSymbol) =
|
||||
(symbol.descriptor as? FunctionClassDescriptor)?.let { descriptor ->
|
||||
buildClass(descriptor) {
|
||||
declareClass(descriptor) {
|
||||
descriptorExtension.declareClass(descriptor) {
|
||||
createIrClass(descriptor)
|
||||
}
|
||||
}
|
||||
@@ -103,7 +103,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
override fun getDeclaration(symbol: IrSymbol) =
|
||||
(symbol.descriptor as? FunctionClassDescriptor)?.let { descriptor ->
|
||||
buildClass(descriptor) {
|
||||
declareClass(descriptor) {
|
||||
descriptorExtension.declareClass(descriptor) {
|
||||
createIrClass(it, descriptor)
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
|
||||
fun buildAllClasses() {
|
||||
val maxArity = 255 // See [BuiltInFictitiousFunctionClassFactory].
|
||||
(0 .. maxArity).forEach { arity ->
|
||||
(0..maxArity).forEach { arity ->
|
||||
functionN(arity)
|
||||
kFunctionN(arity)
|
||||
suspendFunctionN(arity)
|
||||
@@ -156,13 +156,11 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
override fun kSuspendFunctionN(arity: Int, declarator: SymbolTable.((IrClassSymbol) -> IrClass) -> IrClass): IrClass =
|
||||
buildClass(reflectionTypes.getKSuspendFunction(arity) as FunctionClassDescriptor, declarator)
|
||||
|
||||
private val functionSymbol = symbolTable.referenceClass(
|
||||
irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
|
||||
ClassId.topLevel(KonanFqNames.function))!!)
|
||||
private val functionSymbol = symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
|
||||
ClassId.topLevel(KonanFqNames.function))!!)
|
||||
|
||||
private val kFunctionSymbol = symbolTable.referenceClass(
|
||||
irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
|
||||
ClassId.topLevel(KonanFqNames.kFunction))!!)
|
||||
private val kFunctionSymbol = symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
|
||||
ClassId.topLevel(KonanFqNames.kFunction))!!)
|
||||
|
||||
private val filesMap = mutableMapOf<PackageFragmentDescriptor, IrFile>()
|
||||
|
||||
@@ -179,8 +177,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
}
|
||||
|
||||
private fun createTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameter =
|
||||
symbolTable.declareGlobalTypeParameter(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS,
|
||||
symbolTable.descriptorExtension.declareGlobalTypeParameter(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS,
|
||||
descriptor
|
||||
)
|
||||
|
||||
@@ -198,7 +195,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
)
|
||||
}
|
||||
}
|
||||
return symbolTable.declareSimpleFunction(descriptor, functionFactory)
|
||||
return symbolTable.descriptorExtension.declareSimpleFunction(descriptor, functionFactory)
|
||||
}
|
||||
|
||||
private fun createIrClass(symbol: IrClassSymbol, descriptor: ClassDescriptor): IrClass =
|
||||
@@ -228,7 +225,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
}
|
||||
val superTypeSymbol = when (val superTypeDescriptor = superType.constructor.declarationDescriptor) {
|
||||
is FunctionClassDescriptor -> buildClass(superTypeDescriptor) {
|
||||
declareClass(superTypeDescriptor) {
|
||||
descriptorExtension.declareClass(superTypeDescriptor) {
|
||||
createIrClass(it, superTypeDescriptor)
|
||||
}
|
||||
}.symbol
|
||||
@@ -341,10 +338,10 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
}
|
||||
}
|
||||
|
||||
val newFunction = symbolTable.declareSimpleFunction(descriptor, functionDeclare)
|
||||
val newFunction = symbolTable.descriptorExtension.declareSimpleFunction(descriptor, functionDeclare)
|
||||
|
||||
newFunction.parent = this
|
||||
newFunction.overriddenSymbols = descriptor.overriddenDescriptors.mapNotNull { symbolTable.referenceSimpleFunction(it.original) }
|
||||
newFunction.overriddenSymbols = descriptor.overriddenDescriptors.mapNotNull { symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
|
||||
newFunction.dispatchReceiverParameter = descriptor.dispatchReceiverParameter?.let { newFunction.createValueParameter(it) }
|
||||
newFunction.extensionReceiverParameter = descriptor.extensionReceiverParameter?.let { newFunction.createValueParameter(it) }
|
||||
newFunction.valueParameters = descriptor.valueParameters.map { newFunction.createValueParameter(it) }
|
||||
@@ -371,7 +368,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
isExpect = descriptor.isExpect,
|
||||
isFakeOverride = true)
|
||||
}
|
||||
val property = symbolTable.declareProperty(descriptor, propertyFactory = propertyDeclare)
|
||||
val property = symbolTable.descriptorExtension.declareProperty(descriptor, propertyFactory = propertyDeclare)
|
||||
|
||||
property.parent = this
|
||||
property.getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, property.symbol) }
|
||||
|
||||
+2
-3
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.pop
|
||||
import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrContext
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys.USE_FIR
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
@@ -160,8 +159,8 @@ internal class ExportedElement(
|
||||
|
||||
val irSymbol = when {
|
||||
isFunction -> owner.symbolTable.referenceFunction(declaration as FunctionDescriptor)
|
||||
isClass -> owner.symbolTable.referenceClass(declaration as ClassDescriptor)
|
||||
isEnumEntry -> owner.symbolTable.referenceEnumEntry(declaration as ClassDescriptor)
|
||||
isClass -> owner.symbolTable.descriptorExtension.referenceClass(declaration as ClassDescriptor)
|
||||
isEnumEntry -> owner.symbolTable.descriptorExtension.referenceEnumEntry(declaration as ClassDescriptor)
|
||||
else -> error("unexpected $kind element: $declaration")
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -507,18 +507,18 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
|
||||
// inspired by: irBuiltIns.findBuiltInClassMemberFunctions(this, name).singleOrNull()
|
||||
clazz.descriptor.unsubstitutedMemberScope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND)
|
||||
.singleOrNull()
|
||||
?.let { symbolTable.referenceSimpleFunction(it) }
|
||||
?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
|
||||
|
||||
override fun findMemberProperty(clazz: IrClassSymbol, name: Name): IrPropertySymbol? =
|
||||
clazz.descriptor.unsubstitutedMemberScope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)
|
||||
.singleOrNull()
|
||||
?.let { symbolTable.referenceProperty(it) }
|
||||
?.let { symbolTable.descriptorExtension.referenceProperty(it) }
|
||||
|
||||
override fun findMemberPropertyGetter(clazz: IrClassSymbol, name: Name): IrSimpleFunctionSymbol? =
|
||||
clazz.descriptor.unsubstitutedMemberScope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)
|
||||
.singleOrNull()
|
||||
?.getter
|
||||
?.let { symbolTable.referenceSimpleFunction(it) }
|
||||
?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
|
||||
|
||||
override fun getName(clazz: IrClassSymbol) = clazz.descriptor.name
|
||||
override fun isExtensionReceiverClass(property: IrPropertySymbol, expected: IrClassSymbol?): Boolean {
|
||||
@@ -529,7 +529,7 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
|
||||
return function.descriptor.extensionReceiverParameter?.type?.let { TypeUtils.getClassDescriptor(it) } == expected?.descriptor
|
||||
}
|
||||
|
||||
override fun findGetter(property: IrPropertySymbol): IrSimpleFunctionSymbol = symbolTable.referenceSimpleFunction(property.descriptor.getter!!)
|
||||
override fun findGetter(property: IrPropertySymbol): IrSimpleFunctionSymbol = symbolTable.descriptorExtension.referenceSimpleFunction(property.descriptor.getter!!)
|
||||
|
||||
override fun isExtensionReceiverNullable(function: IrFunctionSymbol): Boolean? {
|
||||
return function.descriptor.extensionReceiverParameter?.type?.isMarkedNullable
|
||||
@@ -570,13 +570,13 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
|
||||
override fun isSuspend(functionSymbol: IrFunctionSymbol): Boolean = functionSymbol.descriptor.isSuspend
|
||||
override fun getVisibility(function: IrFunctionSymbol): DescriptorVisibility = function.descriptor.visibility
|
||||
|
||||
override fun findPrimaryConstructor(clazz: IrClassSymbol) = clazz.descriptor.unsubstitutedPrimaryConstructor?.let { symbolTable.referenceConstructor(it) }
|
||||
override fun findNoParametersConstructor(clazz: IrClassSymbol) = clazz.descriptor.constructors.singleOrNull { it.valueParameters.size == 0 }?.let { symbolTable.referenceConstructor(it) }
|
||||
override fun findPrimaryConstructor(clazz: IrClassSymbol) = clazz.descriptor.unsubstitutedPrimaryConstructor?.let { symbolTable.descriptorExtension.referenceConstructor(it) }
|
||||
override fun findNoParametersConstructor(clazz: IrClassSymbol) = clazz.descriptor.constructors.singleOrNull { it.valueParameters.size == 0 }?.let { symbolTable.descriptorExtension.referenceConstructor(it) }
|
||||
|
||||
override fun findNestedClass(clazz: IrClassSymbol, name: Name): IrClassSymbol? {
|
||||
val classDescriptor = clazz.descriptor.defaultType.memberScope.getContributedClassifier(name, NoLookupLocation.FROM_BUILTINS) as? ClassDescriptor
|
||||
return classDescriptor?.let {
|
||||
symbolTable.referenceClass(it)
|
||||
symbolTable.descriptorExtension.referenceClass(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
@@ -54,7 +55,7 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
* Additional elements are passed via [builder] callback.
|
||||
*/
|
||||
fun createClass(descriptor: ClassDescriptor, builder: (IrClass) -> Unit): IrClass =
|
||||
symbolTable.declareClass(descriptor) {
|
||||
symbolTable.descriptorExtension.declareClass(descriptor) {
|
||||
symbolTable.irFactory.createIrClassFromDescriptor(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, it, descriptor
|
||||
)
|
||||
@@ -85,7 +86,7 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
}
|
||||
|
||||
fun createConstructor(constructorDescriptor: ClassConstructorDescriptor): IrConstructor {
|
||||
val irConstructor = symbolTable.declareConstructor(constructorDescriptor) {
|
||||
val irConstructor = symbolTable.descriptorExtension.declareConstructor(constructorDescriptor) {
|
||||
with(constructorDescriptor) {
|
||||
IrConstructorImpl(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, it, name, visibility,
|
||||
@@ -107,7 +108,7 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
}
|
||||
|
||||
fun createProperty(propertyDescriptor: PropertyDescriptor): IrProperty {
|
||||
val irProperty = symbolTable.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, propertyDescriptor)
|
||||
val irProperty = symbolTable.descriptorExtension.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, propertyDescriptor, propertyDescriptor.isDelegated)
|
||||
irProperty.getter = propertyDescriptor.getter?.let {
|
||||
val irGetter = createFunction(it)
|
||||
irGetter.correspondingPropertySymbol = irProperty.symbol
|
||||
|
||||
+7
-7
@@ -63,7 +63,7 @@ internal class IrProviderForCEnumAndCStructStubs(
|
||||
.flatMap { it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) }
|
||||
.filterIsInstance<ClassDescriptor>()
|
||||
.filter { it.implementsCEnum() || it.inheritsFromCStructVar() }
|
||||
.forEach { symbolTable.referenceClass(it) }
|
||||
.forEach { symbolTable.descriptorExtension.referenceClass(it) }
|
||||
|
||||
private fun generateIrIfNeeded(symbol: IrSymbol, file: IrFile) {
|
||||
// TODO: These `findOrGenerate` calls generate a whole subtree.
|
||||
@@ -92,23 +92,23 @@ internal class IrProviderForCEnumAndCStructStubs(
|
||||
fun getDeclaration(descriptor: DeclarationDescriptor, idSignature: IdSignature, file: IrFile, symbolKind: BinarySymbolData.SymbolKind): IrSymbolOwner {
|
||||
return symbolTable.run {
|
||||
when (symbolKind) {
|
||||
BinarySymbolData.SymbolKind.CONSTRUCTOR_SYMBOL -> declareConstructorFromLinker(descriptor as ClassConstructorDescriptor, idSignature) { s ->
|
||||
BinarySymbolData.SymbolKind.CONSTRUCTOR_SYMBOL -> descriptorExtension.declareConstructorFromLinker(descriptor as ClassConstructorDescriptor, idSignature) { s: IrConstructorSymbol ->
|
||||
generateIrIfNeeded(s, file)
|
||||
s.owner
|
||||
}
|
||||
BinarySymbolData.SymbolKind.CLASS_SYMBOL -> declareClassFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
|
||||
BinarySymbolData.SymbolKind.CLASS_SYMBOL -> descriptorExtension.declareClassFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
|
||||
generateIrIfNeeded(s, file)
|
||||
s.owner
|
||||
}
|
||||
BinarySymbolData.SymbolKind.ENUM_ENTRY_SYMBOL -> declareEnumEntryFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
|
||||
BinarySymbolData.SymbolKind.ENUM_ENTRY_SYMBOL -> descriptorExtension.declareEnumEntryFromLinker(descriptor as ClassDescriptor, idSignature) { s: IrEnumEntrySymbol ->
|
||||
generateIrIfNeeded(s, file)
|
||||
s.owner
|
||||
}
|
||||
BinarySymbolData.SymbolKind.FUNCTION_SYMBOL -> declareSimpleFunctionFromLinker(descriptor as FunctionDescriptor, idSignature) { s ->
|
||||
BinarySymbolData.SymbolKind.FUNCTION_SYMBOL -> descriptorExtension.declareSimpleFunctionFromLinker(descriptor as FunctionDescriptor, idSignature) { s: IrSimpleFunctionSymbol ->
|
||||
generateIrIfNeeded(s, file)
|
||||
s.owner
|
||||
}
|
||||
BinarySymbolData.SymbolKind.PROPERTY_SYMBOL -> declarePropertyFromLinker(descriptor as PropertyDescriptor, idSignature) { s ->
|
||||
BinarySymbolData.SymbolKind.PROPERTY_SYMBOL -> descriptorExtension.declarePropertyFromLinker(descriptor as PropertyDescriptor, idSignature) { s: IrPropertySymbol ->
|
||||
generateIrIfNeeded(s, file)
|
||||
s.owner
|
||||
}
|
||||
@@ -121,4 +121,4 @@ internal class IrProviderForCEnumAndCStructStubs(
|
||||
companion object {
|
||||
const val cTypeDefinitionsFileName = "CTypeDefinitions"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-6
@@ -60,7 +60,7 @@ internal class CEnumClassGenerator(
|
||||
* Generates one if absent.
|
||||
*/
|
||||
fun findOrGenerateCEnum(classDescriptor: ClassDescriptor, parent: IrDeclarationContainer): IrClass {
|
||||
val irClassSymbol = symbolTable.referenceClass(classDescriptor)
|
||||
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(classDescriptor)
|
||||
return if (!irClassSymbol.isBound) {
|
||||
provideIrClassForCEnum(classDescriptor).also {
|
||||
it.patchDeclarationParents(parent)
|
||||
@@ -123,11 +123,10 @@ internal class CEnumClassGenerator(
|
||||
}
|
||||
|
||||
private fun createEnumEntry(enumDescriptor: ClassDescriptor, entryDescriptor: ClassDescriptor): IrEnumEntry {
|
||||
val enumEntry = symbolTable.declareEnumEntry(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
|
||||
val enumEntry = symbolTable.descriptorExtension.declareEnumEntry(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
|
||||
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, entryDescriptor
|
||||
)
|
||||
val constructorSymbol = symbolTable.referenceConstructor(enumDescriptor.unsubstitutedPrimaryConstructor!!)
|
||||
val constructorSymbol = symbolTable.descriptorExtension.referenceConstructor(enumDescriptor.unsubstitutedPrimaryConstructor!!)
|
||||
postLinkageSteps.add {
|
||||
enumEntry.initializerExpression = IrExpressionBodyImpl(IrEnumConstructorCallImpl(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
|
||||
@@ -158,8 +157,8 @@ internal class CEnumClassGenerator(
|
||||
val irConstructor = createConstructor(descriptor.unsubstitutedPrimaryConstructor!!)
|
||||
val builtIns = (irBuiltIns as IrBuiltInsOverDescriptors).builtIns
|
||||
val enumConstructor = builtIns.enum.constructors.single()
|
||||
val constructorSymbol = symbolTable.referenceConstructor(enumConstructor)
|
||||
val classSymbol = symbolTable.referenceClass(descriptor)
|
||||
val constructorSymbol = symbolTable.descriptorExtension.referenceConstructor(enumConstructor)
|
||||
val classSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
|
||||
val type = descriptor.defaultType.toIrType()
|
||||
postLinkageSteps.add {
|
||||
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET)
|
||||
|
||||
+3
-3
@@ -52,8 +52,8 @@ internal class CEnumCompanionGenerator(
|
||||
|
||||
private fun createCompanionConstructor(companionObjectDescriptor: ClassDescriptor): IrConstructor {
|
||||
val anyPrimaryConstructor = companionObjectDescriptor.builtIns.any.unsubstitutedPrimaryConstructor!!
|
||||
val superConstructorSymbol = symbolTable.referenceConstructor(anyPrimaryConstructor)
|
||||
val classSymbol = symbolTable.referenceClass(companionObjectDescriptor)
|
||||
val superConstructorSymbol = symbolTable.descriptorExtension.referenceConstructor(anyPrimaryConstructor)
|
||||
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
|
||||
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
|
||||
postLinkageSteps.add {
|
||||
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
|
||||
@@ -99,4 +99,4 @@ internal class CEnumCompanionGenerator(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -59,11 +59,11 @@ internal class CEnumVarClassGenerator(
|
||||
|
||||
private fun createPrimaryConstructor(enumVarClass: IrClass): IrConstructor {
|
||||
val irConstructor = createConstructor(enumVarClass.descriptor.unsubstitutedPrimaryConstructor!!)
|
||||
val classSymbol = symbolTable.referenceClass(enumVarClass.descriptor)
|
||||
val classSymbol = symbolTable.descriptorExtension.referenceClass(enumVarClass.descriptor)
|
||||
postLinkageSteps.add {
|
||||
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
|
||||
+IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||
startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol
|
||||
startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol
|
||||
).also {
|
||||
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
|
||||
}
|
||||
@@ -82,13 +82,13 @@ internal class CEnumVarClassGenerator(
|
||||
}
|
||||
|
||||
private fun createCompanionConstructor(companionObjectDescriptor: ClassDescriptor, typeSize: Int): IrConstructor {
|
||||
val classSymbol = symbolTable.referenceClass(companionObjectDescriptor)
|
||||
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
|
||||
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
|
||||
postLinkageSteps.add {
|
||||
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
|
||||
+IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||
startOffset, endOffset, context.irBuiltIns.unitType,
|
||||
symbols.primitiveVarPrimaryConstructor
|
||||
startOffset, endOffset, context.irBuiltIns.unitType,
|
||||
symbols.primitiveVarPrimaryConstructor
|
||||
).also {
|
||||
it.putValueArgument(0, irInt(typeSize))
|
||||
}
|
||||
|
||||
+3
-3
@@ -41,7 +41,7 @@ internal class CStructVarClassGenerator(
|
||||
override val postLinkageSteps: MutableList<() -> Unit> = mutableListOf()
|
||||
|
||||
fun findOrGenerateCStruct(classDescriptor: ClassDescriptor, parent: IrDeclarationContainer): IrClass {
|
||||
val irClassSymbol = symbolTable.referenceClass(classDescriptor)
|
||||
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(classDescriptor)
|
||||
return if (!irClassSymbol.isBound) {
|
||||
provideIrClassForCStruct(classDescriptor).also {
|
||||
it.patchDeclarationParents(parent)
|
||||
@@ -275,7 +275,7 @@ internal class CStructVarClassGenerator(
|
||||
).also {
|
||||
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
|
||||
}
|
||||
+irInstanceInitializer(symbolTable.referenceClass(irClass.descriptor))
|
||||
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(irClass.descriptor))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -290,7 +290,7 @@ internal class CStructVarClassGenerator(
|
||||
it.putTypeArgument(0, irConstructor.valueParameters[0].type)
|
||||
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
|
||||
}
|
||||
+irInstanceInitializer(symbolTable.referenceClass(irClass.descriptor))
|
||||
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(irClass.descriptor))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -73,7 +73,7 @@ internal class CStructVarCompanionGenerator(
|
||||
startOffset, endOffset, context.irBuiltIns.unitType,
|
||||
irBuiltIns.anyClass.owner.primaryConstructor!!.symbol
|
||||
)
|
||||
+irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor))
|
||||
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -88,10 +88,10 @@ internal class CStructVarCompanionGenerator(
|
||||
it.putValueArgument(0, irLong(size))
|
||||
it.putValueArgument(1, irInt(align))
|
||||
}
|
||||
+irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor))
|
||||
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-9
@@ -24,7 +24,7 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
|
||||
createObjCMethodSpecBaseMethod(
|
||||
mapper,
|
||||
namer,
|
||||
symbolTable.referenceSimpleFunction(it),
|
||||
symbolTable.descriptorExtension.referenceSimpleFunction(it),
|
||||
it
|
||||
)
|
||||
)
|
||||
@@ -58,13 +58,13 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
|
||||
methods += createObjCMethods(allBaseMethods)
|
||||
|
||||
val binaryName = namer.getClassOrProtocolName(descriptor).binaryName
|
||||
val irClassSymbol = symbolTable.referenceClass(descriptor)
|
||||
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
|
||||
|
||||
if (descriptor.isInterface) {
|
||||
ObjCProtocolForKotlinInterface(binaryName, irClassSymbol, methods)
|
||||
} else {
|
||||
descriptor.constructors.filter { mapper.shouldBeExposed(it) }.mapTo(methods) {
|
||||
val irConstructorSymbol = symbolTable.referenceConstructor(it)
|
||||
val irConstructorSymbol = symbolTable.descriptorExtension.referenceConstructor(it)
|
||||
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, irConstructorSymbol, it)
|
||||
|
||||
if (descriptor.isArray) {
|
||||
@@ -80,24 +80,26 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
|
||||
}
|
||||
|
||||
if (descriptor.needCompanionObjectProperty(namer, mapper)) {
|
||||
methods += ObjCGetterForObjectInstance(namer.getCompanionObjectPropertySelector(descriptor),
|
||||
symbolTable.referenceClass(descriptor.companionObjectDescriptor!!))
|
||||
methods += ObjCGetterForObjectInstance(
|
||||
namer.getCompanionObjectPropertySelector(descriptor),
|
||||
symbolTable.descriptorExtension.referenceClass(descriptor.companionObjectDescriptor!!)
|
||||
)
|
||||
}
|
||||
|
||||
if (descriptor.kind == ClassKind.ENUM_CLASS) {
|
||||
descriptor.enumEntries.mapTo(methods) {
|
||||
ObjCGetterForKotlinEnumEntry(symbolTable.referenceEnumEntry(it), namer.getEnumEntrySelector(it))
|
||||
ObjCGetterForKotlinEnumEntry(symbolTable.descriptorExtension.referenceEnumEntry(it), namer.getEnumEntrySelector(it))
|
||||
}
|
||||
|
||||
descriptor.getEnumValuesFunctionDescriptor()?.let {
|
||||
methods += ObjCClassMethodForKotlinEnumValuesOrEntries(
|
||||
symbolTable.referenceSimpleFunction(it),
|
||||
symbolTable.descriptorExtension.referenceSimpleFunction(it),
|
||||
namer.getEnumStaticMemberSelector(it)
|
||||
)
|
||||
}
|
||||
descriptor.getEnumEntriesPropertyDescriptor()?.let {
|
||||
methods += ObjCClassMethodForKotlinEnumValuesOrEntries(
|
||||
symbolTable.referenceSimpleFunction(it.getter!!),
|
||||
symbolTable.descriptorExtension.referenceSimpleFunction(it.getter!!),
|
||||
namer.getEnumStaticMemberSelector(it)
|
||||
)
|
||||
}
|
||||
@@ -227,4 +229,4 @@ internal class ObjCClassForKotlinFile(
|
||||
) : ObjCTypeSpec(binaryName) {
|
||||
override fun toString(): String =
|
||||
"ObjC spec of class `$binaryName` for `${sourceFile.name}`"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user