[FIR, IR] Fix name mangling for functions with context receivers

- Mangled names of property accessors now include context receiver
  types of the corresponding property when computed from FIR.
- Context receivers are now supported when computing mangled names
  from IR
- IrBasedDescriptors now account for context receivers

^KT-57435 Fixed
This commit is contained in:
Sergej Jaskiewicz
2023-04-11 17:23:10 +02:00
committed by Space Team
parent 5700212119
commit 1a29b9efff
56 changed files with 120 additions and 199 deletions
@@ -78,7 +78,7 @@ open class DescriptorMangleComputer(builder: StringBuilder, mode: MangleMode) :
contextReceiverParameters.forEach {
builder.appendSignature(MangleConstant.CONTEXT_RECEIVER_PREFIX)
mangleContextReceiverParameter(builder, it)
mangleType(builder, it.type, null)
}
extensionReceiverParameter?.let {
@@ -105,10 +105,6 @@ open class DescriptorMangleComputer(builder: StringBuilder, mode: MangleMode) :
}
}
private fun mangleContextReceiverParameter(vpBuilder: StringBuilder, param: ReceiverParameterDescriptor) {
mangleType(vpBuilder, param.type, null)
}
private fun mangleExtensionReceiverParameter(vpBuilder: StringBuilder, param: ReceiverParameterDescriptor) {
mangleType(vpBuilder, param.type, null)
}
@@ -87,6 +87,13 @@ open class IrMangleComputer(
builder.appendSignature(it)
}
valueParameters.take(contextReceiverParametersCount).forEach {
if (!it.isHidden) {
builder.appendSignature(MangleConstant.CONTEXT_RECEIVER_PREFIX)
mangleType(builder, it.type, null)
}
}
extensionReceiverParameter?.let {
if (!it.isHidden) {
builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX)
@@ -94,7 +101,7 @@ open class IrMangleComputer(
}
}
valueParameters.collectForMangler(builder, MangleConstant.VALUE_PARAMETERS) {
valueParameters.drop(contextReceiverParametersCount).collectForMangler(builder, MangleConstant.VALUE_PARAMETERS) {
if (!it.isHidden) {
appendSignature(specialValueParamPrefix(it))
mangleValueParameter(this, it, null)