Remove CommonBackendContext.getInternalClass

Move to subclasses: getJvmInternalClass, getJsInternalClass and
getKonanInternalClass (in Kotlin/Native). The advantage of this is that
this API need not be shared between backends any longer, which makes
sense because implementation details differ across platforms
This commit is contained in:
Alexander Udalov
2019-03-12 16:11:47 +01:00
parent 4ab1916ebf
commit bd694105e9
5 changed files with 18 additions and 16 deletions
@@ -21,9 +21,6 @@ interface LoggingContext {
interface CommonBackendContext : BackendContext, LoggingContext {
override val ir: Ir<CommonBackendContext>
//TODO move to builtins
fun getInternalClass(name: String): ClassDescriptor
fun getClass(fqName: FqName): ClassDescriptor
//TODO move to builtins
@@ -64,6 +64,8 @@ abstract class Symbols<out T : CommonBackendContext>(val context: T, private val
abstract val stringBuilder: IrClassSymbol
abstract val defaultConstructorMarker: IrClassSymbol
val iterator = symbolTable.referenceClass(
builtInsPackage("kotlin", "collections").getContributedClassifier(
Name.identifier("Iterator"), NoLookupLocation.FROM_BACKEND
@@ -86,8 +88,6 @@ abstract class Symbols<out T : CommonBackendContext>(val context: T, private val
val progressionClasses = listOf(charProgression, intProgression, longProgression)
val progressionClassesTypes = progressionClasses.map { it.descriptor.defaultType }.toSet()
val defaultConstructorMarker = symbolTable.referenceClass(context.getInternalClass("DefaultConstructorMarker"))
val any = symbolTable.referenceClass(builtIns.any)
val unit = symbolTable.referenceClass(builtIns.unit)
@@ -252,7 +252,7 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
val jsBind = defineJsBindIntrinsic()
// TODO move to IntrinsifyCallsLowering
val doNotIntrinsifyAnnotationSymbol = context.symbolTable.referenceClass(context.getInternalClass("DoNotIntrinsify"))
val doNotIntrinsifyAnnotationSymbol = context.symbolTable.referenceClass(context.getJsInternalClass("DoNotIntrinsify"))
// TODO move CharSequence-related stiff to IntrinsifyCallsLowering
val charSequenceClassSymbol = context.symbolTable.referenceClass(context.getClass(FqName("kotlin.CharSequence")))
@@ -144,8 +144,8 @@ class JsIrBackendContext(
fun getOperatorByName(name: Name, type: KotlinType) = operatorMap[name]?.get(type)
override val ir = object : Ir<CommonBackendContext>(this, irModuleFragment) {
override val symbols = object : Symbols<CommonBackendContext>(this@JsIrBackendContext, symbolTable.lazyWrapper) {
override val ir = object : Ir<JsIrBackendContext>(this, irModuleFragment) {
override val symbols = object : Symbols<JsIrBackendContext>(this@JsIrBackendContext, symbolTable.lazyWrapper) {
override val ThrowNullPointerException =
symbolTable.referenceSimpleFunction(getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_NPE"))).single())
@@ -158,12 +158,15 @@ class JsIrBackendContext(
override val ThrowUninitializedPropertyAccessException =
symbolTable.referenceSimpleFunction(getFunctions(FqName("kotlin.throwUninitializedPropertyAccessException")).single())
override val defaultConstructorMarker =
symbolTable.referenceClass(context.getJsInternalClass("DefaultConstructorMarker"))
override val stringBuilder
get() = TODO("not implemented")
override val copyRangeTo: Map<ClassDescriptor, IrSimpleFunctionSymbol>
get() = TODO("not implemented")
override val coroutineImpl =
symbolTable.referenceClass(findClass(coroutinePackage.memberScope, COROUTINE_IMPL_NAME.identifier))
symbolTable.referenceClass(findClass(coroutinePackage.memberScope, COROUTINE_IMPL_NAME))
override val coroutineSuspendedGetter =
symbolTable.referenceSimpleFunction(
coroutineIntrinsicsPackage.memberScope.getContributedVariables(
@@ -262,8 +265,6 @@ class JsIrBackendContext(
}
}.toMap()
private fun findClass(memberScope: MemberScope, className: String) = findClass(memberScope, Name.identifier(className))
private fun findClass(memberScope: MemberScope, name: Name) =
memberScope.getContributedClassifier(name, NoLookupLocation.FROM_BACKEND) as ClassDescriptor
@@ -273,7 +274,8 @@ class JsIrBackendContext(
private fun findFunctions(memberScope: MemberScope, name: Name) =
memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).toList()
override fun getInternalClass(name: String) = findClass(internalPackage.memberScope, name)
internal fun getJsInternalClass(name: String): ClassDescriptor =
findClass(internalPackage.memberScope, Name.identifier(name))
override fun getClass(fqName: FqName) = findClass(module.getPackage(fqName.parent()).memberScope, fqName.shortName())
@@ -59,7 +59,7 @@ class JvmBackendContext(
return memberScope.getContributedClassifier(name, NoLookupLocation.FROM_BACKEND) as ClassDescriptor
}
override fun getInternalClass(name: String): ClassDescriptor {
private fun getJvmInternalClass(name: String): ClassDescriptor {
return find(state.module.getPackage(FqName("kotlin.jvm.internal")).memberScope, name)
}
@@ -74,7 +74,7 @@ class JvmBackendContext(
override fun getInternalFunctions(name: String): List<FunctionDescriptor> {
return when (name) {
"ThrowUninitializedPropertyAccessException" ->
getInternalClass("Intrinsics").staticScope.getContributedFunctions(
getJvmInternalClass("Intrinsics").staticScope.getContributedFunctions(
Name.identifier("throwUninitializedPropertyAccessException"),
NoLookupLocation.FROM_BACKEND
).toList()
@@ -116,6 +116,9 @@ class JvmBackendContext(
override val stringBuilder: IrClassSymbol
get() = symbolTable.referenceClass(context.getClass(FqName("java.lang.StringBuilder")))
override val defaultConstructorMarker: IrClassSymbol =
symbolTable.referenceClass(context.getJvmInternalClass("DefaultConstructorMarker"))
override val copyRangeTo: Map<ClassDescriptor, IrSimpleFunctionSymbol>
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
override val coroutineImpl: IrClassSymbol
@@ -124,10 +127,10 @@ class JvmBackendContext(
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
val lambdaClass: IrClassSymbol =
symbolTable.referenceClass(context.getInternalClass("Lambda"))
symbolTable.referenceClass(context.getJvmInternalClass("Lambda"))
val functionReference: IrClassSymbol =
symbolTable.referenceClass(context.getInternalClass("FunctionReference"))
symbolTable.referenceClass(context.getJvmInternalClass("FunctionReference"))
fun getFunction(parameterCount: Int): IrClassSymbol =
symbolTable.referenceClass(context.builtIns.getFunction(parameterCount))