diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index e60e868c62c..964109c1676 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -65,7 +65,7 @@ open class JvmIrCodegenFactory( if (externalSymbolTable != null) externalMangler!! to externalSymbolTable else { val mangler = JvmDescriptorMangler(MainFunctionDetector(input.bindingContext, input.languageVersionSettings)) - val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), IrFactoryImpl, JvmNameProvider) + val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), IrFactoryImpl) mangler to symbolTable } val psi2ir = Psi2IrTranslator(input.languageVersionSettings, Psi2IrConfiguration(input.ignoreErrors)) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt index a945b957568..66740d1af87 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt @@ -178,7 +178,7 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin isFinal = false visibility = if (it.index < 0) DescriptorVisibilities.PRIVATE else JavaDescriptorVisibilities.PACKAGE_VISIBILITY } else null - ParameterInfo(field, it.type, it.name) + ParameterInfo(field, it.type, it.name, it.origin) } context.continuationClassesVarsCountByType[attributeOwnerId] = varsCountByType @@ -219,7 +219,7 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin parent = this, startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, - origin = IrDeclarationOrigin.DEFINED, + origin = param.origin, name = param.name, type = param.type ).apply { @@ -353,6 +353,6 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin } } -private data class ParameterInfo(val field: IrField?, val type: IrType, val name: Name) { +private data class ParameterInfo(val field: IrField?, val type: IrType, val name: Name, val origin: IrDeclarationOrigin) { val isUsed = field != null } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmNameProvider.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmNameProvider.kt deleted file mode 100644 index 9fe624c7941..00000000000 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmNameProvider.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.backend.jvm - -import org.jetbrains.kotlin.codegen.getNameForDestructuredParameterOrNull -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.ir.util.NameProvider -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore -import org.jetbrains.kotlin.utils.addToStdlib.safeAs - -object JvmNameProvider : NameProvider { - override fun nameForDeclaration(descriptor: DeclarationDescriptor): Name { - if (descriptor is ValueParameterDescriptor) - return nameForValueParameter(descriptor) - return NameProvider.DEFAULT.nameForDeclaration(descriptor) - } - - private fun nameForValueParameter(descriptor: ValueParameterDescriptor): Name { - getNameForDestructuredParameterOrNull(descriptor)?.let { return Name.identifier(it) } - if (DescriptorToSourceUtils.getSourceFromDescriptor(descriptor)?.safeAs()?.isSingleUnderscore == true) { - return Name.identifier("\$noName_${descriptor.index}") - } - return descriptor.name - } -} 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 da6e7b5384a..5fe1adc1776 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 @@ -347,6 +347,8 @@ class ExpressionCodegen( } private fun writeValueParameterInLocalVariableTable(param: IrValueParameter, startLabel: Label, endLabel: Label, isReceiver: Boolean) { + if (!param.isVisibleInLVT) return + // If the parameter is an extension receiver parameter or a captured extension receiver from enclosing, // then generate name accordingly. val name = if (param.origin == BOUND_RECEIVER_PARAMETER || isReceiver) { @@ -389,9 +391,13 @@ class ExpressionCodegen( return value } - private val IrVariable.isVisibleInLVT: Boolean + // Temporary variables, unnamed (underscore) parameters, and the object for destruction + // in a destructuring assignment for lambda parameters do not go in the local variable table. + private val IrValueDeclaration.isVisibleInLVT: Boolean get() = origin != IrDeclarationOrigin.IR_TEMPORARY_VARIABLE && - origin != IrDeclarationOrigin.FOR_LOOP_ITERATOR + origin != IrDeclarationOrigin.FOR_LOOP_ITERATOR && + origin != IrDeclarationOrigin.UNDERSCORE_PARAMETER && + origin != IrDeclarationOrigin.DESTRUCTURED_OBJECT_PARAMETER private fun writeLocalVariablesInTable(info: BlockInfo, endLabel: Label) { info.variables.forEach { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 0e4c6e83514..9a896f36e7a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.psi2ir.isConstructorDelegatingToSuper import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall +import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.descriptorUtil.isAnnotationConstructor import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal @@ -376,15 +377,24 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio ktElement: KtPureElement?, irOwnerElement: IrElement, name: Name? = null - ) = - context.symbolTable.declareValueParameter( + ): IrValueParameter { + var origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED + if (ktElement is KtParameter) { + if (ktElement.isSingleUnderscore) { + origin = IrDeclarationOrigin.UNDERSCORE_PARAMETER + } else if (ktElement.destructuringDeclaration != null) { + origin = IrDeclarationOrigin.DESTRUCTURED_OBJECT_PARAMETER + } + } + return context.symbolTable.declareValueParameter( ktElement?.pureStartOffset ?: irOwnerElement.startOffset, ktElement?.pureEndOffset ?: irOwnerElement.endOffset, - IrDeclarationOrigin.DEFINED, + origin, descriptor, descriptor.type.toIrType(), (descriptor as? ValueParameterDescriptor)?.varargElementType?.toIrType(), name ) + } private fun generateDefaultAnnotationParameterValue( valueExpression: KtExpression, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index fa3ad7cc833..e40bd869562 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -52,6 +52,8 @@ interface IrDeclarationOrigin { object LOCAL_FUNCTION : IrDeclarationOriginImpl("LOCAL_FUNCTION") object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA") object CATCH_PARAMETER : IrDeclarationOriginImpl("CATCH_PARAMETER") + object UNDERSCORE_PARAMETER : IrDeclarationOriginImpl("UNDERSCORE_PARAMETER") + object DESTRUCTURED_OBJECT_PARAMETER : IrDeclarationOriginImpl("DESTRUCTURED_OBJECT_PARAMETER") object INSTANCE_RECEIVER : IrDeclarationOriginImpl("INSTANCE_RECEIVER") object PRIMARY_CONSTRUCTOR_PARAMETER : IrDeclarationOriginImpl("PRIMARY_CONSTRUCTOR_PARAMETER") object IR_TEMPORARY_VARIABLE : IrDeclarationOriginImpl("IR_TEMPORARY_VARIABLE") diff --git a/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt b/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt index cc2cf2a5745..fe226f80728 100644 --- a/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt +++ b/compiler/testData/checkLocalVariablesTable/destructuringInLambdas.kt @@ -10,4 +10,6 @@ fun box() { // VARIABLE : NAME=x TYPE=Ljava/lang/String; INDEX=2 // VARIABLE : NAME=y TYPE=I INDEX=3 // VARIABLE : NAME=this TYPE=LDestructuringInLambdasKt$box$1; INDEX=0 -// VARIABLE : NAME=$dstr$x$y TYPE=LA; INDEX=1 \ No newline at end of file + +// JVM_TEMPLATES +// VARIABLE : NAME=$dstr$x$y TYPE=LA; INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/dataClass.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/dataClass.kt index b4e53b487cf..5382edd3339 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/dataClass.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/dataClass.kt @@ -13,8 +13,15 @@ suspend fun foo(data: Data, body: suspend (Data) -> Unit) { // METHOD : DataClassKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +// JVM_TEMPLATES // 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 // VARIABLE : NAME=this TYPE=LDataClassKt$test$2; INDEX=0 // VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 + +// JVM_IR_TEMPLATES +// VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 +// VARIABLE : NAME=y_param TYPE=I INDEX=4 +// VARIABLE : NAME=this TYPE=LDataClassKt$test$2; INDEX=0 +// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/extensionComponents.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/extensionComponents.kt index 0b83d31d4af..3b4ebe3c7c8 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/extensionComponents.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/extensionComponents.kt @@ -33,7 +33,6 @@ suspend fun test() = B.bar() // JVM_IR_TEMPLATES // METHOD : ExtensionComponentsKt$bar$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -// VARIABLE : NAME=$dstr$x_param$y_param$z_param TYPE=LA; INDEX=2 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=2 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=3 // VARIABLE : NAME=z_param TYPE=I INDEX=4 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/generic.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/generic.kt index 506636165ed..19095f2ab57 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/generic.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/generic.kt @@ -10,8 +10,15 @@ suspend fun test() = foo(A("OK", 1)) { (x_param, y_param) -> // METHOD : GenericKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +// JVM_TEMPLATES // 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 // VARIABLE : NAME=this TYPE=LGenericKt$test$2; INDEX=0 -// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 \ No newline at end of file +// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 + +// JVM_IR_TEMPLATES +// VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=3 +// VARIABLE : NAME=y_param TYPE=I INDEX=4 +// VARIABLE : NAME=this TYPE=LGenericKt$test$2; INDEX=0 +// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/inline.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/inline.kt index b970af2f840..8c78b43a04a 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/inline.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/inline.kt @@ -9,11 +9,21 @@ suspend fun test() = foo(A("O", "K")) { (x_param, y_param) -> x_param + y_param // TODO: Fix this after other issues in inlining suspend lambdas are resolved. // METHOD : InlineKt.test(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=6 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=7 + +// JVM_TEMPLATES // VARIABLE : NAME=$dstr$x_param$y_param TYPE=LA; INDEX=4 // VARIABLE : NAME=continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=3 // VARIABLE : NAME=$i$a$-foo-InlineKt$test$2 TYPE=I INDEX=5 // VARIABLE : NAME=a$iv TYPE=LA; INDEX=1 // VARIABLE : NAME=$i$f$foo TYPE=I INDEX=2 -// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=0 \ No newline at end of file +// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=0 + +// JVM_IR_TEMPLATES +// VARIABLE : NAME=continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=3 +// VARIABLE : NAME=$i$a$-foo-InlineKt$test$2 TYPE=I INDEX=5 +// VARIABLE : NAME=a$iv TYPE=LA; INDEX=1 +// VARIABLE : NAME=$i$f$foo TYPE=I INDEX=2 +// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=0 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/otherParameters.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/otherParameters.kt index 94e6de609fa..65ca903c25a 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/otherParameters.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/otherParameters.kt @@ -10,9 +10,18 @@ suspend fun test() = foo(A("O", "K")) { i_param, (x_param, y_param), v_param -> // METHOD : OtherParametersKt$test$2.invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; // VARIABLE : NAME=i_param TYPE=I INDEX=2 + +// JVM_TEMPLATES // VARIABLE : NAME=$dstr$x_param$y_param TYPE=LA; INDEX=3 // VARIABLE : NAME=v_param TYPE=Ljava/lang/String; INDEX=4 // VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=5 // VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=6 // VARIABLE : NAME=this TYPE=LOtherParametersKt$test$2; INDEX=0 // VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 + +// JVM_IR_TEMPLATES +// VARIABLE : NAME=v_param TYPE=Ljava/lang/String; INDEX=4 +// VARIABLE : NAME=x_param TYPE=Ljava/lang/String; INDEX=5 +// VARIABLE : NAME=y_param TYPE=Ljava/lang/String; INDEX=6 +// VARIABLE : NAME=this TYPE=LOtherParametersKt$test$2; INDEX=0 +// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/parameters.kt b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/parameters.kt index d72e004d206..cd2caf2e7d5 100644 --- a/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/parameters.kt +++ b/compiler/testData/checkLocalVariablesTable/parametersInSuspendLambda/parameters.kt @@ -26,11 +26,10 @@ suspend fun foo(data: Data, body: suspend Long.(String, Data, Int) -> Unit) { // VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=1 // JVM_IR_TEMPLATES -// VARIABLE : NAME=$dstr$x$_u24__u24$z TYPE=LData; INDEX=* // VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=* // VARIABLE : NAME=$this$foo TYPE=J INDEX=* // VARIABLE : NAME=i TYPE=I INDEX=* // VARIABLE : NAME=str TYPE=Ljava/lang/String; INDEX=* // VARIABLE : NAME=this TYPE=LParametersKt$test$2; INDEX=* // VARIABLE : NAME=x TYPE=Ljava/lang/String; INDEX=* -// VARIABLE : NAME=z TYPE=I INDEX=* \ No newline at end of file +// VARIABLE : NAME=z TYPE=I INDEX=* diff --git a/compiler/testData/checkLocalVariablesTable/underscoreNames.kt b/compiler/testData/checkLocalVariablesTable/underscoreNames.kt index 759e86921aa..8e657844915 100644 --- a/compiler/testData/checkLocalVariablesTable/underscoreNames.kt +++ b/compiler/testData/checkLocalVariablesTable/underscoreNames.kt @@ -29,6 +29,11 @@ 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 + +// JVM_TEMPLATES // VARIABLE : NAME=$dstr$x$_u24__u24$y TYPE=LA; INDEX=1 // VARIABLE : NAME=$noName_1 TYPE=Ljava/lang/String; INDEX=2 -// VARIABLE : NAME=w TYPE=I INDEX=3 \ No newline at end of file +// VARIABLE : NAME=w TYPE=I INDEX=3 + +// JVM_IR_TEMPLATES +// VARIABLE : NAME=w TYPE=I INDEX=3 diff --git a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.asm.ir.txt b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.asm.ir.txt index e5ab1852e63..f68a2c67ede 100644 --- a/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.asm.ir.txt +++ b/compiler/testData/codegen/asmLike/receiverMangling/mangledNames.asm.ir.txt @@ -116,7 +116,7 @@ final class MangledNamesKt$foo$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functi 0 this: LMangledNamesKt$foo$1; } - 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 p0) { Local variables: 2 a b: I 3 b$c: I @@ -124,7 +124,6 @@ final class MangledNamesKt$foo$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functi 5 b$$c--d: I 6 a()§&*&^@あ化: I 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; } public java.lang.Object invoke(java.lang.Object p1) { diff --git a/compiler/testData/debug/localVariables/destructuringInLambdas.kt b/compiler/testData/debug/localVariables/destructuringInLambdas.kt index 5f16e679c54..b7eb2eb474e 100644 --- a/compiler/testData/debug/localVariables/destructuringInLambdas.kt +++ b/compiler/testData/debug/localVariables/destructuringInLambdas.kt @@ -13,7 +13,13 @@ fun box() { // test.kt:3 : x:java.lang.String="O":java.lang.String, y:int=123:int // test.kt:8 box: // test.kt:5 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 + +// EXPECTATIONS JVM // test.kt:8 invoke: $dstr$x$y:A=A +// EXPECTATIONS JVM_IR +// test.kt:8 invoke: + +// EXPECTATIONS // test.kt:5 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 // test.kt:8 box: -// test.kt:9 box: \ No newline at end of file +// test.kt:9 box: diff --git a/compiler/testData/debug/localVariables/suspend/underscoreNames.kt b/compiler/testData/debug/localVariables/suspend/underscoreNames.kt index 69dd35fd49c..7afc8dde1d1 100644 --- a/compiler/testData/debug/localVariables/suspend/underscoreNames.kt +++ b/compiler/testData/debug/localVariables/suspend/underscoreNames.kt @@ -19,15 +19,20 @@ suspend fun box() = foo(A()) { (x_param, _, y_param) -> // test.kt:12 box: $completion:kotlin.coroutines.Continuation=Generated_Box_MainKt$main$1 // test.kt:10 foo: a:A=A, block:kotlin.jvm.functions.Function2=TestKt$box$2, $completion:kotlin.coroutines.Continuation=Generated_Box_MainKt$main$1 // test.kt:5 component1: + +// EXPECTATIONS JVM // test.kt:12 invokeSuspend: $result:java.lang.Object=kotlin.Unit, $dstr$x_param$_u24__u24$y_param:A=A +// EXPECTATIONS JVM_IR +// test.kt:12 invokeSuspend: $result:java.lang.Object=kotlin.Unit + +// EXPECTATIONS // test.kt:7 component3: // EXPECTATIONS JVM_IR -// test.kt:12 invokeSuspend: $result:java.lang.Object=kotlin.Unit, $dstr$x_param$_u24__u24$y_param:A=A, x_param:java.lang.String="O":java.lang.String +// test.kt:12 invokeSuspend: $result:java.lang.Object=kotlin.Unit, x_param:java.lang.String="O":java.lang.String +// test.kt:13 invokeSuspend: $result:java.lang.Object=kotlin.Unit, x_param:java.lang.String="O":java.lang.String, y_param:java.lang.String="K":java.lang.String // EXPECTATIONS JVM // test.kt:12 invokeSuspend: $result:java.lang.Object=kotlin.Unit, $dstr$x_param$_u24__u24$y_param:A=A - -// EXPECTATIONS // test.kt:13 invokeSuspend: $result:java.lang.Object=kotlin.Unit, $dstr$x_param$_u24__u24$y_param:A=A, x_param:java.lang.String="O":java.lang.String, y_param:java.lang.String="K":java.lang.String // EXPECTATIONS JVM_IR diff --git a/compiler/testData/debug/localVariables/underscoreNames.kt b/compiler/testData/debug/localVariables/underscoreNames.kt index c37233e9e94..002cbdd1475 100644 --- a/compiler/testData/debug/localVariables/underscoreNames.kt +++ b/compiler/testData/debug/localVariables/underscoreNames.kt @@ -30,21 +30,42 @@ fun box() { // test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function3=TestKt$box$1 // EXPECTATIONS JVM_IR -// test.kt:13 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int -// test.kt:15 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char +// test.kt:13 invoke: w:int=1:int +// test.kt:15 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char // EXPECTATIONS JVM // test.kt:15 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int // EXPECTATIONS // test.kt:4 : x:double=1.0:double, y:java.lang.String="":java.lang.String, z:char=0:char + +// EXPECTATIONS JVM // test.kt:15 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char // test.kt:16 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char +// EXPECTATIONS JVM_IR +// test.kt:15 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char +// test.kt:16 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char + +// EXPECTATIONS // test.kt:4 : x:double=1.0:double, y:java.lang.String="":java.lang.String, z:char=0:char + +// EXPECTATIONS JVM // test.kt:16 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char // test.kt:18 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char +// EXPECTATIONS JVM_IR +// test.kt:16 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char +// test.kt:18 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char + +// EXPECTATIONS // test.kt:8 getArrayOfA: + +// EXPECTATIONS JVM // test.kt:18 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char // test.kt:22 invoke: $dstr$x$_u24__u24$y:A=A, $noName_1:java.lang.String="":java.lang.String, w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char +// EXPECTATIONS JVM_IR +// test.kt:18 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char +// test.kt:22 invoke: w:int=1:int, x:double=1.0:double, y:char=0:char, a:double=1.0:double, c:char=0:char, _:java.lang.String="":java.lang.String, d:char=0:char + +// EXPECTATIONS // test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function3=TestKt$box$1 // test.kt:12 box: // test.kt:24 box: diff --git a/compiler/testData/ir/irText/lambdas/destructuringInLambda.ir.txt b/compiler/testData/ir/irText/lambdas/destructuringInLambda.ir.txt index eec6bd8b2d1..e950276c6f4 100644 --- a/compiler/testData/ir/irText/lambdas/destructuringInLambda.ir.txt +++ b/compiler/testData/ir/irText/lambdas/destructuringInLambda.ir.txt @@ -139,13 +139,13 @@ FILE fqName: fileName:/destructuringInLambda.kt FIELD PROPERTY_BACKING_FIELD name:fn type:kotlin.Function1<.A, kotlin.Int> visibility:private [static] EXPRESSION_BODY FUN_EXPR type=kotlin.Function1<.A, kotlin.Int> origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($dstr$_u24__u24$y:.A) returnType:kotlin.Int - VALUE_PARAMETER name:$dstr$_u24__u24$y index:0 type:.A + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (:.A) returnType:kotlin.Int + VALUE_PARAMETER DESTRUCTURED_OBJECT_PARAMETER name: index:0 type:.A BLOCK_BODY VAR name:y type:kotlin.Int [val] CALL 'public final fun component2 (): kotlin.Int [operator] declared in .A' type=kotlin.Int origin=COMPONENT_N(index=2) - $this: GET_VAR '$dstr$_u24__u24$y: .A declared in .fn.' type=.A origin=DESTRUCTURING_DECLARATION - RETURN type=kotlin.Nothing from='local final fun ($dstr$_u24__u24$y: .A): kotlin.Int declared in .fn' + $this: GET_VAR ': .A declared in .fn.' type=.A origin=DESTRUCTURING_DECLARATION + RETURN type=kotlin.Nothing from='local final fun (: .A): kotlin.Int declared in .fn' CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=PLUS $this: CONST Int type=kotlin.Int value=42 other: GET_VAR 'val y: kotlin.Int [val] declared in .fn.' type=kotlin.Int origin=null diff --git a/compiler/testData/ir/irText/lambdas/destructuringInLambda.kt.txt b/compiler/testData/ir/irText/lambdas/destructuringInLambda.kt.txt index 0200a7d2a2f..b26f811287d 100644 --- a/compiler/testData/ir/irText/lambdas/destructuringInLambda.kt.txt +++ b/compiler/testData/ir/irText/lambdas/destructuringInLambda.kt.txt @@ -55,10 +55,11 @@ data class A { } var fn: Function1 - field = local fun ($dstr$_u24__u24$y: A): Int { - val y: Int = $dstr$_u24__u24$y.component2() + field = local fun (: A): Int { + val y: Int = .component2() return 42.plus(other = y) } get set + diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/KJvmReplCompilerBase.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/KJvmReplCompilerBase.kt index 133ed12222d..ffcd609b15d 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/KJvmReplCompilerBase.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/KJvmReplCompilerBase.kt @@ -9,7 +9,6 @@ package org.jetbrains.kotlin.scripting.compiler.plugin.impl import com.intellij.openapi.Disposable import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory -import org.jetbrains.kotlin.backend.jvm.JvmNameProvider import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback @@ -356,7 +355,7 @@ class ReplCompilationState( val mangler = JvmDescriptorMangler( MainFunctionDetector(analyzerEngine.trace.bindingContext, environment.configuration.languageVersionSettings) ) - val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), IrFactoryImpl, JvmNameProvider) + val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), IrFactoryImpl) mangler to symbolTable }