[Interop][IR Linker] Add support for classes
This commit is contained in:
committed by
Sergey Bogolepov
parent
f64eecbdad
commit
d045bd4b09
+32
-8
@@ -7,14 +7,8 @@ package org.jetbrains.kotlin.backend.konan.ir
|
|||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary
|
import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase
|
import org.jetbrains.kotlin.ir.declarations.lazy.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyProperty
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyTypeAlias
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
|
|
||||||
@@ -36,6 +30,8 @@ class IrProviderForInteropStubs : LazyIrProvider {
|
|||||||
is IrSimpleFunctionSymbol -> provideIrFunction(symbol)
|
is IrSimpleFunctionSymbol -> provideIrFunction(symbol)
|
||||||
is IrPropertySymbol -> provideIrProperty(symbol)
|
is IrPropertySymbol -> provideIrProperty(symbol)
|
||||||
is IrTypeAliasSymbol -> provideIrTypeAlias(symbol)
|
is IrTypeAliasSymbol -> provideIrTypeAlias(symbol)
|
||||||
|
is IrClassSymbol -> provideIrClass(symbol)
|
||||||
|
is IrConstructorSymbol -> provideIrConstructor(symbol)
|
||||||
else -> error("Unsupported interop declaration: symbol=$symbol, descriptor=${symbol.descriptor}")
|
else -> error("Unsupported interop declaration: symbol=$symbol, descriptor=${symbol.descriptor}")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +56,20 @@ class IrProviderForInteropStubs : LazyIrProvider {
|
|||||||
symbol.descriptor, propertyFactory = this::createPropertyDeclaration
|
symbol.descriptor, propertyFactory = this::createPropertyDeclaration
|
||||||
) as IrLazyProperty
|
) as IrLazyProperty
|
||||||
|
|
||||||
|
private fun provideIrClass(symbol: IrClassSymbol): IrLazyClass =
|
||||||
|
declarationStubGenerator.symbolTable.declareClass(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
|
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB,
|
||||||
|
symbol.descriptor, classFactory = this::createClassDeclaration
|
||||||
|
) as IrLazyClass
|
||||||
|
|
||||||
|
private fun provideIrConstructor(symbol: IrConstructorSymbol): IrLazyConstructor =
|
||||||
|
declarationStubGenerator.symbolTable.declareConstructor(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
|
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB,
|
||||||
|
symbol.descriptor, constructorFactory = this::createConstructorDeclaration
|
||||||
|
) as IrLazyConstructor
|
||||||
|
|
||||||
private fun createPropertyDeclaration(symbol: IrPropertySymbol) =
|
private fun createPropertyDeclaration(symbol: IrPropertySymbol) =
|
||||||
IrLazyProperty(
|
IrLazyProperty(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
@@ -80,4 +90,18 @@ class IrProviderForInteropStubs : LazyIrProvider {
|
|||||||
symbol.descriptor.visibility, symbol.descriptor.isActual,
|
symbol.descriptor.visibility, symbol.descriptor.isActual,
|
||||||
declarationStubGenerator, declarationStubGenerator.typeTranslator
|
declarationStubGenerator, declarationStubGenerator.typeTranslator
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun createClassDeclaration(symbol: IrClassSymbol): IrLazyClass =
|
||||||
|
IrLazyClass(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
|
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB,
|
||||||
|
symbol, declarationStubGenerator, declarationStubGenerator.typeTranslator
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun createConstructorDeclaration(symbol: IrConstructorSymbol): IrLazyConstructor =
|
||||||
|
IrLazyConstructor(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
|
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB,
|
||||||
|
symbol, declarationStubGenerator, declarationStubGenerator.typeTranslator
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user