From aca3be12e9cda12a317a42436a6480ed9147da70 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 9 Jan 2019 20:15:08 +0300 Subject: [PATCH] Change illegal local variable mangling rules --- .../codegen/VariableAsmNameManglingUtils.kt | 16 ++++++++++++---- .../asmLike/receiverMangling/mangledNames.txt | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt index d8d2d2e1d87..4dc07208fa6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt @@ -25,7 +25,6 @@ fun getNameForDestructuredParameterOrNull(valueParameterDescriptor: ValueParamet } } - fun mangleNameIfNeeded(name: String): String { if (name.all { it.isValidCharacter() }) { return name @@ -35,14 +34,23 @@ fun mangleNameIfNeeded(name: String): String { for (c in name) { if (c.isValidCharacter()) { append(c) - continue + } else { + append('-').append(c.toHex()) } - - append("_u").append(Integer.toHexString(c.toInt())) } } } +private fun Char.toHex(): String { + val hexString = Integer.toHexString(this.toInt()) + assert(hexString.length <= 4) + return if (hexString.length == 4) { + hexString + } else { + "0".repeat(4 - hexString.length) + hexString + } +} + private fun Char.isValidCharacter(): Boolean { return this != '$' && this != '-' && isValidDalvikCharacter(this) } \ No newline at end of file diff --git a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt index 3f6c0338d36..539dffe2fc6 100644 --- a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt +++ b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt @@ -101,10 +101,10 @@ final class MangledNamesKt$foo$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functi public java.lang.Object invoke(java.lang.Object p0) - public final void invoke(Arr $dstr$a_u20b$b_u24c$c_u2dd$b_u24_u24c_u2d_u2dd$a_u28_u29§_u26_u2a_u26_u5e_u40あ化) { + public final void invoke(Arr $dstr$a-0020b$b-0024c$c-002dd$b-0024-0024c-002d-002dd$a-0028-0029§-0026-002a-0026-005e-0040あ化) { Local variables: 0 this: LMangledNamesKt$foo$1; - 1 $dstr$a_u20b$b_u24c$c_u2dd$b_u24_u24c_u2d_u2dd$a_u28_u29§_u26_u2a_u26_u5e_u40あ化: LArr; + 1 $dstr$a-0020b$b-0024c$c-002dd$b-0024-0024c-002d-002dd$a-0028-0029§-0026-002a-0026-005e-0040あ化: LArr; 2 a b: I 3 b$c: I 4 c-d: I