[IR] Support hidden parameters in IrMangler

- make them be skipped in signature
This commit is contained in:
Roman Artemev
2020-09-09 16:41:15 +03:00
parent 8209b70a2f
commit b84084d54e
2 changed files with 22 additions and 8 deletions
@@ -5,9 +5,7 @@
package org.jetbrains.kotlin.backend.common.serialization.mangle.ir package org.jetbrains.kotlin.backend.common.serialization.mangle.ir
import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinMangleComputer import org.jetbrains.kotlin.backend.common.serialization.mangle.*
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode
import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangler import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangler
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
@@ -106,14 +104,19 @@ abstract class IrMangleComputer(protected val builder: StringBuilder, private va
} }
extensionReceiverParameter?.let { extensionReceiverParameter?.let {
builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX) if (!it.isHidden) {
mangleValueParameter(builder, it) builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX)
mangleValueParameter(builder, it)
}
} }
valueParameters.collectForMangler(builder, MangleConstant.VALUE_PARAMETERS) { valueParameters.collectForMangler(builder, MangleConstant.VALUE_PARAMETERS) {
appendSignature(specialValueParamPrefix(it)) if (!it.isHidden) {
mangleValueParameter(this, it) appendSignature(specialValueParamPrefix(it))
mangleValueParameter(this, it)
}
} }
typeParameters.collectForMangler(builder, MangleConstant.TYPE_PARAMETERS) { mangleTypeParameter(this, it) } typeParameters.collectForMangler(builder, MangleConstant.TYPE_PARAMETERS) { mangleTypeParameter(this, it) }
if (!isCtor && !returnType.isUnit() && addReturnType()) { if (!isCtor && !returnType.isUnit() && addReturnType()) {
@@ -12,14 +12,25 @@ fun <T> Collection<T>.collectForMangler(builder: StringBuilder, params: MangleCo
builder.append(params.prefix) builder.append(params.prefix)
var addSeparator = true
for (e in this) { for (e in this) {
if (first) { if (first) {
first = false first = false
} else { } else if (addSeparator) {
builder.append(params.separator) builder.append(params.separator)
} }
val l = builder.length
builder.collect(e) builder.collect(e)
addSeparator = l < builder.length
}
if (!addSeparator) {
if (builder.last() == params.separator) {
// avoid signatures like foo(Int;)
builder.deleteCharAt(builder.lastIndex)
}
} }
builder.append(params.suffix) builder.append(params.suffix)