From b84084d54e1cfa7df250f9c85af6ad46d4d0019c Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Wed, 9 Sep 2020 16:41:15 +0300 Subject: [PATCH] [IR] Support hidden parameters in IrMangler - make them be skipped in signature --- .../serialization/mangle/ir/IrMangleComputer.kt | 17 ++++++++++------- .../common/serialization/mangle/mangleUtils.kt | 13 ++++++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt index 94dfc3aed27..d6f505833c8 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt @@ -5,9 +5,7 @@ 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.MangleConstant -import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode +import org.jetbrains.kotlin.backend.common.serialization.mangle.* import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangler import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* @@ -106,14 +104,19 @@ abstract class IrMangleComputer(protected val builder: StringBuilder, private va } extensionReceiverParameter?.let { - builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX) - mangleValueParameter(builder, it) + if (!it.isHidden) { + builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX) + mangleValueParameter(builder, it) + } } valueParameters.collectForMangler(builder, MangleConstant.VALUE_PARAMETERS) { - appendSignature(specialValueParamPrefix(it)) - mangleValueParameter(this, it) + if (!it.isHidden) { + appendSignature(specialValueParamPrefix(it)) + mangleValueParameter(this, it) + } } + typeParameters.collectForMangler(builder, MangleConstant.TYPE_PARAMETERS) { mangleTypeParameter(this, it) } if (!isCtor && !returnType.isUnit() && addReturnType()) { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/mangleUtils.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/mangleUtils.kt index 2ec132b7ebb..784eab43f55 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/mangleUtils.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/mangleUtils.kt @@ -12,14 +12,25 @@ fun Collection.collectForMangler(builder: StringBuilder, params: MangleCo builder.append(params.prefix) + var addSeparator = true + for (e in this) { if (first) { first = false - } else { + } else if (addSeparator) { builder.append(params.separator) } + val l = builder.length 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)