[IR] Remove descriptor-related methods from SymbolTable

Replace them with calls to SymbolTableExtension
This commit is contained in:
Dmitriy Novozhilov
2023-07-11 12:17:59 +03:00
committed by Space Team
parent b886b7488d
commit 8ad202eb8b
55 changed files with 349 additions and 675 deletions
@@ -640,7 +640,12 @@ class Fir2IrDeclarationStorage(
irParent: IrClass
): IrAnonymousInitializer = convertCatching(anonymousInitializer) {
return anonymousInitializer.convertWithOffsets { startOffset, endOffset ->
symbolTable.declareAnonymousInitializer(startOffset, endOffset, IrDeclarationOrigin.DEFINED, irParent.descriptor).apply {
symbolTable.descriptorExtension.declareAnonymousInitializer(
startOffset,
endOffset,
IrDeclarationOrigin.DEFINED,
irParent.descriptor
).apply {
this.parent = irParent
initializerCache[anonymousInitializer] = this
}
@@ -64,7 +64,7 @@ class JsCommonCoroutineSymbols(
val coroutineIntrinsicsPackage = module.getPackage(COROUTINE_INTRINSICS_PACKAGE_FQNAME)
val coroutineImpl =
symbolTable.referenceClass(findClass(coroutinePackage.memberScope, COROUTINE_IMPL_NAME))
symbolTable.descriptorExtension.referenceClass(findClass(coroutinePackage.memberScope, COROUTINE_IMPL_NAME))
val coroutineImplLabelPropertyGetter by lazy(LazyThreadSafetyMode.NONE) { coroutineImpl.getPropertyGetter("state")!!.owner }
val coroutineImplLabelPropertySetter by lazy(LazyThreadSafetyMode.NONE) { coroutineImpl.getPropertySetter("state")!!.owner }
@@ -75,14 +75,14 @@ class JsCommonCoroutineSymbols(
val coroutineImplExceptionStatePropertyGetter by lazy(LazyThreadSafetyMode.NONE) { coroutineImpl.getPropertyGetter("exceptionState")!!.owner }
val coroutineImplExceptionStatePropertySetter by lazy(LazyThreadSafetyMode.NONE) { coroutineImpl.getPropertySetter("exceptionState")!!.owner }
val continuationClass = symbolTable.referenceClass(
val continuationClass = symbolTable.descriptorExtension.referenceClass(
coroutinePackage.memberScope.getContributedClassifier(
CONTINUATION_NAME,
NoLookupLocation.FROM_BACKEND
) as ClassDescriptor
)
val coroutineSuspendedGetter = symbolTable.referenceSimpleFunction(
val coroutineSuspendedGetter = symbolTable.descriptorExtension.referenceSimpleFunction(
coroutineIntrinsicsPackage.memberScope.getContributedVariables(
COROUTINE_SUSPENDED_NAME,
NoLookupLocation.FROM_BACKEND
@@ -154,4 +154,4 @@ interface JsCommonInlineClassesUtils : InlineClassesUtils {
* An intrinsic for obtaining the underlying value from an instance of an inline class.
*/
val unboxIntrinsic: IrSimpleFunctionSymbol
}
}
@@ -204,12 +204,12 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
val metadataObjectConstructorSymbol = getInternalFunction("objectMeta")
val metadataClassConstructorSymbol = getInternalFunction("classMeta")
val longToDouble = context.symbolTable.referenceSimpleFunction(
val longToDouble = context.symbolTable.descriptorExtension.referenceSimpleFunction(
context.getClass(FqName("kotlin.Long")).unsubstitutedMemberScope.findSingleFunction(
Name.identifier("toDouble")
)
)
val longToFloat = context.symbolTable.referenceSimpleFunction(
val longToFloat = context.symbolTable.descriptorExtension.referenceSimpleFunction(
context.getClass(FqName("kotlin.Long")).unsubstitutedMemberScope.findSingleFunction(
Name.identifier("toFloat")
)
@@ -323,12 +323,13 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
val jsBind = getInternalFunction("jsBind")
// TODO move to IntrinsifyCallsLowering
val doNotIntrinsifyAnnotationSymbol = context.symbolTable.referenceClass(context.getJsInternalClass("DoNotIntrinsify"))
val jsFunAnnotationSymbol = context.symbolTable.referenceClass(context.getJsInternalClass("JsFun"))
val jsNameAnnotationSymbol = context.symbolTable.referenceClass(context.getJsInternalClass("JsName"))
val doNotIntrinsifyAnnotationSymbol =
context.symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("DoNotIntrinsify"))
val jsFunAnnotationSymbol = context.symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("JsFun"))
val jsNameAnnotationSymbol = context.symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("JsName"))
val jsExportAnnotationSymbol by lazy(LazyThreadSafetyMode.NONE) {
context.symbolTable.referenceClass(context.getJsInternalClass("JsExport"))
context.symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("JsExport"))
}
val jsExportIgnoreAnnotationSymbol by lazy(LazyThreadSafetyMode.NONE) {
@@ -337,10 +338,11 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
?.symbol ?: error("can't find kotlin.js.JsExport.Ignore annotation")
}
val jsImplicitExportAnnotationSymbol = context.symbolTable.referenceClass(context.getJsInternalClass("JsImplicitExport"))
val jsImplicitExportAnnotationSymbol =
context.symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("JsImplicitExport"))
// TODO move CharSequence-related stiff to IntrinsifyCallsLowering
val charSequenceClassSymbol = context.symbolTable.referenceClass(context.getClass(FqName("kotlin.CharSequence")))
val charSequenceClassSymbol = context.symbolTable.descriptorExtension.referenceClass(context.getClass(FqName("kotlin.CharSequence")))
val charSequenceLengthPropertyGetterSymbol by context.lazy2 {
with(charSequenceClassSymbol.owner.declarations) {
filterIsInstance<IrProperty>().firstOrNull { it.name.asString() == "length" }?.getter ?:
@@ -381,22 +383,24 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
// Helpers:
private fun getInternalFunction(name: String) =
context.symbolTable.referenceSimpleFunction(context.getJsInternalFunction(name))
context.symbolTable.descriptorExtension.referenceSimpleFunction(context.getJsInternalFunction(name))
private fun getInternalProperty(name: String) =
context.symbolTable.referenceProperty(context.getJsInternalProperty(name))
context.symbolTable.descriptorExtension.referenceProperty(context.getJsInternalProperty(name))
private fun getInternalWithoutPackage(name: String) =
context.symbolTable.referenceSimpleFunction(context.getFunctions(FqName(name)).single())
context.symbolTable.descriptorExtension.referenceSimpleFunction(context.getFunctions(FqName(name)).single())
private fun getInternalWithoutPackageOrNull(name: String): IrSimpleFunctionSymbol? {
val descriptor = context.getFunctions(FqName(name)).singleOrNull() ?: return null
return context.symbolTable.referenceSimpleFunction(descriptor)
return context.symbolTable.descriptorExtension.referenceSimpleFunction(descriptor)
}
private fun getFunctionInKotlinPackage(name: String) =
context.symbolTable.referenceSimpleFunction(context.getFunctions(kotlinPackageFqn.child(Name.identifier(name))).single())
context.symbolTable.descriptorExtension.referenceSimpleFunction(
context.getFunctions(kotlinPackageFqn.child(Name.identifier(name))).single()
)
private fun getInternalClassWithoutPackage(fqName: String) =
context.symbolTable.referenceClass(context.getClass(FqName(fqName)))
context.symbolTable.descriptorExtension.referenceClass(context.getClass(FqName(fqName)))
}
@@ -160,7 +160,7 @@ class JsIrBackendContext(
override val propertyLazyInitialization: PropertyLazyInitialization = PropertyLazyInitialization(
enabled = configuration.get(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true),
eagerInitialization = symbolTable.referenceClass(getJsInternalClass("EagerInitialization"))
eagerInitialization = symbolTable.descriptorExtension.referenceClass(getJsInternalClass("EagerInitialization"))
)
override val catchAllThrowableType: IrType
@@ -194,36 +194,36 @@ class JsIrBackendContext(
override val enumEntries = getIrClass(ENUMS_PACKAGE_FQNAME.child(Name.identifier("EnumEntries")))
override val createEnumEntries = getFunctions(ENUMS_PACKAGE_FQNAME.child(Name.identifier("enumEntries")))
.find { it.valueParameters.firstOrNull()?.type?.isFunctionType == false }
.let { symbolTable.referenceSimpleFunction(it!!) }
.let { symbolTable.descriptorExtension.referenceSimpleFunction(it!!) }
override val ir = object : Ir<JsIrBackendContext>(this) {
override val symbols = object : Symbols(irBuiltIns, symbolTable) {
private val context = this@JsIrBackendContext
override val throwNullPointerException =
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_NPE"))).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_NPE"))).single())
init {
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("noWhenBranchMatchedException"))).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("noWhenBranchMatchedException"))).single())
}
override val throwTypeCastException =
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_CCE"))).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_CCE"))).single())
override val throwUninitializedPropertyAccessException =
symbolTable.referenceSimpleFunction(getFunctions(FqName("kotlin.throwUninitializedPropertyAccessException")).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(FqName("kotlin.throwUninitializedPropertyAccessException")).single())
override val throwKotlinNothingValueException: IrSimpleFunctionSymbol =
symbolTable.referenceSimpleFunction(getFunctions(FqName("kotlin.throwKotlinNothingValueException")).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(FqName("kotlin.throwKotlinNothingValueException")).single())
override val defaultConstructorMarker =
symbolTable.referenceClass(context.getJsInternalClass("DefaultConstructorMarker"))
symbolTable.descriptorExtension.referenceClass(context.getJsInternalClass("DefaultConstructorMarker"))
override val throwISE: IrSimpleFunctionSymbol =
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_ISE"))).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_ISE"))).single())
override val throwIAE: IrSimpleFunctionSymbol =
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_IAE"))).single())
symbolTable.descriptorExtension.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_IAE"))).single())
override val stringBuilder
get() = TODO("not implemented")
@@ -234,7 +234,7 @@ class JsIrBackendContext(
private val _arraysContentEquals = getFunctions(FqName("kotlin.collections.contentEquals")).mapNotNull {
if (it.extensionReceiverParameter != null && it.extensionReceiverParameter!!.type.isNullable())
symbolTable.referenceSimpleFunction(it)
symbolTable.descriptorExtension.referenceSimpleFunction(it)
else null
}
@@ -242,19 +242,21 @@ class JsIrBackendContext(
override val arraysContentEquals: Map<IrType, IrSimpleFunctionSymbol>
get() = _arraysContentEquals.associateBy { it.owner.extensionReceiverParameter!!.type.makeNotNull() }
override val getContinuation = symbolTable.referenceSimpleFunction(getJsInternalFunction("getContinuation"))
override val getContinuation = symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("getContinuation"))
override val continuationClass = context.coroutineSymbols.continuationClass
override val coroutineContextGetter =
symbolTable.referenceSimpleFunction(context.coroutineSymbols.coroutineContextProperty.getter!!)
symbolTable.descriptorExtension.referenceSimpleFunction(context.coroutineSymbols.coroutineContextProperty.getter!!)
override val suspendCoroutineUninterceptedOrReturn =
symbolTable.referenceSimpleFunction(getJsInternalFunction(COROUTINE_SUSPEND_OR_RETURN_JS_NAME))
symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction(COROUTINE_SUSPEND_OR_RETURN_JS_NAME))
override val coroutineGetContext = symbolTable.referenceSimpleFunction(getJsInternalFunction(GET_COROUTINE_CONTEXT_NAME))
override val coroutineGetContext =
symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction(GET_COROUTINE_CONTEXT_NAME))
override val returnIfSuspended = symbolTable.referenceSimpleFunction(getJsInternalFunction("returnIfSuspended"))
override val returnIfSuspended =
symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("returnIfSuspended"))
override val functionAdapter: IrClassSymbol
get() = TODO("Not implemented")
@@ -300,7 +302,7 @@ class JsIrBackendContext(
// classes forced to be loaded
val errorCodeSymbol: IrSimpleFunctionSymbol? =
if (errorPolicy.allowErrors) symbolTable.referenceSimpleFunction(getJsInternalFunction("errorCode")) else null
if (errorPolicy.allowErrors) symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("errorCode")) else null
val throwableClass = getIrClass(JsIrBackendContext.KOTLIN_PACKAGE_FQN.child(Name.identifier("Throwable")))
@@ -311,7 +313,7 @@ class JsIrBackendContext(
// Top-level functions forced to be loaded
val coroutineEmptyContinuation = symbolTable.referenceProperty(
val coroutineEmptyContinuation = symbolTable.descriptorExtension.referenceProperty(
getProperty(
FqName.fromSegments(
listOf(
@@ -326,20 +328,28 @@ class JsIrBackendContext(
)
val newThrowableSymbol = symbolTable.referenceSimpleFunction(getJsInternalFunction("newThrowable"))
val extendThrowableSymbol = symbolTable.referenceSimpleFunction(getJsInternalFunction("extendThrowable"))
val newThrowableSymbol = symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("newThrowable"))
val extendThrowableSymbol = symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("extendThrowable"))
val setPropertiesToThrowableInstanceSymbol =
symbolTable.referenceSimpleFunction(getJsInternalFunction("setPropertiesToThrowableInstance"))
symbolTable.descriptorExtension.referenceSimpleFunction(getJsInternalFunction("setPropertiesToThrowableInstance"))
override val suiteFun = getFunctions(FqName("kotlin.test.suite")).singleOrNull()?.let { symbolTable.referenceSimpleFunction(it) }
override val testFun = getFunctions(FqName("kotlin.test.test")).singleOrNull()?.let { symbolTable.referenceSimpleFunction(it) }
override val suiteFun = getFunctions(FqName("kotlin.test.suite")).singleOrNull()?.let {
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
override val testFun = getFunctions(FqName("kotlin.test.test")).singleOrNull()?.let {
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
val throwableConstructors by lazy2 { throwableClass.owner.declarations.filterIsInstance<IrConstructor>().map { it.symbol } }
val defaultThrowableCtor by lazy2 { throwableConstructors.single { !it.owner.isPrimary && it.owner.valueParameters.size == 0 } }
val kpropertyBuilder = getFunctions(FqName("kotlin.js.getPropertyCallableRef")).single().let { symbolTable.referenceSimpleFunction(it) }
val kpropertyBuilder = getFunctions(FqName("kotlin.js.getPropertyCallableRef")).single().let {
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
val klocalDelegateBuilder =
getFunctions(FqName("kotlin.js.getLocalDelegateReference")).single().let { symbolTable.referenceSimpleFunction(it) }
getFunctions(FqName("kotlin.js.getLocalDelegateReference")).single().let {
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
private fun referenceOperators(): Map<Name, Map<IrClassSymbol, Collection<IrSimpleFunctionSymbol>>> {
val primitiveIrSymbols = irBuiltIns.primitiveIrTypes.map { it.classifierOrFail as IrClassSymbol }
@@ -365,7 +375,7 @@ class JsIrBackendContext(
internal fun getProperty(fqName: FqName): PropertyDescriptor =
findProperty(module.getPackage(fqName.parent()).memberScope, fqName.shortName()).single()
internal fun getIrClass(fqName: FqName): IrClassSymbol = symbolTable.referenceClass(getClass(fqName))
internal fun getIrClass(fqName: FqName): IrClassSymbol = symbolTable.descriptorExtension.referenceClass(getClass(fqName))
internal fun getJsInternalFunction(name: String): SimpleFunctionDescriptor =
findFunctions(internalPackage.memberScope, Name.identifier(name)).singleOrNull() ?: error("Internal function '$name' not found")
@@ -19,7 +19,7 @@ class ExceptionHelperCallsTransformer(private val context: JsIrBackendContext) :
@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun referenceFunction(fqn: FqName) =
context.getFunctions(fqn).singleOrNull()?.let {
context.symbolTable.referenceSimpleFunction(it)
context.symbolTable.descriptorExtension.referenceSimpleFunction(it)
} ?: throw AssertionError("Function not found: $fqn")
private val helperMapping = mapOf(
@@ -172,7 +172,7 @@ open class JvmGeneratorExtensionsImpl(
return IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
ktPureClassOrObject.pureStartOffset, ktPureClassOrObject.pureEndOffset,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(recordConstructor)
context.symbolTable.descriptorExtension.referenceConstructor(recordConstructor)
)
}
@@ -54,7 +54,7 @@ class SymbolTableWithBuiltInsDeduplication(
*/
@ObsoleteDescriptorBasedAPI
override fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
val irBuiltIns = this.irBuiltIns ?: return super.referenceClass(descriptor)
val irBuiltIns = this.irBuiltIns ?: return super.descriptorExtension.referenceClass(descriptor)
// We need to find out whether `descriptor` is possibly a built-in symbol before it's actually retrieved to break recursion as
// `irBuiltIns.findClass` uses `referenceClass` recursively.
@@ -62,10 +62,10 @@ class SymbolTableWithBuiltInsDeduplication(
if (builtInDescriptor != null) {
// We need to delegate to the supertype implementation here to break recursion. `findBuiltInClassDescriptor` will return
// `descriptor` even if `descriptor` was found via `findBuiltInClassDescriptor`.
return super.referenceClass(builtInDescriptor)
return super.descriptorExtension.referenceClass(builtInDescriptor)
}
return super.referenceClass(descriptor)
return super.descriptorExtension.referenceClass(descriptor)
}
private fun IrBuiltInsOverDescriptors.findBuiltInClassDescriptor(descriptor: ClassDescriptor): ClassDescriptor? {
@@ -36,12 +36,12 @@ class UndiscoveredExpectVisitor(
) : KtTreeVisitorVoid() {
override fun visitClassOrObject(classOrObject: KtClassOrObject) {
super.visitClassOrObject(classOrObject)
symbolTable.referenceClass(classOrObject.findExpectForActual(BindingContext.CLASS) ?: return)
symbolTable.descriptorExtension.referenceClass(classOrObject.findExpectForActual(BindingContext.CLASS) ?: return)
}
override fun visitTypeAlias(typeAlias: KtTypeAlias) {
super.visitTypeAlias(typeAlias)
symbolTable.referenceTypeAlias(typeAlias.findExpectForActual(BindingContext.TYPE_ALIAS) ?: return)
symbolTable.descriptorExtension.referenceTypeAlias(typeAlias.findExpectForActual(BindingContext.TYPE_ALIAS) ?: return)
}
override fun visitPrimaryConstructor(constructor: KtPrimaryConstructor) {
@@ -65,7 +65,7 @@ class UndiscoveredExpectVisitor(
override fun visitProperty(property: KtProperty) {
super.visitProperty(property)
symbolTable.referenceProperty(
symbolTable.descriptorExtension.referenceProperty(
property.findExpectForActualOfType<PropertyDescriptor, _, _>(BindingContext.VARIABLE) ?: return
)
}
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
import org.jetbrains.kotlin.ir.builders.irBlock
import org.jetbrains.kotlin.ir.declarations.*
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.org.objectweb.asm.Type
import java.util.concurrent.ConcurrentHashMap
@OptIn(ObsoleteDescriptorBasedAPI::class)
class JvmBackendContext(
val state: GenerationState,
override val irBuiltIns: IrBuiltIns,
@@ -192,7 +194,7 @@ class JvmBackendContext(
}
state.multiFieldValueClassUnboxInfo = lambda@{ descriptor ->
val irClass = symbolTable.lazyWrapper.referenceClass(descriptor).owner
val irClass = symbolTable.lazyWrapper.descriptorExtension.referenceClass(descriptor).owner
val node = multiFieldValueClassReplacements.getRootMfvcNodeOrNull(irClass) ?: return@lambda null
val leavesInfo =
node.leaves.map { Triple(defaultTypeMapper.mapType(it.type), it.fullMethodName.asString(), it.fullFieldName.asString()) }
@@ -201,10 +203,10 @@ class JvmBackendContext(
}
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol =
symbolTable.lazyWrapper.referenceClass(descriptor)
symbolTable.lazyWrapper.descriptorExtension.referenceClass(descriptor)
internal fun referenceTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameterSymbol =
symbolTable.lazyWrapper.referenceTypeParameter(descriptor)
symbolTable.lazyWrapper.descriptorExtension.referenceTypeParameter(descriptor)
override fun log(message: () -> String) {
/*TODO*/
@@ -71,7 +71,7 @@ class WasmSymbols(
internal val eagerInitialization: IrClassSymbol = getIrClass(FqName("kotlin.EagerInitialization"))
internal val isNotFirstWasmExportCall: IrPropertySymbol = symbolTable.referenceProperty(
internal val isNotFirstWasmExportCall: IrPropertySymbol = symbolTable.descriptorExtension.referenceProperty(
getProperty(FqName.fromSegments(listOf("kotlin", "wasm", "internal", "isNotFirstWasmExportCall")))
)
@@ -103,7 +103,7 @@ class WasmSymbols(
override val continuationClass =
context.coroutineSymbols.continuationClass
override val coroutineContextGetter =
symbolTable.referenceSimpleFunction(context.coroutineSymbols.coroutineContextProperty.getter!!)
symbolTable.descriptorExtension.referenceSimpleFunction(context.coroutineSymbols.coroutineContextProperty.getter!!)
override val suspendCoroutineUninterceptedOrReturn =
getInternalFunction("suspendCoroutineUninterceptedOrReturn")
override val coroutineGetContext =
@@ -114,12 +114,12 @@ class WasmSymbols(
val enumEntries = getIrClass(FqName.fromSegments(listOf("kotlin", "enums", "EnumEntries")))
val createEnumEntries = findFunctions(enumsInternalPackage.memberScope, Name.identifier("enumEntries"))
.find { it.valueParameters.firstOrNull()?.type?.isFunctionType == false }
.let { symbolTable.referenceSimpleFunction(it!!) }
.let { symbolTable.descriptorExtension.referenceSimpleFunction(it!!) }
val enumValueOfIntrinsic = getInternalFunction("enumValueOfIntrinsic")
val enumValuesIntrinsic = getInternalFunction("enumValuesIntrinsic")
val coroutineEmptyContinuation: IrPropertySymbol = symbolTable.referenceProperty(
val coroutineEmptyContinuation: IrPropertySymbol = symbolTable.descriptorExtension.referenceProperty(
getProperty(FqName.fromSegments(listOf("kotlin", "wasm", "internal", "EmptyContinuation")))
)
@@ -142,7 +142,7 @@ class WasmSymbols(
context.irBuiltIns.floatType to getInternalFunction("consumeFloatIntoVoid"),
context.irBuiltIns.doubleType to getInternalFunction("consumeDoubleIntoVoid")
)
fun findVoidConsumer(type: IrType): IrSimpleFunctionSymbol =
consumePrimitiveIntoVoid[type] ?: consumeAnyIntoVoid
@@ -209,7 +209,9 @@ class WasmSymbols(
val intToLong = getInternalFunction("wasm_i64_extend_i32_s")
val rangeCheck = getInternalFunction("rangeCheck")
val assertFuncs = findFunctions(kotlinTopLevelPackage.memberScope, Name.identifier("assert")).map { symbolTable.referenceSimpleFunction(it) }
val assertFuncs = findFunctions(kotlinTopLevelPackage.memberScope, Name.identifier("assert")).map {
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
val boxIntrinsic: IrSimpleFunctionSymbol = getInternalFunction("boxIntrinsic")
val unboxIntrinsic: IrSimpleFunctionSymbol = getInternalFunction("unboxIntrinsic")
@@ -256,15 +258,15 @@ class WasmSymbols(
val kTypeStub = getInternalFunction("kTypeStub")
val arraysCopyInto = findFunctions(collectionsPackage.memberScope, Name.identifier("copyInto"))
.map { symbolTable.referenceSimpleFunction(it) }
.map { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
private val contentToString: List<IrSimpleFunctionSymbol> =
findFunctions(collectionsPackage.memberScope, Name.identifier("contentToString"))
.map { symbolTable.referenceSimpleFunction(it) }
.map { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
private val contentHashCode: List<IrSimpleFunctionSymbol> =
findFunctions(collectionsPackage.memberScope, Name.identifier("contentHashCode"))
.map { symbolTable.referenceSimpleFunction(it) }
.map { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
private fun findOverloadForReceiver(arrayType: IrType, overloadsList: List<IrSimpleFunctionSymbol>): IrSimpleFunctionSymbol =
overloadsList.first {
@@ -375,12 +377,12 @@ class WasmSymbols(
val tmp = findFunctions(ownerPackage.memberScope, Name.identifier(name))
if (tmp.isEmpty())
return null
return symbolTable.referenceSimpleFunction(tmp.single())
return symbolTable.descriptorExtension.referenceSimpleFunction(tmp.single())
}
private fun getInternalFunction(name: String) = getFunction(name, wasmInternalPackage)
private fun getIrClass(fqName: FqName): IrClassSymbol = symbolTable.referenceClass(getClass(fqName))
private fun getIrClass(fqName: FqName): IrClassSymbol = symbolTable.descriptorExtension.referenceClass(getClass(fqName))
private fun getInternalClass(name: String): IrClassSymbol = getIrClass(FqName("kotlin.wasm.internal.$name"))
fun getKFunctionType(type: IrType, list: List<IrType>): IrType {
return irBuiltIns.functionN(list.size).typeWith(list + type)
@@ -83,11 +83,15 @@ class IrBuiltInsOverDescriptors(
private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN)
override val operatorsPackageFragment: IrExternalPackageFragment =
IrExternalPackageFragmentImpl(symbolTable.referenceExternalPackageFragment(packageFragmentDescriptor), KOTLIN_INTERNAL_IR_FQN)
IrExternalPackageFragmentImpl(
symbolTable.descriptorExtension.referenceExternalPackageFragment(packageFragmentDescriptor),
KOTLIN_INTERNAL_IR_FQN
)
private fun ClassDescriptor.toIrSymbol(): IrClassSymbol {
return symbolTable.referenceClass(this)
return symbolTable.descriptorExtension.referenceClass(this)
}
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
private fun defineOperator(
@@ -104,7 +108,7 @@ class IrBuiltInsOverDescriptors(
)
}
val symbol = symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) {
val symbol = symbolTable.descriptorExtension.declareSimpleFunctionIfNotExists(operatorDescriptor) {
val operator = irFactory.createSimpleFunction(
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
@@ -198,8 +202,8 @@ class IrBuiltInsOverDescriptors(
)
}
return symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) { operatorSymbol ->
val typeParameter = symbolTable.declareGlobalTypeParameter(
return symbolTable.descriptorExtension.declareSimpleFunctionIfNotExists(operatorDescriptor) { operatorSymbol ->
val typeParameter = symbolTable.descriptorExtension.declareGlobalTypeParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
BUILTIN_OPERATOR,
typeParameterDescriptor
@@ -456,7 +460,7 @@ class IrBuiltInsOverDescriptors(
val booleanNot =
builtIns.boolean.unsubstitutedMemberScope.getContributedFunctions(Name.identifier("not"), NoLookupLocation.FROM_BACKEND).single()
override val booleanNotSymbol = symbolTable.referenceSimpleFunction(booleanNot)
override val booleanNotSymbol = symbolTable.descriptorExtension.referenceSimpleFunction(booleanNot)
override val eqeqeqSymbol = defineOperator(BuiltInOperatorNames.EQEQEQ, booleanType, listOf(anyNType, anyNType))
override val eqeqSymbol = defineOperator(BuiltInOperatorNames.EQEQ, booleanType, listOf(anyNType, anyNType), isIntrinsicConst = true)
@@ -481,17 +485,17 @@ class IrBuiltInsOverDescriptors(
override val intTimesSymbol: IrSimpleFunctionSymbol =
builtIns.int.unsubstitutedMemberScope.findFirstFunction("times") {
KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, int)
}.let { symbolTable.referenceSimpleFunction(it) }
}.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
override val intXorSymbol: IrSimpleFunctionSymbol =
builtIns.int.unsubstitutedMemberScope.findFirstFunction("xor") {
KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, int)
}.let { symbolTable.referenceSimpleFunction(it) }
}.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
override val intPlusSymbol: IrSimpleFunctionSymbol =
builtIns.int.unsubstitutedMemberScope.findFirstFunction("plus") {
KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, int)
}.let { symbolTable.referenceSimpleFunction(it) }
}.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
override val arrayOf = findFunctions(Name.identifier("arrayOf")).first {
it.descriptor.extensionReceiverParameter == null && it.descriptor.dispatchReceiverParameter == null &&
@@ -512,27 +516,27 @@ class IrBuiltInsOverDescriptors(
override fun findFunctions(name: Name, vararg packageNameSegments: String): Iterable<IrSimpleFunctionSymbol> =
builtInsPackage(*packageNameSegments).getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).map {
symbolTable.referenceSimpleFunction(it)
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
override fun findFunctions(name: Name, packageFqName: FqName): Iterable<IrSimpleFunctionSymbol> =
builtIns.builtInsModule.getPackage(packageFqName).memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).map {
symbolTable.referenceSimpleFunction(it)
symbolTable.descriptorExtension.referenceSimpleFunction(it)
}
override fun findProperties(name: Name, packageFqName: FqName): Iterable<IrPropertySymbol> =
builtIns.builtInsModule.getPackage(packageFqName).memberScope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND).map {
symbolTable.referenceProperty(it)
symbolTable.descriptorExtension.referenceProperty(it)
}
override fun findClass(name: Name, vararg packageNameSegments: String): IrClassSymbol? =
(builtInsPackage(*packageNameSegments).getContributedClassifier(
name,
NoLookupLocation.FROM_BACKEND
) as? ClassDescriptor)?.let { symbolTable.referenceClass(it) }
) as? ClassDescriptor)?.let { symbolTable.descriptorExtension.referenceClass(it) }
override fun findClass(name: Name, packageFqName: FqName): IrClassSymbol? =
findClassDescriptor(name, packageFqName)?.let { symbolTable.referenceClass(it) }
findClassDescriptor(name, packageFqName)?.let { symbolTable.descriptorExtension.referenceClass(it) }
fun findClassDescriptor(name: Name, packageFqName: FqName): ClassDescriptor? =
builtIns.builtInsModule.getPackage(packageFqName).memberScope.getContributedClassifier(
@@ -543,7 +547,7 @@ class IrBuiltInsOverDescriptors(
override fun findBuiltInClassMemberFunctions(builtInClass: IrClassSymbol, name: Name): Iterable<IrSimpleFunctionSymbol> =
builtInClass.descriptor.unsubstitutedMemberScope
.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND)
.map { symbolTable.referenceSimpleFunction(it) }
.map { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
private val binaryOperatorCache = mutableMapOf<Triple<Name, IrType, IrType>, IrSimpleFunctionSymbol>()
@@ -587,7 +591,7 @@ class IrBuiltInsOverDescriptors(
val result = mutableMapOf<T, IrSimpleFunctionSymbol>()
for (d in builtInsPackage(*packageNameSegments).getContributedFunctions(name, NoLookupLocation.FROM_BACKEND)) {
makeKey(d)?.let { key ->
result[key] = symbolTable.referenceSimpleFunction(d)
result[key] = symbolTable.descriptorExtension.referenceSimpleFunction(d)
}
}
return result
@@ -48,7 +48,7 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
fun functionN(n: Int) = functionN(n) { callback ->
val descriptor = functionClassDescriptor(n)
declareClass(descriptor) { symbol ->
descriptorExtension.declareClass(descriptor) { symbol ->
callback(symbol)
}
}
@@ -56,7 +56,7 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
fun kFunctionN(n: Int): IrClass {
return kFunctionN(n) { callback ->
val descriptor = kFunctionClassDescriptor(n)
declareClass(descriptor) { symbol ->
descriptorExtension.declareClass(descriptor) { symbol ->
callback(symbol)
}
}
@@ -64,14 +64,14 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
fun suspendFunctionN(n: Int): IrClass = suspendFunctionN(n) { callback ->
val descriptor = suspendFunctionClassDescriptor(n)
declareClass(descriptor) { symbol ->
descriptorExtension.declareClass(descriptor) { symbol ->
callback(symbol)
}
}
fun kSuspendFunctionN(n: Int): IrClass = kSuspendFunctionN(n) { callback ->
val descriptor = kSuspendFunctionClassDescriptor(n)
declareClass(descriptor) { symbol ->
descriptorExtension.declareClass(descriptor) { symbol ->
callback(symbol)
}
}
@@ -96,7 +96,7 @@ class IrDescriptorBasedFunctionFactory(
private val referenceFunctionsWhenKFunctionAreReferenced: Boolean = false,
) : IrAbstractDescriptorBasedFunctionFactory() {
val getPackageFragment =
getPackageFragment ?: symbolTable::declareExternalPackageFragmentIfNotExists
getPackageFragment ?: symbolTable.descriptorExtension::declareExternalPackageFragmentIfNotExists
// TODO: Lazieness
@@ -107,8 +107,10 @@ class IrDescriptorBasedFunctionFactory(
private val irFactory: IrFactory get() = symbolTable.irFactory
val functionClass = symbolTable.referenceClass(irBuiltIns.builtIns.getBuiltInClassByFqName(FqName("kotlin.Function")))
val kFunctionClass = symbolTable.referenceClass(irBuiltIns.builtIns.getBuiltInClassByFqName(FqName("kotlin.reflect.KFunction")))
val functionClass =
symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.getBuiltInClassByFqName(FqName("kotlin.Function")))
val kFunctionClass =
symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.getBuiltInClassByFqName(FqName("kotlin.reflect.KFunction")))
override fun functionClassDescriptor(arity: Int): FunctionClassDescriptor =
irBuiltIns.builtIns.getFunction(arity) as FunctionClassDescriptor
@@ -190,7 +192,7 @@ class IrDescriptorBasedFunctionFactory(
getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BACKEND).first()
}
}
return symbolTable.declareSimpleFunction(descriptor, factory).symbol
return symbolTable.descriptorExtension.declareSimpleFunction(descriptor, factory).symbol
}
override fun FunctionDescriptor.valueParameterDescriptor(index: Int): ValueParameterDescriptor {
@@ -406,7 +408,7 @@ class IrDescriptorBasedFunctionFactory(
fun createFakeOverrideFunction(descriptor: FunctionDescriptor, property: IrPropertySymbol?): IrSimpleFunction {
val returnType = descriptor.returnType?.let { toIrType(it) } ?: error("No return type for $descriptor")
val newFunction = symbolTable.declareSimpleFunction(descriptor) {
val newFunction = symbolTable.descriptorExtension.declareSimpleFunction(descriptor) {
descriptor.run {
irFactory.createSimpleFunction(
startOffset = offset,
@@ -430,7 +432,8 @@ class IrDescriptorBasedFunctionFactory(
}
newFunction.parent = this
newFunction.overriddenSymbols = descriptor.overriddenDescriptors.memoryOptimizedMap { symbolTable.referenceSimpleFunction(it.original) }
newFunction.overriddenSymbols =
descriptor.overriddenDescriptors.memoryOptimizedMap { symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
newFunction.dispatchReceiverParameter = descriptor.dispatchReceiverParameter?.let { newFunction.createValueParameter(it) }
newFunction.extensionReceiverParameter = descriptor.extensionReceiverParameter?.let { newFunction.createValueParameter(it) }
newFunction.contextReceiverParametersCount = descriptor.contextReceiverParameters.size
@@ -444,7 +447,7 @@ class IrDescriptorBasedFunctionFactory(
}
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
return symbolTable.declareProperty(descriptor) {
return symbolTable.descriptorExtension.declareProperty(descriptor) {
irFactory.createProperty(
startOffset = offset,
endOffset = offset,
@@ -32,7 +32,7 @@ internal class AnonymousInitializerGenerator(
ktAnonymousInitializer: KtAnonymousInitializer,
irClass: IrClass
): IrAnonymousInitializer =
context.symbolTable.declareAnonymousInitializer(
context.symbolTable.descriptorExtension.declareAnonymousInitializer(
ktAnonymousInitializer.startOffsetSkippingComments, ktAnonymousInitializer.endOffset,
IrDeclarationOrigin.DEFINED, irClass.descriptor
).buildWithScope { irAnonymousInitializer ->
@@ -79,7 +79,7 @@ private fun StatementGenerator.generateContextReceiverForDelegatingConstructorCa
return object : ExpressionValue(irReceiverType) {
override fun load(): IrExpression = IrGetValueImpl(
defaultStartOffset, defaultEndOffset, irReceiverType,
context.symbolTable.referenceValueParameter(receiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(receiverParameter)
)
}
}
@@ -114,7 +114,7 @@ private fun StatementGenerator.generateReceiver(defaultStartOffset: Int, default
else
IrGetValueImpl(
defaultStartOffset, defaultEndOffset, irReceiverType,
context.symbolTable.referenceValueParameter(receiverClassDescriptor.thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(receiverClassDescriptor.thisAsReceiverParameter)
)
}
is ContextClassReceiver -> loadContextReceiver(receiver, defaultStartOffset, defaultEndOffset)
@@ -127,7 +127,7 @@ private fun StatementGenerator.generateReceiver(defaultStartOffset: Int, default
is ExtensionReceiver -> {
IrGetValueImpl(
defaultStartOffset, defaultStartOffset, irReceiverType,
context.symbolTable.referenceValueParameter(receiver.declarationDescriptor.extensionReceiverParameter!!)
context.symbolTable.descriptorExtension.referenceValueParameter(receiver.declarationDescriptor.extensionReceiverParameter!!)
)
}
is ContextReceiver -> {
@@ -135,7 +135,7 @@ private fun StatementGenerator.generateReceiver(defaultStartOffset: Int, default
.single { it.value == receiver.original }
IrGetValueImpl(
defaultStartOffset, defaultStartOffset, irReceiverType,
context.symbolTable.referenceValueParameter(receiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(receiverParameter)
)
}
else ->
@@ -153,7 +153,7 @@ internal fun StatementGenerator.loadContextReceiver(
val thisReceiver = IrGetValueImpl(
defaultStartOffset, defaultEndOffset,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValue(thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValue(thisAsReceiverParameter)
)
return IrGetFieldImpl(
@@ -176,19 +176,19 @@ internal fun StatementGenerator.generateSingletonReference(
DescriptorUtils.isObject(descriptor) ->
IrGetObjectValueImpl(
startOffset, endOffset, irType,
context.symbolTable.referenceClass(descriptor)
context.symbolTable.descriptorExtension.referenceClass(descriptor)
)
DescriptorUtils.isEnumEntry(descriptor) ->
IrGetEnumValueImpl(
startOffset, endOffset, irType,
context.symbolTable.referenceEnumEntry(descriptor)
context.symbolTable.descriptorExtension.referenceEnumEntry(descriptor)
)
else -> {
val companionObjectDescriptor = descriptor.companionObjectDescriptor
?: throw java.lang.AssertionError("Class value without companion object: $descriptor")
IrGetObjectValueImpl(
startOffset, endOffset, irType,
context.symbolTable.referenceClass(companionObjectDescriptor)
context.symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
)
}
}
@@ -287,7 +287,7 @@ private fun StatementGenerator.generateReceiverForCalleeImportedFromObject(
return generateExpressionValue(objectType) {
IrGetObjectValueImpl(
startOffset, endOffset, objectType,
context.symbolTable.referenceClass(objectDescriptor)
context.symbolTable.descriptorExtension.referenceClass(objectDescriptor)
)
}
}
@@ -473,7 +473,7 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
.getContributedFunctions(OperatorNameConventions.INVOKE, NoLookupLocation.FROM_BACKEND)
.find { it.valueParameters.size == valueArgumentsCount }
?: error("No matching operator fun 'invoke' for suspend conversion: funType=$funType, suspendFunType=$suspendFunType")
val invokeSymbol = context.symbolTable.referenceSimpleFunction(invokeDescriptor.original)
val invokeSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(invokeDescriptor.original)
irAdapterFun.body = irBlockBody(startOffset, endOffset) {
val irAdapteeCall = IrCallImpl(
@@ -201,8 +201,8 @@ internal class AssignmentGenerator(statementGenerator: StatementGenerator) : Sta
context,
startOffset, endOffset,
descriptor.type.toIrType(),
descriptor.getter?.let { context.symbolTable.referenceDeclaredFunction(it) },
descriptor.setter?.let { context.symbolTable.referenceDeclaredFunction(it) },
descriptor.getter?.let { context.symbolTable.descriptorExtension.referenceDeclaredFunction(it) },
descriptor.setter?.let { context.symbolTable.descriptorExtension.referenceDeclaredFunction(it) },
origin
)
else
@@ -251,7 +251,7 @@ internal class AssignmentGenerator(statementGenerator: StatementGenerator) : Sta
VariableLValue(
context,
ktExpression.startOffsetSkippingComments, ktExpression.endOffset,
context.symbolTable.referenceValue(descriptor),
context.symbolTable.descriptorExtension.referenceValue(descriptor),
descriptor.type.toIrType(),
origin
)
@@ -266,7 +266,7 @@ internal class AssignmentGenerator(statementGenerator: StatementGenerator) : Sta
context,
ktExpression.startOffsetSkippingComments, ktExpression.endOffset,
descriptor.type.toIrType(),
context.symbolTable.referenceField(descriptor),
context.symbolTable.descriptorExtension.referenceField(descriptor),
receiverValue, origin
)
@@ -338,12 +338,12 @@ internal class AssignmentGenerator(statementGenerator: StatementGenerator) : Sta
val setterDescriptor = unwrappedPropertyDescriptor.unwrappedSetMethod
?.takeUnless { it.visibility == DescriptorVisibilities.INVISIBLE_FAKE }
val getterSymbol = getterDescriptor?.let { context.symbolTable.referenceSimpleFunction(it.original) }
val setterSymbol = setterDescriptor?.let { context.symbolTable.referenceSimpleFunction(it.original) }
val getterSymbol = getterDescriptor?.let { context.symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
val setterSymbol = setterDescriptor?.let { context.symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
val propertyIrType = resultingDescriptor.type.toIrType()
return if (getterSymbol != null || setterSymbol != null) {
val superQualifierSymbol = superQualifier?.let { context.symbolTable.referenceClass(it) }
val superQualifierSymbol = superQualifier?.let { context.symbolTable.descriptorExtension.referenceClass(it) }
val typeArgumentsList =
typeArgumentsMap?.let { typeArguments ->
candidateDescriptor.typeParameters.map {
@@ -369,12 +369,16 @@ internal class AssignmentGenerator(statementGenerator: StatementGenerator) : Sta
)
} else {
val superQualifierSymbol = (superQualifier
?: unwrappedPropertyDescriptor.containingDeclaration as? ClassDescriptor)?.let { context.symbolTable.referenceClass(it) }
?: unwrappedPropertyDescriptor.containingDeclaration as? ClassDescriptor)?.let {
context.symbolTable.descriptorExtension.referenceClass(
it
)
}
FieldPropertyLValue(
context,
scope,
ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin,
context.symbolTable.referenceField(unwrappedPropertyDescriptor.resolveFakeOverride().original),
context.symbolTable.descriptorExtension.referenceField(unwrappedPropertyDescriptor.resolveFakeOverride().original),
unwrappedPropertyDescriptor,
propertyIrType,
propertyReceiver,
@@ -105,7 +105,7 @@ internal class BodyGenerator(
val parameterValue = VariableLValue(
context,
ktDestructuringDeclaration.startOffsetSkippingComments, ktDestructuringDeclaration.endOffset,
context.symbolTable.referenceValue(valueParameter),
context.symbolTable.descriptorExtension.referenceValue(valueParameter),
valueParameter.type.toIrType(),
IrStatementOrigin.DESTRUCTURING_DECLARATION
)
@@ -216,7 +216,7 @@ internal class BodyGenerator(
irBlockBody.statements.add(
IrInstanceInitializerCallImpl(
ktClassOrObject.pureStartOffset, ktClassOrObject.pureEndOffset,
context.symbolTable.referenceClass(classDescriptor),
context.symbolTable.descriptorExtension.referenceClass(classDescriptor),
context.irBuiltIns.unitType
)
)
@@ -233,7 +233,7 @@ internal class BodyGenerator(
irBlockBody.statements.add(
IrInstanceInitializerCallImpl(
ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset,
context.symbolTable.referenceClass(classDescriptor),
context.symbolTable.descriptorExtension.referenceClass(classDescriptor),
context.irBuiltIns.unitType
)
)
@@ -300,7 +300,7 @@ internal class BodyGenerator(
IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
ktElement.pureStartOffset, ktElement.pureEndOffset,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(anyConstructor)
context.symbolTable.descriptorExtension.referenceConstructor(anyConstructor)
)
)
}
@@ -311,7 +311,7 @@ internal class BodyGenerator(
IrEnumConstructorCallImpl.fromSymbolDescriptor(
ktElement.startOffsetSkippingComments, ktElement.endOffset,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(enumConstructor),
context.symbolTable.descriptorExtension.referenceConstructor(enumConstructor),
1 // kotlin.Enum<T> has a single type parameter
).apply {
putTypeArgument(0, classDescriptor.defaultType.toIrType())
@@ -329,7 +329,7 @@ internal class BodyGenerator(
return IrEnumConstructorCallImpl.fromSymbolDescriptor(
ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(enumEntryConstructor),
context.symbolTable.descriptorExtension.referenceConstructor(enumEntryConstructor),
0 // enums can't be generic
)
}
@@ -379,7 +379,7 @@ internal class BodyGenerator(
UNDEFINED_OFFSET,
UNDEFINED_OFFSET,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValue(thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValue(thisAsReceiverParameter)
),
IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irValueParameter.type, irValueParameter.symbol),
context.irBuiltIns.unitType
@@ -114,7 +114,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
}
is SyntheticFieldDescriptor -> {
val receiver = statementGenerator.generateBackingFieldReceiver(startOffset, endOffset, resolvedCall, descriptor)
val field = statementGenerator.context.symbolTable.referenceField(descriptor.propertyDescriptor)
val field = statementGenerator.context.symbolTable.descriptorExtension.referenceField(descriptor.propertyDescriptor)
val fieldType = descriptor.propertyDescriptor.type.toIrType()
IrGetFieldImpl(startOffset, endOffset, field, fieldType, receiver?.load())
}
@@ -135,7 +135,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
) =
if (descriptor is LocalVariableDescriptor && descriptor.isDelegated) {
val getterDescriptor = descriptor.getter!!
val getterSymbol = context.symbolTable.referenceSimpleFunction(getterDescriptor.original)
val getterSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(getterDescriptor.original)
IrCallImpl.fromSymbolDescriptor(
startOffset, endOffset, descriptor.type.toIrType(), getterSymbol, origin = origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY
).apply {
@@ -144,7 +144,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
}
} else {
val getValue =
IrGetValueImpl(startOffset, endOffset, descriptor.type.toIrType(), context.symbolTable.referenceValue(descriptor), origin)
IrGetValueImpl(startOffset, endOffset, descriptor.type.toIrType(), context.symbolTable.descriptorExtension.referenceValue(descriptor), origin)
if (irType != null) {
IrTypeOperatorCallImpl(startOffset, endOffset, irType, IrTypeOperator.IMPLICIT_CAST, irType, getValue)
} else {
@@ -156,7 +156,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
call.callReceiver.call { dispatchReceiver, extensionReceiver, contextReceivers ->
val descriptor = call.descriptor as? ClassConstructorDescriptor
?: throw AssertionError("Class constructor expected: ${call.descriptor}")
val constructorSymbol = context.symbolTable.referenceConstructor(descriptor.original)
val constructorSymbol = context.symbolTable.descriptorExtension.referenceConstructor(descriptor.original)
val irCall = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
startOffset, endOffset,
context.irBuiltIns.unitType,
@@ -182,7 +182,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
if (extensionReceiver != null) throw AssertionError("Extension receiver should be null: $extensionReceiver")
if (contextReceivers.isNotEmpty()) throw AssertionError("Context receivers should be empty: $contextReceivers")
val descriptor = constructorDescriptor.original
val constructorSymbol = context.symbolTable.referenceConstructor(descriptor)
val constructorSymbol = context.symbolTable.descriptorExtension.referenceConstructor(descriptor)
val returnType = constructorDescriptor.returnType.toIrType()
val irCall = IrEnumConstructorCallImpl(
startOffset, endOffset, returnType, constructorSymbol, descriptor.typeParametersCount, descriptor.valueParameters.size
@@ -204,10 +204,10 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
return if (getMethodDescriptor == null) {
val superQualifierSymbol = (call.superQualifier ?: descriptor.containingDeclaration as? ClassDescriptor)?.let {
if (it is ScriptDescriptor) null // otherwise it creates a reference to script as class; TODO: check if correct
else context.symbolTable.referenceClass(it)
else context.symbolTable.descriptorExtension.referenceClass(it)
}
val fieldSymbol =
context.symbolTable.referenceField(context.extensions.remapDebuggerFieldPropertyDescriptor(descriptor.resolveFakeOverride().original))
context.symbolTable.descriptorExtension.referenceField(context.extensions.remapDebuggerFieldPropertyDescriptor(descriptor.resolveFakeOverride().original))
call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue, _ ->
IrGetFieldImpl(
startOffset, endOffset,
@@ -219,7 +219,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
).also { context.callToSubstitutedDescriptorMap[it] = descriptor }
}
} else {
val superQualifierSymbol = call.superQualifier?.let { context.symbolTable.referenceClass(it) }
val superQualifierSymbol = call.superQualifier?.let { context.symbolTable.descriptorExtension.referenceClass(it) }
call.callReceiver.adjustForCallee(getMethodDescriptor)
.call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
if (descriptor.isDynamic()) {
@@ -232,7 +232,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
dispatchReceiver
)
} else {
val getterSymbol = context.symbolTable.referenceSimpleFunction(getMethodDescriptor.original)
val getterSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(getMethodDescriptor.original)
IrCallImpl(
startOffset, endOffset,
irType,
@@ -287,7 +287,7 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
): IrExpression =
call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
val irType = constructorDescriptor.returnType.toIrType()
val originalSymbol = context.symbolTable.referenceConstructor(constructorDescriptor.original)
val originalSymbol = context.symbolTable.descriptorExtension.referenceConstructor(constructorDescriptor.original)
IrConstructorCallImpl.fromSymbolDescriptor(
startOffset, endOffset,
@@ -315,13 +315,13 @@ internal class CallGenerator(statementGenerator: StatementGenerator) : Statement
if (functionDescriptor.isDynamic()) {
generateDynamicFunctionCall(startOffset, endOffset, functionDescriptor, call, dispatchReceiverValue, extensionReceiverValue)
} else {
val originalSymbol = context.symbolTable.referenceSimpleFunction(functionDescriptor.original)
val originalSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(functionDescriptor.original)
IrCallImpl.fromSymbolDescriptor(
startOffset, endOffset,
functionDescriptor.returnType!!.toIrType(),
originalSymbol,
origin = origin,
superQualifierSymbol = call.superQualifier?.let { context.symbolTable.referenceClass(it) }
superQualifierSymbol = call.superQualifier?.let { context.symbolTable.descriptorExtension.referenceClass(it) }
).run {
context.callToSubstitutedDescriptorMap[this] = functionDescriptor
putTypeArguments(call.typeArguments) { it.toIrType() }
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.util.*
@@ -68,7 +69,7 @@ internal class ClassGenerator(
val visibility = visibility_ ?: classDescriptor.visibility
val modality = getEffectiveModality(ktClassOrObject, classDescriptor)
return context.symbolTable.declareClass(classDescriptor) {
return context.symbolTable.descriptorExtension.declareClass(classDescriptor) { it: IrClassSymbol ->
context.irFactory.createIrClassFromDescriptor(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor,
context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality
@@ -123,7 +124,7 @@ internal class ClassGenerator(
generateAdditionalMembersForEnumClass(irClass)
}
irClass.sealedSubclasses = classDescriptor.sealedSubclasses.map { context.symbolTable.referenceClass(it) }
irClass.sealedSubclasses = classDescriptor.sealedSubclasses.map { context.symbolTable.descriptorExtension.referenceClass(it) }
}
}
@@ -225,7 +226,7 @@ internal class ClassGenerator(
} else {
null
}
context.symbolTable.declareField(
context.symbolTable.descriptorExtension.declareField(
ktDelegateExpression.startOffsetSkippingComments, ktDelegateExpression.endOffset,
IrDeclarationOrigin.DELEGATE,
delegateDescriptor, delegateDescriptor.type.toIrType(),
@@ -277,10 +278,12 @@ internal class ClassGenerator(
val startOffset = irDelegate.startOffset
val endOffset = irDelegate.endOffset
val irProperty = context.symbolTable.declareProperty(
startOffset, endOffset, IrDeclarationOrigin.DELEGATED_MEMBER,
delegatedDescriptor
)
val irProperty =
context.symbolTable.descriptorExtension.declareProperty(
startOffset, endOffset, IrDeclarationOrigin.DELEGATED_MEMBER,
delegatedDescriptor,
delegatedDescriptor.isDelegated
)
irProperty.getter = generateDelegatedFunction(irDelegate, delegatedDescriptor.getter!!, delegateToDescriptor.getter!!)
@@ -298,7 +301,7 @@ internal class ClassGenerator(
private fun IrProperty.generateOverrides(propertyDescriptor: PropertyDescriptor) {
overriddenSymbols =
propertyDescriptor.overriddenDescriptors.map { overriddenPropertyDescriptor ->
context.symbolTable.referenceProperty(overriddenPropertyDescriptor.original)
context.symbolTable.descriptorExtension.referenceProperty(overriddenPropertyDescriptor.original)
}
}
@@ -345,7 +348,7 @@ internal class ClassGenerator(
val substitutedDelegateTo = substituteDelegateToDescriptor(delegatedDescriptor, delegateToDescriptor)
val returnType = substitutedDelegateTo.returnType!!
val delegateToSymbol = context.symbolTable.referenceSimpleFunction(delegateToDescriptor.original)
val delegateToSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(delegateToDescriptor.original)
val irCall = IrCallImpl.fromSymbolDescriptor(
startOffset, endOffset,
@@ -485,7 +488,7 @@ internal class ClassGenerator(
) {
ktClassOrObject.primaryConstructor?.let { ktPrimaryConstructor ->
irPrimaryConstructor.valueParameters.forEach {
context.symbolTable.introduceValueParameter(it)
context.symbolTable.descriptorExtension.introduceValueParameter(it)
}
ktPrimaryConstructor.valueParameters.forEachIndexed { i, ktParameter ->
@@ -523,10 +526,10 @@ internal class ClassGenerator(
// TODO this is a hack, pass declaration parent through generator chain instead
val enumClassDescriptor = enumEntryDescriptor.containingDeclaration as ClassDescriptor
val enumClassSymbol = context.symbolTable.referenceClass(enumClassDescriptor)
val enumClassSymbol = context.symbolTable.descriptorExtension.referenceClass(enumClassDescriptor)
val irEnumClass = enumClassSymbol.owner
return context.symbolTable.declareEnumEntry(
return context.symbolTable.descriptorExtension.declareEnumEntry(
ktEnumEntry.startOffsetSkippingComments,
ktEnumEntry.endOffset,
IrDeclarationOrigin.DEFINED,
@@ -161,7 +161,7 @@ internal class DataClassMembersGenerator(
val dataClassConstructor = classDescriptor.unsubstitutedPrimaryConstructor
?: throw AssertionError("Data class should have a primary constructor: $classDescriptor")
val constructorSymbol = context.symbolTable.referenceConstructor(dataClassConstructor)
val constructorSymbol = context.symbolTable.descriptorExtension.referenceConstructor(dataClassConstructor)
irDataClassMembersGenerator.generateCopyFunction(function, constructorSymbol)
}
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset
@@ -109,7 +110,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
private fun generateTypeAliasDeclaration(ktTypeAlias: KtTypeAlias): IrTypeAlias =
with(getOrFail(BindingContext.TYPE_ALIAS, ktTypeAlias)) {
context.symbolTable.declareTypeAlias(this) { symbol ->
context.symbolTable.descriptorExtension.declareTypeAlias(this) { symbol: IrTypeAliasSymbol ->
context.irFactory.createTypeAlias(
startOffset = ktTypeAlias.startOffsetSkippingComments,
endOffset = ktTypeAlias.endOffset,
@@ -130,7 +131,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
from: List<TypeParameterDescriptor>
) {
generateTypeParameterDeclarations(irTypeParametersOwner, from) { startOffset, endOffset, typeParameterDescriptor ->
context.symbolTable.declareGlobalTypeParameter(
context.symbolTable.descriptorExtension.declareGlobalTypeParameter(
startOffset,
endOffset,
IrDeclarationOrigin.DEFINED,
@@ -60,7 +60,7 @@ internal class DelegatedPropertyGenerator(
val kPropertyType = getKPropertyTypeForDelegatedProperty(propertyDescriptor)
val irProperty = context.symbolTable.declareProperty(
val irProperty = context.symbolTable.descriptorExtension.declareProperty(
ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
propertyDescriptor,
isDelegated = true
@@ -139,7 +139,7 @@ internal class DelegatedPropertyGenerator(
val endOffset = ktDelegate.endOffset
val origin = IrDeclarationOrigin.PROPERTY_DELEGATE
val type = delegateDescriptor.type.toIrType()
context.symbolTable.declareField(
context.symbolTable.descriptorExtension.declareField(
startOffset, endOffset, origin, delegateDescriptor, type
) {
context.irFactory.createField(
@@ -221,7 +221,7 @@ internal class DelegatedPropertyGenerator(
IrGetValueImpl(
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(thisAsReceiverParameter)
)
}
}
@@ -87,10 +87,11 @@ class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : De
} ?: return
irClass.addMember(
context.symbolTable.declareProperty(
context.symbolTable.descriptorExtension.declareProperty(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER,
entriesProperty
entriesProperty,
entriesProperty.isDelegated
).also { irProperty ->
irProperty.getter = context.symbolTable.declareSimpleFunctionWithOverrides(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
@@ -42,10 +42,10 @@ private class ExpectDependencyGenerator(
override fun visitClass(declaration: IrClass) {
declaration.forEachExpect { expectDescriptor ->
val symbol = symbolTable.referenceClass(expectDescriptor as ClassDescriptor)
val symbol = symbolTable.descriptorExtension.referenceClass(expectDescriptor as ClassDescriptor)
expectDescriptorToSymbol[expectDescriptor] = symbol
expectDescriptor.constructors.forEach {
expectDescriptorToSymbol[it] = symbolTable.referenceConstructor(it as ClassConstructorDescriptor)
expectDescriptorToSymbol[it] = symbolTable.descriptorExtension.referenceConstructor(it as ClassConstructorDescriptor)
}
}
super.visitDeclaration(declaration)
@@ -53,7 +53,7 @@ private class ExpectDependencyGenerator(
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
declaration.forEachExpect {
val symbol = symbolTable.referenceSimpleFunction(it as FunctionDescriptor)
val symbol = symbolTable.descriptorExtension.referenceSimpleFunction(it as FunctionDescriptor)
expectDescriptorToSymbol[it] = symbol
}
super.visitDeclaration(declaration)
@@ -61,7 +61,7 @@ private class ExpectDependencyGenerator(
override fun visitConstructor(declaration: IrConstructor) {
declaration.forEachExpect {
val symbol = symbolTable.referenceConstructor(it as ClassConstructorDescriptor)
val symbol = symbolTable.descriptorExtension.referenceConstructor(it as ClassConstructorDescriptor)
expectDescriptorToSymbol[it] = symbol
}
@@ -70,7 +70,7 @@ private class ExpectDependencyGenerator(
override fun visitProperty(declaration: IrProperty) {
declaration.forEachExpect {
val symbol = symbolTable.referenceProperty(it as PropertyDescriptor)
val symbol = symbolTable.descriptorExtension.referenceProperty(it as PropertyDescriptor)
expectDescriptorToSymbol[it] = symbol
}
super.visitDeclaration(declaration)
@@ -78,7 +78,7 @@ private class ExpectDependencyGenerator(
override fun visitEnumEntry(declaration: IrEnumEntry) {
declaration.forEachExpect {
val symbol = symbolTable.referenceEnumEntry(it as ClassDescriptor)
val symbol = symbolTable.descriptorExtension.referenceEnumEntry(it as ClassDescriptor)
expectDescriptorToSymbol[it] = symbol
}
@@ -88,7 +88,7 @@ private class ExpectDependencyGenerator(
override fun visitTypeAlias(declaration: IrTypeAlias) {
declaration.forEachExpect {
val symbol = when (it) {
is ClassDescriptor -> symbolTable.referenceClass(it)
is ClassDescriptor -> symbolTable.descriptorExtension.referenceClass(it)
else -> error("Unexpected expect for actual type alias: $it")
}
expectDescriptorToSymbol[it] = symbol
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
import org.jetbrains.kotlin.name.Name
@@ -179,7 +180,7 @@ internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : D
irAccessor.symbol,
IrGetFieldImpl(
startOffset, endOffset,
context.symbolTable.referenceField(property),
context.symbolTable.descriptorExtension.referenceField(property),
property.type.toIrType(),
receiver
)
@@ -204,7 +205,7 @@ internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : D
irBody.statements.add(
IrSetFieldImpl(
startOffset, endOffset,
context.symbolTable.referenceField(property),
context.symbolTable.descriptorExtension.referenceField(property),
receiver,
IrGetValueImpl(startOffset, endOffset, irValueParameter.type, irValueParameter.symbol),
context.irBuiltIns.unitType
@@ -223,7 +224,7 @@ internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : D
IrGetValueImpl(
irAccessor.startOffset, irAccessor.endOffset,
thisAsReceiverParameter.type.toIrType(),
context.symbolTable.referenceValue(thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValue(thisAsReceiverParameter)
)
}
else -> null
@@ -281,7 +282,7 @@ internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : D
val startOffset = ktConstructorElement.getStartOffsetOfConstructorDeclarationKeywordOrNull() ?: ktConstructorElement.pureStartOffset
val endOffset = ktConstructorElement.pureEndOffset
val origin = IrDeclarationOrigin.DEFINED
return context.symbolTable.declareConstructor(constructorDescriptor) {
return context.symbolTable.descriptorExtension.declareConstructor(constructorDescriptor) {
with(constructorDescriptor) {
context.irFactory.createConstructor(
startOffset = startOffset,
@@ -50,7 +50,7 @@ internal class LocalClassGenerator(statementGenerator: StatementGenerator) : Sta
irBlock.statements.add(
IrConstructorCallImpl.fromSymbolDescriptor(
startOffset, endOffset, objectLiteralType,
context.symbolTable.referenceConstructor(objectConstructor),
context.symbolTable.descriptorExtension.referenceConstructor(objectConstructor),
IrStatementOrigin.OBJECT_LITERAL
)
)
@@ -192,7 +192,7 @@ internal class LoopExpressionGenerator(statementGenerator: StatementGenerator) :
val irLoopParameter =
if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null) {
val loopParameter = getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter)
context.symbolTable.declareVariable(
context.symbolTable.descriptorExtension.declareVariable(
ktLoopParameter.startOffsetSkippingComments, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE,
loopParameter, loopParameter.type.toIrType(),
irNextCall
@@ -123,7 +123,7 @@ open class ModuleGenerator(
gen.visitClassDescriptor(ErrorUtils.errorClass, fakeFile)
gen.visitConstructorDescriptor(
ErrorUtils.errorClass.unsubstitutedPrimaryConstructor!!,
context.symbolTable.referenceClass(ErrorUtils.errorClass).owner,
context.symbolTable.descriptorExtension.referenceClass(ErrorUtils.errorClass).owner,
)
}
}
@@ -416,7 +416,7 @@ internal class OperatorExpressionGenerator(statementGenerator: StatementGenerato
functionDescriptor: FunctionDescriptor,
receiver: IrExpression
): IrExpression {
val originalSymbol = context.symbolTable.referenceSimpleFunction(functionDescriptor.original)
val originalSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(functionDescriptor.original)
return IrCallImpl.fromSymbolDescriptor(
startOffset,
endOffset,
@@ -48,7 +48,7 @@ internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : D
fun generateDestructuringDeclarationEntryAsPropertyDeclaration(ktEntry: KtDestructuringDeclarationEntry): IrProperty {
val propertyDescriptor = getPropertyDescriptor(ktEntry)
return context.symbolTable.declareProperty(
return context.symbolTable.descriptorExtension.declareProperty(
ktEntry.startOffsetSkippingComments, ktEntry.endOffset,
IrDeclarationOrigin.DEFINED,
propertyDescriptor,
@@ -99,7 +99,7 @@ internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : D
generateSyntheticAccessors: Boolean,
generateInitializer: (IrField) -> IrExpressionBody?
): IrProperty {
return context.symbolTable.declareProperty(
return context.symbolTable.descriptorExtension.declareProperty(
ktDeclarationContainer.startOffsetSkippingComments, ktDeclarationContainer.endOffset,
IrDeclarationOrigin.DEFINED,
propertyDescriptor,
@@ -181,7 +181,7 @@ internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : D
hasBackingField(bindingContext) || context.extensions.isPropertyWithPlatformField(this)
private fun generateSimpleProperty(ktProperty: KtVariableDeclaration, propertyDescriptor: PropertyDescriptor): IrProperty =
context.symbolTable.declareProperty(
context.symbolTable.descriptorExtension.declareProperty(
ktProperty.startOffsetSkippingComments, ktProperty.endOffset,
IrDeclarationOrigin.DEFINED,
propertyDescriptor,
@@ -228,7 +228,7 @@ internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : D
val startOffset = ktElement.pureStartOffsetOrUndefined
val endOffset = ktElement.pureEndOffsetOrUndefined
return context.symbolTable.declareProperty(startOffset, endOffset, IrDeclarationOrigin.FAKE_OVERRIDE, propertyDescriptor).apply {
return context.symbolTable.descriptorExtension.declareProperty(startOffset, endOffset, IrDeclarationOrigin.FAKE_OVERRIDE, propertyDescriptor, propertyDescriptor.isDelegated).apply {
this.getter = propertyDescriptor.getter?.let {
FunctionGenerator(declarationGenerator).generateFakeOverrideFunction(it, ktElement)
}
@@ -243,7 +243,7 @@ internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : D
private fun IrProperty.generateOverrides(propertyDescriptor: PropertyDescriptor) {
overriddenSymbols =
propertyDescriptor.overriddenDescriptors.map { overriddenPropertyDescriptor ->
context.symbolTable.referenceProperty(overriddenPropertyDescriptor.original)
context.symbolTable.descriptorExtension.referenceProperty(overriddenPropertyDescriptor.original)
}
}
@@ -546,12 +546,12 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
variableDescriptor.getter ?: throw AssertionError("Local delegated property should have a getter: $variableDescriptor")
val setterDescriptor = variableDescriptor.setter
val getterSymbol = context.symbolTable.referenceSimpleFunction(getterDescriptor)
val setterSymbol = setterDescriptor?.let { context.symbolTable.referenceSimpleFunction(it) }
val getterSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(getterDescriptor)
val setterSymbol = setterDescriptor?.let { context.symbolTable.descriptorExtension.referenceSimpleFunction(it) }
return IrLocalDelegatedPropertyReferenceImpl(
startOffset, endOffset, type.toIrType(),
context.symbolTable.referenceLocalDelegatedProperty(variableDescriptor),
context.symbolTable.descriptorExtension.referenceLocalDelegatedProperty(variableDescriptor),
irDelegateSymbol, getterSymbol, setterSymbol,
origin
).apply {
@@ -566,16 +566,16 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
)
private fun resolvePropertySymbol(descriptor: PropertyDescriptor, mutable: Boolean): DelegatedPropertySymbols {
val symbol = context.symbolTable.referenceProperty(descriptor)
val symbol = context.symbolTable.descriptorExtension.referenceProperty(descriptor)
val syntheticJavaProperty = context.extensions.unwrapSyntheticJavaProperty(descriptor)
if (syntheticJavaProperty != null) {
val (getMethod, setMethod) = syntheticJavaProperty
// This is the special case of synthetic java properties when requested property doesn't even exist but IR design
// requires its symbol to be bound so let do that
// see `irText/declarations/provideDelegate/javaDelegate.kt` and KT-45297
val getterSymbol = context.symbolTable.referenceSimpleFunction(getMethod)
val getterSymbol = context.symbolTable.descriptorExtension.referenceSimpleFunction(getMethod)
val setterSymbol = if (mutable) setMethod?.let {
context.symbolTable.referenceSimpleFunction(it)
context.symbolTable.descriptorExtension.referenceSimpleFunction(it)
} else null
if (!symbol.isBound) {
val offset = UNDEFINED_OFFSET
@@ -601,8 +601,8 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
}
return DelegatedPropertySymbols(symbol, getterSymbol, setterSymbol)
} else {
val getterSymbol = descriptor.getter?.let { context.symbolTable.referenceSimpleFunction(it) }
val setterSymbol = if (mutable) descriptor.setter?.let { context.symbolTable.referenceSimpleFunction(it) } else null
val getterSymbol = descriptor.getter?.let { context.symbolTable.descriptorExtension.referenceSimpleFunction(it) }
val setterSymbol = if (mutable) descriptor.setter?.let { context.symbolTable.descriptorExtension.referenceSimpleFunction(it) } else null
return DelegatedPropertySymbols(symbol, getterSymbol, setterSymbol)
}
}
@@ -638,7 +638,7 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
when {
originalProperty.isDelegated -> null
originalProperty.getter != null -> null
else -> context.symbolTable.referenceField(originalProperty)
else -> context.symbolTable.descriptorExtension.referenceField(originalProperty)
}
private fun generateFunctionReference(
@@ -47,7 +47,7 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
fun generateScriptDeclaration(ktScript: KtScript): IrDeclaration? {
val descriptor = getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktScript) as ScriptDescriptor
return context.symbolTable.declareScript(ktScript.startOffsetSkippingComments, ktScript.endOffset, descriptor).buildWithScope { irScript ->
return context.symbolTable.descriptorExtension.declareScript(ktScript.startOffsetSkippingComments, ktScript.endOffset, descriptor).buildWithScope { irScript ->
irScript.metadata = DescriptorMetadataSource.Script(descriptor)
@@ -56,7 +56,7 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
fun makeParameter(descriptor: ParameterDescriptor, origin: IrDeclarationOrigin, index: Int = -1): IrValueParameter {
val type = descriptor.type.toIrType()
val varargElementType = descriptor.varargElementType?.toIrType()
return context.symbolTable.declareValueParameter(
return context.symbolTable.descriptorExtension.declareValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
origin,
descriptor,
@@ -94,7 +94,7 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
it.owner != irScript && it.descriptor !in importedScripts
}
irScript.earlierScripts?.forEach {
context.symbolTable.introduceValueParameter(it.owner.thisReceiver!!)
context.symbolTable.descriptorExtension.introduceValueParameter(it.owner.thisReceiver!!)
}
fun createValueParameter(valueParameterDescriptor: ValueParameterDescriptor): IrValueParameter {
@@ -138,7 +138,7 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
// TODO: initializer
// TODO: do not keep direct links
val type = providedProperty.type.toIrType()
val valueParameter = context.symbolTable.declareValueParameter(
val valueParameter = context.symbolTable.descriptorExtension.declareValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, parameter, type
) { symbol ->
@@ -186,7 +186,7 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
isInline = isInline,
isExpect = isExpect,
returnType = returnType,
symbol = context.symbolTable.referenceConstructor(descriptor.unsubstitutedPrimaryConstructor),
symbol = context.symbolTable.descriptorExtension.referenceConstructor(descriptor.unsubstitutedPrimaryConstructor),
isPrimary = isPrimary,
isExternal = isExternal,
containerSource = containerSource
@@ -39,7 +39,7 @@ internal class StandaloneDeclarationGenerator(private val context: GeneratorCont
from: List<TypeParameterDescriptor>
) {
generateTypeParameterDeclarations(irTypeParametersOwner, from) { startOffset, endOffset, typeParameterDescriptor ->
symbolTable.declareGlobalTypeParameter(startOffset, endOffset, IrDeclarationOrigin.DEFINED, typeParameterDescriptor)
symbolTable.descriptorExtension.declareGlobalTypeParameter(startOffset, endOffset, IrDeclarationOrigin.DEFINED, typeParameterDescriptor)
}
}
@@ -200,7 +200,7 @@ internal class StandaloneDeclarationGenerator(private val context: GeneratorCont
}
protected fun generateOverridenSymbols(irFunction: IrSimpleFunction, overridens: Collection<FunctionDescriptor>) {
irFunction.overriddenSymbols = overridens.map { symbolTable.referenceSimpleFunction(it.original) }
irFunction.overriddenSymbols = overridens.map { symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
}
fun generateSimpleFunction(
@@ -119,7 +119,7 @@ internal class StatementGenerator(
} else {
property
}
return context.symbolTable.declareVariable(
return context.symbolTable.descriptorExtension.declareVariable(
sourceElement.startOffsetSkippingComments, sourceElement.endOffset, IrDeclarationOrigin.DEFINED,
variableDescriptor,
variableDescriptor.type.toIrType(),
@@ -207,7 +207,7 @@ internal class StatementGenerator(
} else {
ktEntry
}
val irComponentVar = context.symbolTable.declareVariable(
val irComponentVar = context.symbolTable.descriptorExtension.declareVariable(
componentVarOffsetSource.startOffsetSkippingComments, componentVarOffsetSource.endOffset,
IrDeclarationOrigin.DEFINED,
componentVariable, componentVariable.type.toIrType(), irComponentCall
@@ -447,13 +447,13 @@ internal class StatementGenerator(
IrGetObjectValueImpl(
startOffset, endOffset,
thisType,
context.symbolTable.referenceClass(classDescriptor)
context.symbolTable.descriptorExtension.referenceClass(classDescriptor)
)
} else {
IrGetValueImpl(
startOffset, endOffset,
thisType,
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(thisAsReceiverParameter)
)
}
}
@@ -479,7 +479,7 @@ internal class StatementGenerator(
IrGetValueImpl(
startOffset, endOffset,
receiverType,
context.symbolTable.referenceValueParameter(receiverParameter)
context.symbolTable.descriptorExtension.referenceValueParameter(receiverParameter)
)
}
@@ -59,7 +59,7 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
if (descriptor.visibility != DescriptorVisibilities.INVISIBLE_FAKE &&
descriptor.kind != CallableMemberDescriptor.Kind.DELEGATION // Skip mismatching delegates, see KT-46120
) {
symbolTable.declareSimpleFunctionIfNotExists(descriptor) {
symbolTable.descriptorExtension.declareSimpleFunctionIfNotExists(descriptor) {
createFunctionStub(descriptor, it).insertDeclaration(data)
}
}
@@ -84,11 +84,11 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
require(data != null)
if (DescriptorUtils.isEnumEntry(descriptor)) {
symbolTable.declareEnumEntryIfNotExists(descriptor) {
symbolTable.descriptorExtension.declareEnumEntryIfNotExists(descriptor) {
createEnumEntruStub(descriptor, it).insertDeclaration(data)
}
} else {
symbolTable.declareClassIfNotExists(descriptor) {
symbolTable.descriptorExtension.declareClassIfNotExists(descriptor) {
createClassStub(descriptor, it).insertDeclaration(data)
}
}
@@ -101,7 +101,7 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
override fun visitTypeAliasDescriptor(descriptor: TypeAliasDescriptor, data: IrDeclarationContainer?) {
require(data != null)
symbolTable.declareTypeAliasIfNotExists(descriptor) {
symbolTable.descriptorExtension.declareTypeAliasIfNotExists(descriptor) {
declareTypeAliasStub(descriptor, it).insertDeclaration(data)
}
}
@@ -117,13 +117,13 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
override fun visitConstructorDescriptor(constructorDescriptor: ConstructorDescriptor, data: IrDeclarationContainer?) {
require(data != null)
assert(constructorDescriptor is ClassConstructorDescriptor)
symbolTable.declareConstructorIfNotExists(constructorDescriptor as ClassConstructorDescriptor) {
symbolTable.descriptorExtension.declareConstructorIfNotExists(constructorDescriptor as ClassConstructorDescriptor) {
createConstructorStub(constructorDescriptor, it).insertDeclaration(data)
}
}
override fun visitScriptDescriptor(scriptDescriptor: ScriptDescriptor, data: IrDeclarationContainer?) {
assert(symbolTable.referenceScript(scriptDescriptor).isBound) { "Script $scriptDescriptor isn't declared" }
assert(symbolTable.descriptorExtension.referenceScript(scriptDescriptor).isBound) { "Script $scriptDescriptor isn't declared" }
}
private fun createPropertyStub(descriptor: PropertyDescriptor, symbol: IrPropertySymbol): IrProperty {
@@ -132,7 +132,7 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
private fun declareAccessor(accessorDescriptor: PropertyAccessorDescriptor, property: IrProperty): IrSimpleFunction {
// TODO: type parameters
return symbolTable.declareSimpleFunctionIfNotExists(accessorDescriptor) {
return symbolTable.descriptorExtension.declareSimpleFunctionIfNotExists(accessorDescriptor) {
createFunctionStub(accessorDescriptor, it).also { acc ->
acc.parent = property.parent
acc.correspondingPropertySymbol = property.symbol
@@ -143,7 +143,7 @@ internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : Decla
override fun visitPropertyDescriptor(descriptor: PropertyDescriptor, data: IrDeclarationContainer?) {
require(data != null)
if (descriptor.visibility != DescriptorVisibilities.INVISIBLE_FAKE) {
symbolTable.declarePropertyIfNotExists(descriptor) {
symbolTable.descriptorExtension.declarePropertyIfNotExists(descriptor) {
createPropertyStub(descriptor, it).insertDeclaration(data).also { p ->
descriptor.getter?.let { g -> p.getter = declareAccessor(g, p) }
descriptor.setter?.let { s -> p.setter = declareAccessor(s, p) }
@@ -29,9 +29,9 @@ class FragmentCompilerSymbolTableDecorator(
) : SymbolTable(signatureComposer, irFactory, nameProvider) {
override fun referenceValueParameter(descriptor: ParameterDescriptor): IrValueParameterSymbol {
val fi = fragmentInfo ?: return super.referenceValueParameter(descriptor)
val fi = fragmentInfo ?: return super.descriptorExtension.referenceValueParameter(descriptor)
if (descriptor !is ReceiverParameterDescriptor) return super.referenceValueParameter(descriptor)
if (descriptor !is ReceiverParameterDescriptor) return super.descriptorExtension.referenceValueParameter(descriptor)
val finderPredicate = when (val receiverValue = descriptor.value) {
is ExtensionReceiver, is ContextReceiver -> { (targetDescriptor, _): EvaluatorFragmentParameterInfo ->
@@ -46,14 +46,14 @@ class FragmentCompilerSymbolTableDecorator(
val parameterPosition =
fi.parameters.indexOfFirst(finderPredicate)
if (parameterPosition > -1) {
return super.referenceValueParameter(fi.methodDescriptor.valueParameters[parameterPosition])
return super.descriptorExtension.referenceValueParameter(fi.methodDescriptor.valueParameters[parameterPosition])
}
return super.referenceValueParameter(descriptor)
return super.descriptorExtension.referenceValueParameter(descriptor)
}
override fun referenceValue(value: ValueDescriptor): IrValueSymbol {
val fi = fragmentInfo ?: return super.referenceValue(value)
fun referenceValue(value: ValueDescriptor): IrValueSymbol {
val fi = fragmentInfo ?: return super.descriptorExtension.referenceValue(value)
val finderPredicate = when (value) {
is AbstractReceiverParameterDescriptor -> { (targetDescriptor, _): EvaluatorFragmentParameterInfo ->
@@ -67,9 +67,9 @@ class FragmentCompilerSymbolTableDecorator(
val parameterPosition =
fi.parameters.indexOfFirst(finderPredicate)
if (parameterPosition > -1) {
return super.referenceValueParameter(fi.methodDescriptor.valueParameters[parameterPosition])
return super.descriptorExtension.referenceValueParameter(fi.methodDescriptor.valueParameters[parameterPosition])
}
return super.referenceValue(value)
return super.descriptorExtension.referenceValue(value)
}
}
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorPublicSymbolImpl
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
@@ -31,7 +32,7 @@ open class FragmentDeclarationGenerator(
val startOffset = UNDEFINED_OFFSET
val endOffset = UNDEFINED_OFFSET
return context.symbolTable.declareClass(classDescriptor) {
return context.symbolTable.descriptorExtension.declareClass(classDescriptor) {
context.irFactory.createIrClassFromDescriptor(
startOffset, endOffset,
IrDeclarationOrigin.DEFINED,
@@ -84,7 +85,7 @@ open class FragmentDeclarationGenerator(
return IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(anyConstructor)
context.symbolTable.descriptorExtension.referenceConstructor(anyConstructor)
)
}
@@ -32,7 +32,7 @@ class SourceDeclarationsPreprocessor(private val context: GeneratorContext) {
private fun processClassOrObject(ktClassOrObject: KtClassOrObject) {
val classDescriptor = ktClassOrObject.findClassDescriptor(context.bindingContext)
if (DescriptorUtils.isEnumEntry(classDescriptor)) return
context.symbolTable.referenceClass(classDescriptor)
context.symbolTable.descriptorExtension.referenceClass(classDescriptor)
ktClassOrObject.body?.let { ktClassBody ->
ktClassBody.declarations.forEach { processDeclaration(it) }
}
@@ -472,7 +472,7 @@ internal class InsertImplicitCasts(
return IrCallImpl(
startOffset, endOffset,
targetType.toIrType(),
symbolTable.referenceSimpleFunction(coercionFunction),
symbolTable.descriptorExtension.referenceSimpleFunction(coercionFunction),
typeArgumentsCount = 0, valueArgumentsCount = 0
).also { irCall ->
irCall.dispatchReceiver = this
@@ -494,7 +494,7 @@ internal class InsertImplicitCasts(
return IrCallImpl(
startOffset, endOffset,
targetType.toIrType(),
symbolTable.referenceSimpleFunction(coercionFunction),
symbolTable.descriptorExtension.referenceSimpleFunction(coercionFunction),
typeArgumentsCount = 0, valueArgumentsCount = 0
).also { irCall ->
irCall.extensionReceiver = this
@@ -23,7 +23,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
synchronized(lock) {
return originalTable.referenceClass(descriptor).also {
return originalTable.descriptorExtension.referenceClass(descriptor).also {
if (!it.isBound) {
stubGenerator?.generateClassStub(descriptor)
}
@@ -33,7 +33,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
synchronized(lock) {
return originalTable.referenceTypeAlias(descriptor).also {
return originalTable.descriptorExtension.referenceTypeAlias(descriptor).also {
if (!it.isBound) {
stubGenerator?.generateTypeAliasStub(descriptor)
}
@@ -43,7 +43,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
synchronized(lock) {
return originalTable.referenceConstructor(descriptor).also {
return originalTable.descriptorExtension.referenceConstructor(descriptor).also {
if (!it.isBound) {
stubGenerator?.generateConstructorStub(descriptor)
}
@@ -53,7 +53,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
synchronized(lock) {
return originalTable.referenceEnumEntry(descriptor).also {
return originalTable.descriptorExtension.referenceEnumEntry(descriptor).also {
if (!it.isBound) {
stubGenerator?.generateEnumEntryStub(descriptor)
}
@@ -63,7 +63,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
synchronized(lock) {
return originalTable.referenceSimpleFunction(descriptor).also {
return originalTable.descriptorExtension.referenceSimpleFunction(descriptor).also {
if (!it.isBound) {
stubGenerator?.generateFunctionStub(descriptor)
}
@@ -73,7 +73,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
synchronized(lock) {
return originalTable.referenceProperty(descriptor).also {
return originalTable.descriptorExtension.referenceProperty(descriptor).also {
if (!it.isBound) {
stubGenerator?.generatePropertyStub(descriptor)
}
@@ -83,7 +83,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
synchronized(lock) {
return originalTable.referenceTypeParameter(classifier).also {
return originalTable.descriptorExtension.referenceTypeParameter(classifier).also {
if (!it.isBound) {
stubGenerator?.generateOrGetTypeParameterStub(classifier)
}
@@ -24,9 +24,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.*
import org.jetbrains.kotlin.ir.linkage.IrProvider
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
@@ -80,11 +78,11 @@ abstract class DeclarationStubGenerator(
}
fun generateOrGetEmptyExternalPackageFragmentStub(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
val referenced = symbolTable.referenceExternalPackageFragment(descriptor)
val referenced = symbolTable.descriptorExtension.referenceExternalPackageFragment(descriptor)
if (referenced.isBound) {
return referenced.owner
}
return symbolTable.declareExternalPackageFragment(descriptor)
return symbolTable.descriptorExtension.declareExternalPackageFragment(descriptor)
}
fun generateOrGetFacadeClass(descriptor: DeclarationDescriptor): IrClass? {
@@ -135,7 +133,7 @@ abstract class DeclarationStubGenerator(
extensions.computeExternalDeclarationOrigin(descriptor) ?: IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
fun generatePropertyStub(descriptor: PropertyDescriptor): IrProperty {
val referenced = symbolTable.referenceProperty(descriptor)
val referenced = symbolTable.descriptorExtension.referenceProperty(descriptor)
if (referenced.isBound) {
return referenced.owner
}
@@ -156,12 +154,12 @@ abstract class DeclarationStubGenerator(
}
fun generateFieldStub(descriptor: PropertyDescriptor): IrField {
val referenced = symbolTable.referenceField(descriptor)
val referenced = symbolTable.descriptorExtension.referenceField(descriptor)
if (referenced.isBound) {
return referenced.owner
}
return symbolTable.declareField(
return symbolTable.descriptorExtension.declareField(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(descriptor), descriptor.original, descriptor.type.toIrType()
) {
IrLazyField(
@@ -177,7 +175,7 @@ abstract class DeclarationStubGenerator(
}
fun generateFunctionStub(descriptor: FunctionDescriptor, createPropertyIfNeeded: Boolean = true): IrSimpleFunction {
val referenced = symbolTable.referenceSimpleFunction(descriptor)
val referenced = symbolTable.descriptorExtension.referenceSimpleFunction(descriptor)
if (referenced.isBound) {
return referenced.owner
}
@@ -195,7 +193,7 @@ abstract class DeclarationStubGenerator(
if (descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE)
IrDeclarationOrigin.FAKE_OVERRIDE
else computeOrigin(descriptor)
return symbolTable.declareSimpleFunction(descriptor.original) {
return symbolTable.descriptorExtension.declareSimpleFunction(descriptor.original) {
IrLazyFunction(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, descriptor,
@@ -209,13 +207,13 @@ abstract class DeclarationStubGenerator(
}
fun generateConstructorStub(descriptor: ClassConstructorDescriptor): IrConstructor {
val referenced = symbolTable.referenceConstructor(descriptor)
val referenced = symbolTable.descriptorExtension.referenceConstructor(descriptor)
if (referenced.isBound) {
return referenced.owner
}
val origin = computeOrigin(descriptor)
return symbolTable.declareConstructor(
return symbolTable.descriptorExtension.declareConstructor(
descriptor.original
) {
IrLazyConstructor(
@@ -252,7 +250,7 @@ abstract class DeclarationStubGenerator(
classDescriptor.modality
fun generateClassStub(descriptor: ClassDescriptor): IrClass {
val irClassSymbol = symbolTable.referenceClass(descriptor)
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
if (irClassSymbol.isBound) {
return irClassSymbol.owner
}
@@ -267,7 +265,7 @@ abstract class DeclarationStubGenerator(
val targetDescriptor = if (irClassSymbol.hasDescriptor) irClassSymbol.descriptor else descriptor
with(targetDescriptor) {
val origin = computeOrigin(this)
return symbolTable.declareClass(this) {
return symbolTable.descriptorExtension.declareClass(this) {
IrLazyClass(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, this,
@@ -287,12 +285,12 @@ abstract class DeclarationStubGenerator(
}
fun generateEnumEntryStub(descriptor: ClassDescriptor): IrEnumEntry {
val referenced = symbolTable.referenceEnumEntry(descriptor)
val referenced = symbolTable.descriptorExtension.referenceEnumEntry(descriptor)
if (referenced.isBound) {
return referenced.owner
}
val origin = computeOrigin(descriptor)
return symbolTable.declareEnumEntry(descriptor) {
return symbolTable.descriptorExtension.declareEnumEntry(descriptor) {
IrLazyEnumEntryImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, descriptor,
@@ -302,7 +300,7 @@ abstract class DeclarationStubGenerator(
}
internal fun generateOrGetTypeParameterStub(descriptor: TypeParameterDescriptor): IrTypeParameter {
val referenced = symbolTable.referenceTypeParameter(descriptor)
val referenced = symbolTable.descriptorExtension.referenceTypeParameter(descriptor)
if (referenced.isBound) {
return referenced.owner
}
@@ -321,12 +319,12 @@ abstract class DeclarationStubGenerator(
}
internal fun generateOrGetScopedTypeParameterStub(descriptor: TypeParameterDescriptor): IrTypeParameter {
val referenced = symbolTable.referenceScopedTypeParameter(descriptor)
val referenced = symbolTable.descriptorExtension.referenceScopedTypeParameter(descriptor)
if (referenced.isBound) {
return referenced.owner
}
val origin = computeOrigin(descriptor)
return symbolTable.declareScopedTypeParameter(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor) {
return symbolTable.descriptorExtension.declareScopedTypeParameter(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor) {
IrLazyTypeParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, descriptor,
@@ -340,12 +338,12 @@ abstract class DeclarationStubGenerator(
}
fun generateTypeAliasStub(descriptor: TypeAliasDescriptor): IrTypeAlias {
val referenced = symbolTable.referenceTypeAlias(descriptor)
val referenced = symbolTable.descriptorExtension.referenceTypeAlias(descriptor)
if (referenced.isBound) {
return referenced.owner
}
val origin = computeOrigin(descriptor)
return symbolTable.declareTypeAlias(descriptor) {
return symbolTable.descriptorExtension.declareTypeAlias(descriptor) {
IrLazyTypeAlias(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, descriptor,
@@ -10,12 +10,8 @@ import org.jetbrains.kotlin.ir.IrLock
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazySymbolTable
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.*
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name
open class SymbolTable(
val signaturer: IdSignatureComposer,
@@ -485,366 +481,6 @@ open class SymbolTable(
addUnbound(typeAliasSlice)
addUnbound(fieldSlice)
}
// ------------------------------------ descriptors ------------------------------------
@ObsoleteDescriptorBasedAPI
fun referenceScript(descriptor: ScriptDescriptor): IrScriptSymbol {
return descriptorExtension.referenceScript(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareScript(
startOffset: Int,
endOffset: Int,
descriptor: ScriptDescriptor,
): IrScript {
return descriptorExtension.declareScript(startOffset, endOffset, descriptor)
}
@ObsoleteDescriptorBasedAPI
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor): IrExternalPackageFragmentSymbol {
return descriptorExtension.referenceExternalPackageFragment(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareExternalPackageFragment(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
return descriptorExtension.declareExternalPackageFragment(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareExternalPackageFragmentIfNotExists(descriptor: PackageFragmentDescriptor): IrExternalPackageFragment {
return descriptorExtension.declareExternalPackageFragmentIfNotExists(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareAnonymousInitializer(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: ClassDescriptor,
): IrAnonymousInitializer {
return descriptorExtension.declareAnonymousInitializer(startOffset, endOffset, origin, descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareClass(
descriptor: ClassDescriptor,
classFactory: (IrClassSymbol) -> IrClass,
): IrClass {
return descriptorExtension.declareClass(descriptor, classFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareClassIfNotExists(descriptor: ClassDescriptor, classFactory: (IrClassSymbol) -> IrClass): IrClass {
return descriptorExtension.declareClassIfNotExists(descriptor, classFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareClassFromLinker(descriptor: ClassDescriptor, signature: IdSignature, factory: (IrClassSymbol) -> IrClass): IrClass {
return descriptorExtension.declareClassFromLinker(descriptor, signature, factory)
}
@ObsoleteDescriptorBasedAPI
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
return descriptorExtension.referenceClass(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareConstructor(
descriptor: ClassConstructorDescriptor,
constructorFactory: (IrConstructorSymbol) -> IrConstructor,
): IrConstructor {
return descriptorExtension.declareConstructor(descriptor, constructorFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareConstructorIfNotExists(
descriptor: ClassConstructorDescriptor,
constructorFactory: (IrConstructorSymbol) -> IrConstructor,
): IrConstructor {
return descriptorExtension.declareConstructorIfNotExists(descriptor, constructorFactory)
}
@ObsoleteDescriptorBasedAPI
fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
return descriptorExtension.referenceConstructor(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareConstructorFromLinker(
descriptor: ClassConstructorDescriptor,
signature: IdSignature,
constructorFactory: (IrConstructorSymbol) -> IrConstructor,
): IrConstructor {
return descriptorExtension.declareConstructorFromLinker(descriptor, signature, constructorFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareEnumEntry(
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor,
): IrEnumEntry {
return descriptorExtension.declareEnumEntry(startOffset, endOffset, origin, descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareEnumEntry(
descriptor: ClassDescriptor,
factory: (IrEnumEntrySymbol) -> IrEnumEntry,
): IrEnumEntry {
return descriptorExtension.declareEnumEntry(descriptor, factory)
}
@ObsoleteDescriptorBasedAPI
fun declareEnumEntryIfNotExists(descriptor: ClassDescriptor, factory: (IrEnumEntrySymbol) -> IrEnumEntry): IrEnumEntry {
return descriptorExtension.declareEnumEntryIfNotExists(descriptor, factory)
}
@ObsoleteDescriptorBasedAPI
fun declareEnumEntryFromLinker(
descriptor: ClassDescriptor,
signature: IdSignature,
factory: (IrEnumEntrySymbol) -> IrEnumEntry,
): IrEnumEntry {
return descriptorExtension.declareEnumEntryFromLinker(descriptor, signature, factory)
}
@ObsoleteDescriptorBasedAPI
fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
return descriptorExtension.referenceEnumEntry(descriptor)
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
fun declareField(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor,
type: IrType,
visibility: DescriptorVisibility? = null,
fieldFactory: (IrFieldSymbol) -> IrField,
): IrField {
return descriptorExtension.declareField(startOffset, endOffset, origin, descriptor, type, visibility, fieldFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareField(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor,
type: IrType,
irInitializer: IrExpressionBody?,
): IrField {
return descriptorExtension.declareField(startOffset, endOffset, origin, descriptor, type, irInitializer)
}
@ObsoleteDescriptorBasedAPI
fun referenceField(descriptor: PropertyDescriptor): IrFieldSymbol {
return descriptorExtension.referenceField(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareProperty(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor,
isDelegated: Boolean = descriptor.isDelegated,
): IrProperty {
return descriptorExtension.declareProperty(startOffset, endOffset, origin, descriptor, isDelegated)
}
@ObsoleteDescriptorBasedAPI
fun declareProperty(
descriptor: PropertyDescriptor,
propertyFactory: (IrPropertySymbol) -> IrProperty,
): IrProperty {
return descriptorExtension.declareProperty(descriptor, propertyFactory)
}
@ObsoleteDescriptorBasedAPI
fun declarePropertyIfNotExists(descriptor: PropertyDescriptor, propertyFactory: (IrPropertySymbol) -> IrProperty): IrProperty {
return descriptorExtension.declarePropertyIfNotExists(descriptor, propertyFactory)
}
@ObsoleteDescriptorBasedAPI
fun declarePropertyFromLinker(
descriptor: PropertyDescriptor,
signature: IdSignature,
factory: (IrPropertySymbol) -> IrProperty,
): IrProperty {
return descriptorExtension.declarePropertyFromLinker(descriptor, signature, factory)
}
@ObsoleteDescriptorBasedAPI
fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
return descriptorExtension.referenceProperty(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
return descriptorExtension.referenceTypeAlias(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareTypeAlias(descriptor: TypeAliasDescriptor, factory: (IrTypeAliasSymbol) -> IrTypeAlias): IrTypeAlias {
return descriptorExtension.declareTypeAlias(descriptor, factory)
}
@ObsoleteDescriptorBasedAPI
fun declareTypeAliasIfNotExists(descriptor: TypeAliasDescriptor, factory: (IrTypeAliasSymbol) -> IrTypeAlias): IrTypeAlias {
return descriptorExtension.declareTypeAliasIfNotExists(descriptor, factory)
}
@ObsoleteDescriptorBasedAPI
fun declareSimpleFunction(
descriptor: FunctionDescriptor,
functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction,
): IrSimpleFunction {
return descriptorExtension.declareSimpleFunction(descriptor, functionFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareSimpleFunctionIfNotExists(
descriptor: FunctionDescriptor,
functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction,
): IrSimpleFunction {
return descriptorExtension.declareSimpleFunctionIfNotExists(descriptor, functionFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareSimpleFunctionFromLinker(
descriptor: FunctionDescriptor,
signature: IdSignature,
functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction,
): IrSimpleFunction {
return descriptorExtension.declareSimpleFunctionFromLinker(descriptor, signature, functionFactory)
}
@ObsoleteDescriptorBasedAPI
fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
return descriptorExtension.referenceSimpleFunction(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun referenceDeclaredFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
return descriptorExtension.referenceDeclaredFunction(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareGlobalTypeParameter(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: TypeParameterDescriptor,
): IrTypeParameter {
return descriptorExtension.declareGlobalTypeParameter(startOffset, endOffset, origin, descriptor)
}
@ObsoleteDescriptorBasedAPI
fun declareScopedTypeParameter(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: TypeParameterDescriptor,
typeParameterFactory: (IrTypeParameterSymbol) -> IrTypeParameter,
): IrTypeParameter {
return descriptorExtension.declareScopedTypeParameter(startOffset, endOffset, origin, descriptor, typeParameterFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareValueParameter(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: ParameterDescriptor,
type: IrType,
varargElementType: IrType? = null,
name: Name? = null,
index: Int? = null,
isAssignable: Boolean = false,
valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter,
): IrValueParameter {
return descriptorExtension.declareValueParameter(
startOffset,
endOffset,
origin,
descriptor,
type,
varargElementType,
name,
index,
isAssignable,
valueParameterFactory
)
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
fun introduceValueParameter(irValueParameter: IrValueParameter) {
descriptorExtension.introduceValueParameter(irValueParameter)
}
@ObsoleteDescriptorBasedAPI
open fun referenceValue(value: ValueDescriptor): IrValueSymbol {
return descriptorExtension.referenceValue(value)
}
@ObsoleteDescriptorBasedAPI
fun referenceValueParameter(descriptor: ParameterDescriptor): IrValueParameterSymbol {
return descriptorExtension.referenceValueParameter(descriptor)
}
@ObsoleteDescriptorBasedAPI
fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
return descriptorExtension.referenceTypeParameter(classifier)
}
@ObsoleteDescriptorBasedAPI
fun referenceScopedTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
return descriptorExtension.referenceScopedTypeParameter(classifier)
}
@ObsoleteDescriptorBasedAPI
fun declareVariable(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: VariableDescriptor,
type: IrType,
variableFactory: (IrVariableSymbol) -> IrVariable,
): IrVariable {
return descriptorExtension.declareVariable(startOffset, endOffset, origin, descriptor, type, variableFactory)
}
@ObsoleteDescriptorBasedAPI
fun declareVariable(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: VariableDescriptor,
type: IrType,
irInitializerExpression: IrExpression?,
): IrVariable {
return descriptorExtension.declareVariable(startOffset, endOffset, origin, descriptor, type, irInitializerExpression)
}
@ObsoleteDescriptorBasedAPI
fun declareLocalDelegatedProperty(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: VariableDescriptorWithAccessors,
type: IrType,
factory: (IrLocalDelegatedPropertySymbol) -> IrLocalDelegatedProperty,
): IrLocalDelegatedProperty {
return descriptorExtension.declareLocalDelegatedProperty(startOffset, endOffset, origin, descriptor, type, factory)
}
@ObsoleteDescriptorBasedAPI
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors): IrLocalDelegatedPropertySymbol {
return descriptorExtension.referenceLocalDelegatedProperty(descriptor)
}
}
inline fun <T> SymbolTable.withScope(owner: IrSymbol, block: SymbolTable.() -> T): T {
@@ -340,7 +340,7 @@ abstract class SymbolTableExtension<
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: Property,
isDelegated: Boolean,/* = descriptor.isDelegated*/
isDelegated: Boolean
): IrProperty {
return declareProperty(descriptor) { propertySymbol ->
defaultPropertyFactory(startOffset, endOffset, origin, descriptor, isDelegated, propertySymbol)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.utils.memoryOptimizedMap
@@ -22,7 +23,7 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
origin: IrDeclarationOrigin,
descriptor: FunctionDescriptor
) =
declareSimpleFunction(descriptor) {
descriptorExtension.declareSimpleFunction(descriptor) {
with(descriptor) {
irFactory.createSimpleFunction(
startOffset = startOffset,
@@ -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) }
@@ -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")
}
@@ -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)
}
}
@@ -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
@@ -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"
}
}
}
@@ -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)
@@ -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(
}
}
}
}
}
@@ -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))
}
@@ -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))
}
}
}
@@ -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))
}
}
}
}
}
}
}
@@ -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}`"
}
}
@@ -204,7 +204,7 @@ open class KJvmReplCompilerBase<AnalyzerT : ReplCodeAnalyzerBase>(
prebuiltState: GenerationState.Builder,
): GenerationState {
val generatorExtensions = object : JvmGeneratorExtensionsImpl(compilationState.environment.configuration) {
override fun getPreviousScripts() = state.history.map { compilationState.symbolTable.referenceScript(it.item) }
override fun getPreviousScripts() = state.history.map { compilationState.symbolTable.descriptorExtension.referenceScript(it.item) }
}
val codegenFactory = JvmIrCodegenFactory(
compilationState.environment.configuration,