From 47f0b68a8c8fb1b16a0702b585dbf9f51539cb09 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 9 Jan 2019 15:58:52 +0300 Subject: [PATCH] Change mangling for destructured lambda parameters --- .idea/dictionaries/yan.xml | 1 + .../org/jetbrains/kotlin/codegen/AsmUtil.java | 22 +--- .../kotlin/codegen/FunctionCodegen.java | 4 +- .../codegen/VariableAsmNameManglingUtils.kt | 48 +++++++ .../backend/jvm/codegen/ExpressionCodegen.kt | 8 +- .../destructuringInLambdas.kt | 2 +- .../destructuringInSuspendLambda/dataClass.kt | 2 +- .../extensionComponents.kt | 2 +- .../destructuringInSuspendLambda/generic.kt | 2 +- .../destructuringInSuspendLambda/inline.kt | 2 +- .../underscoreNames.kt | 2 +- .../destructuringInlineLambda.kt | 2 +- .../underscoreNames.kt | 2 +- .../asmLike/receiverMangling/mangledNames.kt | 17 +++ .../asmLike/receiverMangling/mangledNames.txt | 123 ++++++++++++++++++ ...smLikeInstructionListingTestGenerated.java | 5 + .../impl/ValueParameterDescriptorImpl.kt | 10 -- .../lambdas/destructuringParam.out | 2 +- .../lambdas/underscoreNames.out | 2 +- 19 files changed, 213 insertions(+), 45 deletions(-) create mode 100644 compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt create mode 100644 compiler/testData/codegen/asmLike/receiverMangling/mangledNames.kt create mode 100644 compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt diff --git a/.idea/dictionaries/yan.xml b/.idea/dictionaries/yan.xml index 0c699ec80a2..e510e16bd37 100644 --- a/.idea/dictionaries/yan.xml +++ b/.idea/dictionaries/yan.xml @@ -3,6 +3,7 @@ debuggee deserializes + destructured hacky impls kapt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 88a799370eb..c4e3acf11e0 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -45,7 +45,6 @@ import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker; import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver; import org.jetbrains.kotlin.resolve.inline.InlineUtil; import org.jetbrains.kotlin.resolve.jvm.*; -import org.jetbrains.kotlin.resolve.jvm.checkers.DalvikIdentifierUtils; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; import org.jetbrains.kotlin.serialization.DescriptorSerializer; import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor; @@ -205,26 +204,7 @@ public class AsmUtil { return defaultName; } - if (!DalvikIdentifierUtils.isValidDalvikIdentifier(callableName)) { - return prefix + mangleLabel(callableName); - } - - return prefix + callableName; - } - - private static String mangleLabel(String label) { - StringBuilder sb = new StringBuilder(); - - for (char c : label.toCharArray()) { - if (DalvikIdentifierUtils.isValidDalvikCharacter(c)) { - sb.append(c); - continue; - } - - sb.append("_u").append(Integer.toHexString(c)); - } - - return sb.toString(); + return prefix + VariableAsmNameManglingUtils.mangleNameIfNeeded(callableName); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index bf1c8fbdb78..42a8d1d7d3e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -843,7 +843,7 @@ public class FunctionCodegen { if (kind == JvmMethodParameterKind.VALUE) { ValueParameterDescriptor parameter = valueParameterIterator.next(); - String nameForDestructuredParameter = ValueParameterDescriptorImpl.getNameForDestructuredParameterOrNull(parameter); + String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter); parameterName = nameForDestructuredParameter == null @@ -902,7 +902,7 @@ public class FunctionCodegen { List destructuredParametersForSuspendLambda ) { for (ValueParameterDescriptor parameter : destructuredParametersForSuspendLambda) { - String nameForDestructuredParameter = ValueParameterDescriptorImpl.getNameForDestructuredParameterOrNull(parameter); + String nameForDestructuredParameter = VariableAsmNameManglingUtils.getNameForDestructuredParameterOrNull(parameter); if (nameForDestructuredParameter == null) continue; Type type = typeMapper.mapType(parameter.getType()); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt new file mode 100644 index 00000000000..d8d2d2e1d87 --- /dev/null +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/VariableAsmNameManglingUtils.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +@file:JvmName("VariableAsmNameManglingUtils") +package org.jetbrains.kotlin.codegen + +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl +import org.jetbrains.kotlin.resolve.jvm.checkers.isValidDalvikCharacter + +fun getNameForDestructuredParameterOrNull(valueParameterDescriptor: ValueParameterDescriptor): String? { + val variables = ValueParameterDescriptorImpl.getDestructuringVariablesOrNull(valueParameterDescriptor) ?: return null + + @Suppress("SpellCheckingInspection") + return "\$dstr\$" + variables.joinToString(separator = "$") { descriptor -> + val name = descriptor.name + mangleNameIfNeeded( + when { + name.isSpecial -> "\$_\$" + else -> descriptor.name.asString() + } + ) + } +} + + +fun mangleNameIfNeeded(name: String): String { + if (name.all { it.isValidCharacter() }) { + return name + } + + return buildString { + for (c in name) { + if (c.isValidCharacter()) { + append(c) + continue + } + + append("_u").append(Integer.toHexString(c.toInt())) + } + } +} + +private fun Char.isValidCharacter(): Boolean { + return this != '$' && this != '-' && isValidDalvikCharacter(this) +} \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 46e32d09501..5aff0a645ce 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -183,8 +183,12 @@ class ExpressionCodegen( private fun writeValueParameterInLocalVariableTable(param: IrValueParameter, startLabel: Label) { val descriptor = param.descriptor - val nameForDestructuredParameter = if (descriptor is ValueParameterDescriptor) - ValueParameterDescriptorImpl.getNameForDestructuredParameterOrNull(descriptor) else null + val nameForDestructuredParameter = if (descriptor is ValueParameterDescriptor) { + getNameForDestructuredParameterOrNull(descriptor) + } else { + null + } + val type = typeMapper.mapType(descriptor) // NOTE: we expect all value parameters to be present in the frame. mv.visitLocalVariable( diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt b/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt index 74a3318de80..4370f63cf10 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt @@ -9,6 +9,6 @@ fun box() { // METHOD : DestructuringInLambdasKt$box$1.invoke(LA;)Ljava/lang/String; // VARIABLE : NAME=this TYPE=LDestructuringInLambdasKt$box$1; INDEX=0 -// VARIABLE : NAME=$x_y TYPE=LA; INDEX=1 +// VARIABLE : NAME=$dstr$x$y TYPE=LA; INDEX=1 // VARIABLE : NAME=x TYPE=Ljava/lang/String; INDEX=2 // VARIABLE : NAME=y TYPE=I INDEX=3 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/dataClass.kt b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/dataClass.kt index 58ca193b116..5e92abc3bae 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/dataClass.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/dataClass.kt @@ -15,6 +15,6 @@ suspend fun foo(data: Data, body: suspend (Data) -> Unit) { // METHOD : DataClassKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; // VARIABLE : NAME=this TYPE=LDataClassKt$test$2; INDEX=0 // VARIABLE : NAME=result TYPE=Ljava/lang/Object; INDEX=1 -// VARIABLE : NAME=$x_param_y_param TYPE=LData; INDEX=2 +// VARIABLE : NAME=$dstr$x_param$y_param TYPE=LData; INDEX=2 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 // VARIABLE : NAME=y_param TYPE=I INDEX=4 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/extensionComponents.kt b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/extensionComponents.kt index 6d5d431f7ec..f4441bc3d16 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/extensionComponents.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/extensionComponents.kt @@ -21,7 +21,7 @@ suspend fun test() = B.bar() // METHOD : ExtensionComponentsKt$bar$3.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; // VARIABLE : NAME=this TYPE=LExtensionComponentsKt$bar$3; INDEX=0 // VARIABLE : NAME=result TYPE=Ljava/lang/Object; INDEX=1 -// VARIABLE : NAME=$x_param_y_param_z_param TYPE=LA; INDEX=2 +// VARIABLE : NAME=$dstr$x_param$y_param$z_param TYPE=LA; INDEX=2 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=4 // VARIABLE : NAME=z_param TYPE=I INDEX=5 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/generic.kt b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/generic.kt index 23935c17857..e10b68c42cc 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/generic.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/generic.kt @@ -10,6 +10,6 @@ suspend fun test() = foo(A("OK", 1)) { (x_param, y_param) -> x_param + (y_param. // METHOD : GenericKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; // VARIABLE : NAME=this TYPE=LGenericKt$test$2; INDEX=0 // VARIABLE : NAME=result TYPE=Ljava/lang/Object; INDEX=1 -// VARIABLE : NAME=$x_param_y_param TYPE=LA; INDEX=2 +// VARIABLE : NAME=$dstr$x_param$y_param TYPE=LA; INDEX=2 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 // VARIABLE : NAME=y_param TYPE=I INDEX=4 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/inline.kt b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/inline.kt index 1d745b2becf..e1af0fe5b00 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/inline.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/inline.kt @@ -9,7 +9,7 @@ suspend fun test() = foo(A("O", "K")) { (x_param, y_param) -> x_param + y_param // METHOD : InlineKt.test(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; // VARIABLE : NAME= TYPE=LA; INDEX=4 // VARIABLE : NAME=continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=3 -// VARIABLE : NAME=$x_param_y_param TYPE=LA; INDEX=6 +// VARIABLE : NAME=$dstr$x_param$y_param TYPE=LA; INDEX=6 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=7 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=8 // VARIABLE : NAME=$i$a$-foo-InlineKt$test$2 TYPE=I INDEX=5 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/underscoreNames.kt b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/underscoreNames.kt index 5d707837c8a..41a01a4e88a 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/underscoreNames.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInSuspendLambda/underscoreNames.kt @@ -13,6 +13,6 @@ suspend fun test() = foo(A()) { (x_param, _, y_param) -> x_param + y_param } // METHOD : UnderscoreNamesKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; // VARIABLE : NAME=this TYPE=LUnderscoreNamesKt$test$2; INDEX=0 // VARIABLE : NAME=result TYPE=Ljava/lang/Object; INDEX=1 -// VARIABLE : NAME=$x_param_$_$_y_param TYPE=LA; INDEX=2 +// VARIABLE : NAME=$dstr$x_param$-0024_-0024$y_param TYPE=LA; INDEX=2 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=4 diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInlineLambda.kt b/compiler/testData/checkLocalVariablesTable/destructuringInlineLambda.kt index 590af4f6739..78e0405e8e6 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInlineLambda.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInlineLambda.kt @@ -15,7 +15,7 @@ fun box(): String { // METHOD : DestructuringInlineLambdaKt.box()Ljava/lang/String; // VARIABLE : NAME=i TYPE=I INDEX=2 -// VARIABLE : NAME=$a1_a2_a3 TYPE=LStation; INDEX=1 +// VARIABLE : NAME=$dstr$a1$a2$a3 TYPE=LStation; INDEX=1 // VARIABLE : NAME=a1 TYPE=Ljava/lang/String; INDEX=4 // VARIABLE : NAME=a2 TYPE=Ljava/lang/String; INDEX=5 // VARIABLE : NAME=a3 TYPE=I INDEX=6 diff --git a/compiler/testData/checkLocalVariablesTable/underscoreNames.kt b/compiler/testData/checkLocalVariablesTable/underscoreNames.kt index 4639550ce8b..6994cf36146 100644 --- a/compiler/testData/checkLocalVariablesTable/underscoreNames.kt +++ b/compiler/testData/checkLocalVariablesTable/underscoreNames.kt @@ -28,7 +28,7 @@ fun box() { // VARIABLE : NAME=c TYPE=C INDEX=9 // VARIABLE : NAME=a TYPE=D INDEX=7 // VARIABLE : NAME=this TYPE=LUnderscoreNamesKt$box$1; INDEX=0 -// VARIABLE : NAME=$x_$_$_y TYPE=LA; INDEX=1 +// VARIABLE : NAME=$dstr$x$-0024_-0024$y TYPE=LA; INDEX=1 // VARIABLE : NAME=$noName_1 TYPE=Ljava/lang/String; INDEX=2 // VARIABLE : NAME=w TYPE=I INDEX=3 // VARIABLE : NAME=x TYPE=D INDEX=4 diff --git a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.kt b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.kt new file mode 100644 index 00000000000..208727c3e67 --- /dev/null +++ b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.kt @@ -0,0 +1,17 @@ +// LOCAL_VARIABLE_TABLE + +fun foo() { + t { (`a b`, `b$c`, `c-d`, `b$$c--d`, `a()§&*&^@あ化`) -> } +} + +private fun t(block: (Arr) -> Unit) { + block(Arr()) +} + +private data class Arr( + val a1: Int = 0, + val a2: Int = 0, + val a3: Int = 0, + val a4: Int = 0, + val a5: Int = 0 +) \ No newline at end of file diff --git a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt new file mode 100644 index 00000000000..3f6c0338d36 --- /dev/null +++ b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.txt @@ -0,0 +1,123 @@ +final class Arr : java/lang/Object { + private final int a1 + + private final int a2 + + private final int a3 + + private final int a4 + + private final int a5 + + public void (int a1, int a2, int a3, int a4, int a5) { + Local variables: + 0 this: LArr; + 1 a1: I + 2 a2: I + 3 a3: I + 4 a4: I + 5 a5: I + } + + public void (int p0, int p1, int p2, int p3, int p4, int p5, kotlin.jvm.internal.DefaultConstructorMarker p6) + + public void () + + public final int component1() { + Local variables: + 0 this: LArr; + } + + public final int component2() { + Local variables: + 0 this: LArr; + } + + public final int component3() { + Local variables: + 0 this: LArr; + } + + public final int component4() { + Local variables: + 0 this: LArr; + } + + public final int component5() { + Local variables: + 0 this: LArr; + } + + public final Arr copy(int a1, int a2, int a3, int a4, int a5) { + Local variables: + 0 this: LArr; + 1 a1: I + 2 a2: I + 3 a3: I + 4 a4: I + 5 a5: I + } + + public static Arr copy$default(Arr p0, int p1, int p2, int p3, int p4, int p5, int p6, java.lang.Object p7) + + public boolean equals(java.lang.Object p0) + + public final int getA1() { + Local variables: + 0 this: LArr; + } + + public final int getA2() { + Local variables: + 0 this: LArr; + } + + public final int getA3() { + Local variables: + 0 this: LArr; + } + + public final int getA4() { + Local variables: + 0 this: LArr; + } + + public final int getA5() { + Local variables: + 0 this: LArr; + } + + public int hashCode() + + public java.lang.String toString() +} + +final class MangledNamesKt$foo$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function1 { + public final static MangledNamesKt$foo$1 INSTANCE + + static void () + + void () + + 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あ化) { + 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; + 2 a b: I + 3 b$c: I + 4 c-d: I + 5 b$$c--d: I + 6 a()§&*&^@あ化: I + } +} + +public final class MangledNamesKt : java/lang/Object { + public final static void foo() + + private final static void t(kotlin.jvm.functions.Function1 block) { + Local variables: + 0 block: Lkotlin/jvm/functions/Function1; + } +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AsmLikeInstructionListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/AsmLikeInstructionListingTestGenerated.java index d4b640ad3ac..0289c3f45e3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AsmLikeInstructionListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AsmLikeInstructionListingTestGenerated.java @@ -86,6 +86,11 @@ public class AsmLikeInstructionListingTestGenerated extends AbstractAsmLikeInstr runTest("compiler/testData/codegen/asmLike/receiverMangling/innerClass.kt"); } + @TestMetadata("mangledNames.kt") + public void testMangledNames() throws Exception { + runTest("compiler/testData/codegen/asmLike/receiverMangling/mangledNames.kt"); + } + @TestMetadata("nonInlineReceivers_after.kt") public void testNonInlineReceivers_after() throws Exception { runTest("compiler/testData/codegen/asmLike/receiverMangling/nonInlineReceivers_after.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt index 10bd223f49e..05f39458aae 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt @@ -61,16 +61,6 @@ open class ValueParameterDescriptorImpl( WithDestructuringDeclaration(containingDeclaration, original, index, annotations, name, outType, declaresDefaultValue, isCrossinline, isNoinline, varargElementType, source, destructuringVariables) - - @JvmStatic - fun getNameForDestructuredParameterOrNull(valueParameterDescriptor: ValueParameterDescriptor): String? { - val variablesOrNull = ValueParameterDescriptorImpl.getDestructuringVariablesOrNull(valueParameterDescriptor) - return if (variablesOrNull == null) null else - "$" + join( - variablesOrNull.map { descriptor -> if (descriptor.name.isSpecial) "\$_\$" else descriptor.name.asString() }, - "_" - ) - } } class WithDestructuringDeclaration internal constructor( diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/destructuringParam.out b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/destructuringParam.out index 95ae8e3d9c1..2c1a8f94bbc 100644 --- a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/destructuringParam.out +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/destructuringParam.out @@ -7,7 +7,7 @@ Compile bytecode for y frame = invoke:12, DestructuringParamKt$main$1 {destructuringParam} this = this = {destructuringParam.DestructuringParamKt$main$1@uniqueID}Function1 field = arity: int = 1 (sp = Lambda.!EXT!) - local = $x_y: destructuringParam.A = {destructuringParam.A@uniqueID}A(x=O, y=K) (sp = null) + local = $dstr$x$y: destructuringParam.A = {destructuringParam.A@uniqueID}A(x=O, y=K) (sp = null) field = x: java.lang.String = O (sp = destructuringParam.kt, 2) field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!) element = 0 = 'O' 79 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/underscoreNames.out b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/underscoreNames.out index c3276a82729..10479d03f2d 100644 --- a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/underscoreNames.out +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/lambdas/underscoreNames.out @@ -8,7 +8,7 @@ Compile bytecode for arrayOfA frame = invoke:18, UnderscoreNamesKt$main$1 {underscoreNames} this = this = {underscoreNames.UnderscoreNamesKt$main$1@uniqueID}Function3 field = arity: int = 3 (sp = Lambda.!EXT!) - local = $x_$_$_y: underscoreNames.A = {underscoreNames.A@uniqueID}A(x=1.0, y=, z=0) (sp = null) + local = $dstr$x$-0024_-0024$y: underscoreNames.A = {underscoreNames.A@uniqueID}A(x=1.0, y=, z=0) (sp = null) field = x: double = 1.0 (sp = underscoreNames.kt, 2) field = y: java.lang.String = (sp = underscoreNames.kt, 2) field = value: char[] = {char[0]@uniqueID} (sp = String.!EXT!)