From 403ec7a5b1fc796fdecd65e4a0f04cee6c45b08c Mon Sep 17 00:00:00 2001 From: Anastasiya Shadrina Date: Mon, 9 Aug 2021 00:24:27 +0700 Subject: [PATCH] [BE] Mangle context receiver params --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../common/serialization/mangle/MangleConstant.kt | 1 + .../mangle/descriptor/DescriptorMangleComputer.kt | 9 +++++++++ .../contextReceivers/overload.kt | 14 ++++++++++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ 5 files changed, 36 insertions(+) create mode 100644 compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index aba4f3ef2e2..1dfa6d6d6da 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -16181,6 +16181,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/localDeclaration.kt"); } + @Test + @TestMetadata("overload.kt") + public void testOverload() throws Exception { + runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt"); + } + @Test @TestMetadata("plusAssign.kt") public void testPlusAssign() throws Exception { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt index f89e249f5c0..9c7814588c5 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt @@ -34,6 +34,7 @@ enum class MangleConstant(val prefix: Char, val separator: Char, val suffix: Cha const val PLATFORM_FUNCTION_MARKER = '%' + const val CONTEXT_RECEIVER_PREFIX = '!' const val EXTENSION_RECEIVER_PREFIX = '@' const val FUNCTION_NAME_PREFIX = '#' const val TYPE_PARAM_INDEX_PREFIX = '@' diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/descriptor/DescriptorMangleComputer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/descriptor/DescriptorMangleComputer.kt index 900e60b0c3e..89fb6d581de 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/descriptor/DescriptorMangleComputer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/descriptor/DescriptorMangleComputer.kt @@ -115,6 +115,11 @@ abstract class DescriptorMangleComputer(protected val builder: StringBuilder, pr builder.appendSignature(MangleConstant.STATIC_MEMBER_MARK) } + contextReceiverParameters.forEach { + builder.appendSignature(MangleConstant.CONTEXT_RECEIVER_PREFIX) + mangleContextReceiverParameter(builder, it) + } + extensionReceiverParameter?.let { builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX) mangleExtensionReceiverParameter(builder, it) @@ -139,6 +144,10 @@ abstract class DescriptorMangleComputer(protected val builder: StringBuilder, pr } } + private fun mangleContextReceiverParameter(vpBuilder: StringBuilder, param: ReceiverParameterDescriptor) { + mangleType(vpBuilder, param.type) + } + private fun mangleExtensionReceiverParameter(vpBuilder: StringBuilder, param: ReceiverParameterDescriptor) { mangleType(vpBuilder, param.type) } diff --git a/compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt new file mode 100644 index 00000000000..209ed59c350 --- /dev/null +++ b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt @@ -0,0 +1,14 @@ +// TARGET_BACKEND: JVM_IR +// IGNORE_BACKEND_FIR: JVM_IR + +context(String, Int) +fun overloaded(value: Any?) = "OK" + +context(String) +fun overloaded(value: Any?) = "fail" + +fun box() = with("42") { + with(42) { + overloaded(null) + } +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 3a948a97117..b1fb04bd91c 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -16181,6 +16181,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/localDeclaration.kt"); } + @Test + @TestMetadata("overload.kt") + public void testOverload() throws Exception { + runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/overload.kt"); + } + @Test @TestMetadata("plusAssign.kt") public void testPlusAssign() throws Exception {