From 73b4f897b6fdc480b4fdd0f5839081c726da7d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Tue, 14 Jan 2020 12:07:50 +0100 Subject: [PATCH] JVM IR: Fix modalities in JvmSymbols --- .../declarations/declarationBuilders.kt | 2 + .../kotlin/backend/jvm/JvmSymbols.kt | 64 ++++++++++--------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index 14f26495cb5..f292acf624d 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -179,6 +179,7 @@ fun IrDeclarationContainer.addFunction( name: String, returnType: IrType, modality: Modality = Modality.FINAL, + visibility: Visibility = Visibilities.PUBLIC, isStatic: Boolean = false, isSuspend: Boolean = false, origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED @@ -187,6 +188,7 @@ fun IrDeclarationContainer.addFunction( this.name = Name.identifier(name) this.returnType = returnType this.modality = modality + this.visibility = visibility this.isSuspend = isSuspend this.origin = origin }.apply { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 5b2e59f57a0..a2e2168ede6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -202,7 +202,7 @@ class JvmSymbols( } private val javaLangAssertionError: IrClassSymbol = - createClass(FqName("java.lang.AssertionError")) { klass -> + createClass(FqName("java.lang.AssertionError"), classModality = Modality.OPEN) { klass -> klass.addConstructor().apply { addValueParameter("detailMessage", irBuiltIns.anyNType) } @@ -238,29 +238,30 @@ class JvmSymbols( val suspendFunctionInterface: IrClassSymbol = createClass(FqName("kotlin.coroutines.jvm.internal.SuspendFunction"), ClassKind.INTERFACE) - val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass -> + val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda"), classModality = Modality.ABSTRACT) { klass -> klass.addConstructor().apply { addValueParameter("arity", irBuiltIns.intType) } } - val suspendLambdaClass: IrClassSymbol = createClass(FqName("kotlin.coroutines.jvm.internal.SuspendLambda")) { klass -> - klass.superTypes += suspendFunctionInterface.defaultType - klass.addConstructor().apply { - addValueParameter("arity", irBuiltIns.intType) - addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.anyNType).makeNullable()) + val suspendLambdaClass: IrClassSymbol = + createClass(FqName("kotlin.coroutines.jvm.internal.SuspendLambda"), classModality = Modality.ABSTRACT) { klass -> + klass.superTypes += suspendFunctionInterface.defaultType + klass.addConstructor().apply { + addValueParameter("arity", irBuiltIns.intType) + addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.anyNType).makeNullable()) + } + klass.addFunction(INVOKE_SUSPEND_METHOD_NAME, irBuiltIns.anyNType, Modality.ABSTRACT, Visibilities.PROTECTED).apply { + addValueParameter(SUSPEND_CALL_RESULT_NAME, resultClassStub.typeWith(irBuiltIns.anyNType)) + } + klass.addFunction(SUSPEND_FUNCTION_CREATE_METHOD_NAME, continuationClass.typeWith(irBuiltIns.unitType), Modality.OPEN).apply { + addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.nothingType)) + } + klass.addFunction(SUSPEND_FUNCTION_CREATE_METHOD_NAME, continuationClass.typeWith(irBuiltIns.unitType), Modality.OPEN).apply { + addValueParameter("value", irBuiltIns.anyNType) + addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.nothingType)) + } } - klass.addFunction(INVOKE_SUSPEND_METHOD_NAME, irBuiltIns.anyNType, Modality.ABSTRACT).apply { - addValueParameter(SUSPEND_CALL_RESULT_NAME, resultClassStub.typeWith(irBuiltIns.anyNType)) - } - klass.addFunction(SUSPEND_FUNCTION_CREATE_METHOD_NAME, continuationClass.typeWith(irBuiltIns.unitType)).apply { - addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.nothingType)) - } - klass.addFunction(SUSPEND_FUNCTION_CREATE_METHOD_NAME, continuationClass.typeWith(irBuiltIns.unitType)).apply { - addValueParameter("value", irBuiltIns.anyNType) - addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.nothingType)) - } - } private fun generateCallableReferenceMethods(klass: IrClass) { klass.addFunction("getSignature", irBuiltIns.stringType, Modality.OPEN) @@ -268,21 +269,22 @@ class JvmSymbols( klass.addFunction("getOwner", kDeclarationContainer.defaultType, Modality.OPEN) } - val functionReference: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.FunctionReference")) { klass -> - klass.addConstructor().apply { - addValueParameter("arity", irBuiltIns.intType) + val functionReference: IrClassSymbol = + createClass(FqName("kotlin.jvm.internal.FunctionReference"), classModality = Modality.OPEN) { klass -> + klass.addConstructor().apply { + addValueParameter("arity", irBuiltIns.intType) + } + + klass.addConstructor().apply { + addValueParameter("arity", irBuiltIns.intType) + addValueParameter("receiver", irBuiltIns.anyNType) + } + + klass.addField("receiver", irBuiltIns.anyNType, Visibilities.PROTECTED) + + generateCallableReferenceMethods(klass) } - klass.addConstructor().apply { - addValueParameter("arity", irBuiltIns.intType) - addValueParameter("receiver", irBuiltIns.anyNType) - } - - klass.addField("receiver", irBuiltIns.anyNType, Visibilities.PROTECTED) - - generateCallableReferenceMethods(klass) - } - val functionReferenceReceiverField: IrFieldSymbol = functionReference.fieldByName("receiver") val functionReferenceGetSignature: IrSimpleFunctionSymbol = functionReference.functionByName("getSignature") val functionReferenceGetName: IrSimpleFunctionSymbol = functionReference.functionByName("getName")