[BE] Mangle context receiver params
This commit is contained in:
committed by
TeamCityServer
parent
bafd084094
commit
403ec7a5b1
+6
@@ -16181,6 +16181,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/localDeclaration.kt");
|
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
|
@Test
|
||||||
@TestMetadata("plusAssign.kt")
|
@TestMetadata("plusAssign.kt")
|
||||||
public void testPlusAssign() throws Exception {
|
public void testPlusAssign() throws Exception {
|
||||||
|
|||||||
+1
@@ -34,6 +34,7 @@ enum class MangleConstant(val prefix: Char, val separator: Char, val suffix: Cha
|
|||||||
|
|
||||||
const val PLATFORM_FUNCTION_MARKER = '%'
|
const val PLATFORM_FUNCTION_MARKER = '%'
|
||||||
|
|
||||||
|
const val CONTEXT_RECEIVER_PREFIX = '!'
|
||||||
const val EXTENSION_RECEIVER_PREFIX = '@'
|
const val EXTENSION_RECEIVER_PREFIX = '@'
|
||||||
const val FUNCTION_NAME_PREFIX = '#'
|
const val FUNCTION_NAME_PREFIX = '#'
|
||||||
const val TYPE_PARAM_INDEX_PREFIX = '@'
|
const val TYPE_PARAM_INDEX_PREFIX = '@'
|
||||||
|
|||||||
+9
@@ -115,6 +115,11 @@ abstract class DescriptorMangleComputer(protected val builder: StringBuilder, pr
|
|||||||
builder.appendSignature(MangleConstant.STATIC_MEMBER_MARK)
|
builder.appendSignature(MangleConstant.STATIC_MEMBER_MARK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contextReceiverParameters.forEach {
|
||||||
|
builder.appendSignature(MangleConstant.CONTEXT_RECEIVER_PREFIX)
|
||||||
|
mangleContextReceiverParameter(builder, it)
|
||||||
|
}
|
||||||
|
|
||||||
extensionReceiverParameter?.let {
|
extensionReceiverParameter?.let {
|
||||||
builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX)
|
builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX)
|
||||||
mangleExtensionReceiverParameter(builder, it)
|
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) {
|
private fun mangleExtensionReceiverParameter(vpBuilder: StringBuilder, param: ReceiverParameterDescriptor) {
|
||||||
mangleType(vpBuilder, param.type)
|
mangleType(vpBuilder, param.type)
|
||||||
}
|
}
|
||||||
|
|||||||
+14
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -16181,6 +16181,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/localDeclaration.kt");
|
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
|
@Test
|
||||||
@TestMetadata("plusAssign.kt")
|
@TestMetadata("plusAssign.kt")
|
||||||
public void testPlusAssign() throws Exception {
|
public void testPlusAssign() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user