From 3d3b5591e18fc6473532cbaac9f78918cd3a23a9 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 20 May 2015 16:01:09 +0300 Subject: [PATCH] Control-Flow: Improve debug text of ReadValueInstruction --- .../pseudocode/instructions/eval/accessInstructions.kt | 10 +++++++++- .../lexicalScopes/propertyAccessorScope.instructions | 2 +- .../lexicalScopes/propertyAccessorScope.values | 2 +- .../localAndNonlocalReturnsWithFinally.instructions | 2 +- .../localAndNonlocalReturnsWithFinally.values | 2 +- .../complexAssignmentWithGetSetViaVar.instructions | 4 ++-- .../complexAssignmentWithGetSetViaVar.values | 2 +- .../complexAssignmentWithSetViaVar.instructions | 2 +- .../conventions/complexAssignmentWithSetViaVar.values | 2 +- .../testData/cfg/conventions/getViaVar.instructions | 4 ++-- .../testData/cfg/conventions/setViaVar.instructions | 4 ++-- compiler/testData/cfg/conventions/setViaVar.values | 4 ++-- .../properties/backingFieldAccess.instructions | 4 ++-- .../declarations/properties/backingFieldAccess.values | 2 +- .../backingFieldQualifiedWithThis.instructions | 6 +++--- .../properties/backingFieldQualifiedWithThis.values | 4 ++-- 16 files changed, 32 insertions(+), 24 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt index 8eb0f88aa5c..1e25f3be7e2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt @@ -69,7 +69,15 @@ public class ReadValueInstruction private ( override fun toString(): String { val inVal = if (receiverValues.isEmpty()) "" else "|${receiverValues.keySet().joinToString()}" - return "r(${render(element)}$inVal) -> $outputValue" + val targetName = when (target) { + is AccessTarget.Declaration -> target.descriptor + is AccessTarget.Call -> target.resolvedCall.getResultingDescriptor() + else -> null + }?.getName()?.asString() + + val elementText = render(element) + val description = if (targetName != null && targetName != elementText) "$elementText, $targetName" else elementText + return "r($description$inVal) -> $outputValue" } override fun createCopy(): InstructionImpl = diff --git a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.instructions b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.instructions index 3d0e5b18854..ef6ac70ae30 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.instructions +++ b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.instructions @@ -37,7 +37,7 @@ L3: 3 INIT: in: {} out: {} 4 mark({ return $a }) magic[IMPLICIT_RECEIVER]($a) -> USE: in: {a=READ} out: {a=READ} - r($a|) -> USE: in: {} out: {a=READ} + r($a, a|) -> USE: in: {} out: {a=READ} ret(*|) L4 L4: 3 diff --git a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values index 42b73d35184..7a369d54250 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values @@ -18,7 +18,7 @@ get() { } --------------------- : A NEW: magic[IMPLICIT_RECEIVER]($a) -> -$a : Int NEW: r($a|) -> +$a : Int NEW: r($a, a|) -> return $a !: * { return $a } !: * COPY ===================== diff --git a/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.instructions b/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.instructions index b7155a80260..cf9317bcf07 100644 --- a/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.instructions +++ b/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.instructions @@ -7,7 +7,7 @@ L0: magic[FAKE_INITIALIZER](f: (T) -> U) -> w(f|) r(f) -> - r(this) -> + r(this, ) -> mark(f(this)) call(f(this), invoke|, ) -> ret(*|) L1 diff --git a/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.values b/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.values index 8419322f996..23a0a73e018 100644 --- a/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.values +++ b/compiler/testData/cfg/controlStructures/localAndNonlocalReturnsWithFinally.values @@ -4,7 +4,7 @@ fun T.let(f: (T) -> U): U = f(this) : {<: (T) -> U} NEW: magic[FAKE_INITIALIZER](f: (T) -> U) -> f : {<: (T) -> U} NEW: r(f) -> this : {<: T} COPY -this : {<: T} NEW: r(this) -> +this : {<: T} NEW: r(this, ) -> f(this) : {<: U} NEW: call(f(this), invoke|, ) -> ===================== == bar == diff --git a/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.instructions b/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.instructions index 1ab832bc036..69a7401f616 100644 --- a/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.instructions +++ b/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.instructions @@ -86,7 +86,7 @@ L0: 2 mark({ foo[1] += 2 }) mark(foo[1]) r(foo) -> - r(foo[1]|) -> + r(foo[1], get|) -> r(1) -> mark(foo[1]) call(foo[1], invoke|, ) -> @@ -94,7 +94,7 @@ L0: mark(foo[1] += 2) call(foo[1] += 2, plus|, ) -> r(foo) -> - r(foo[1]|) -> + r(foo[1], set|) -> r(1) -> call(foo[1] += 2, invoke|, , ) -> L1: diff --git a/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.values b/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.values index 78544ae2525..b0d41971a23 100644 --- a/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.values +++ b/compiler/testData/cfg/conventions/complexAssignmentWithGetSetViaVar.values @@ -34,7 +34,7 @@ fun test(foo: Foo) { : Foo NEW: magic[FAKE_INITIALIZER](foo: Foo) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> -foo[1] : Bar NEW: r(foo[1]|) -> +foo[1] : Bar NEW: r(foo[1], set|) -> 2 : Int NEW: r(2) -> foo[1] += 2 : * NEW: call(foo[1] += 2, invoke|, , ) -> { foo[1] += 2 } : * COPY diff --git a/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.instructions b/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.instructions index 803b819cd32..28b80050177 100644 --- a/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.instructions +++ b/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.instructions @@ -87,7 +87,7 @@ L0: mark(foo[1] += 2) call(foo[1] += 2, plus|, ) -> r(foo) -> - r(foo[1]|) -> + r(foo[1], set|) -> r(1) -> call(foo[1] += 2, invoke|, , ) -> L1: diff --git a/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.values b/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.values index c31a2b98eed..57d465a96fb 100644 --- a/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.values +++ b/compiler/testData/cfg/conventions/complexAssignmentWithSetViaVar.values @@ -31,7 +31,7 @@ fun test(foo: Foo) { : Foo NEW: magic[FAKE_INITIALIZER](foo: Foo) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> -foo[1] : Bar NEW: r(foo[1]|) -> +foo[1] : Bar NEW: r(foo[1], set|) -> 2 : Int NEW: r(2) -> foo[1] += 2 : * NEW: call(foo[1] += 2, invoke|, , ) -> { foo[1] += 2 } : * COPY diff --git a/compiler/testData/cfg/conventions/getViaVar.instructions b/compiler/testData/cfg/conventions/getViaVar.instructions index 2c943772eb3..8eb26af0462 100644 --- a/compiler/testData/cfg/conventions/getViaVar.instructions +++ b/compiler/testData/cfg/conventions/getViaVar.instructions @@ -60,7 +60,7 @@ L0: 2 mark({ foo[1] }) mark(foo[1]) r(foo) -> - r(foo[1]|) -> + r(foo[1], get|) -> r(1) -> mark(foo[1]) call(foo[1], invoke|, ) -> @@ -87,7 +87,7 @@ L0: 2 mark({ foo[1] }) mark(foo[1]) r(foo) -> - r(foo[1]|) -> + r(foo[1], get|) -> r(1) -> mark(foo[1]) call(foo[1], invoke|, ) -> diff --git a/compiler/testData/cfg/conventions/setViaVar.instructions b/compiler/testData/cfg/conventions/setViaVar.instructions index 16ea555c066..1552ebd8011 100644 --- a/compiler/testData/cfg/conventions/setViaVar.instructions +++ b/compiler/testData/cfg/conventions/setViaVar.instructions @@ -63,7 +63,7 @@ L0: 2 mark({ foo[1] = 2 }) mark(foo[1]) r(foo) -> - r(foo[1]|) -> + r(foo[1], set|) -> r(1) -> r(2) -> call(foo[1] = 2, invoke|, , ) -> @@ -90,7 +90,7 @@ L0: 2 mark({ foo[1] = 2 }) mark(foo[1]) r(foo) -> - r(foo[1]|) -> + r(foo[1], set|) -> r(1) -> r(2) -> call(foo[1] = 2, invoke|, , ) -> diff --git a/compiler/testData/cfg/conventions/setViaVar.values b/compiler/testData/cfg/conventions/setViaVar.values index 14506459408..14d484ac143 100644 --- a/compiler/testData/cfg/conventions/setViaVar.values +++ b/compiler/testData/cfg/conventions/setViaVar.values @@ -25,7 +25,7 @@ fun test1(foo: Foo) { : Foo NEW: magic[FAKE_INITIALIZER](foo: Foo) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> -foo[1] : Bar NEW: r(foo[1]|) -> +foo[1] : Bar NEW: r(foo[1], set|) -> 2 : Int NEW: r(2) -> foo[1] = 2 : * NEW: call(foo[1] = 2, invoke|, , ) -> { foo[1] = 2 } : * COPY @@ -39,7 +39,7 @@ fun test2(foo: Foo, set: Foo.(Int, Int) -> Int) { : {<: Foo.(Int, Int) -> Int} NEW: magic[FAKE_INITIALIZER](set: Foo.(Int, Int) -> Int) -> foo : Foo NEW: r(foo) -> 1 : Int NEW: r(1) -> -foo[1] : Bar NEW: r(foo[1]|) -> +foo[1] : Bar NEW: r(foo[1], set|) -> 2 : Int NEW: r(2) -> foo[1] = 2 : * NEW: call(foo[1] = 2, invoke|, , ) -> { foo[1] = 2 } : * COPY diff --git a/compiler/testData/cfg/declarations/properties/backingFieldAccess.instructions b/compiler/testData/cfg/declarations/properties/backingFieldAccess.instructions index 034a9d9a66d..c8a511376a1 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldAccess.instructions +++ b/compiler/testData/cfg/declarations/properties/backingFieldAccess.instructions @@ -13,11 +13,11 @@ L0: v(val a: Int get() = 1) 2 mark({ $a }) magic[IMPLICIT_RECEIVER]($a) -> - r($a|) -> + r($a, a|) -> L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] -===================== \ No newline at end of file +===================== diff --git a/compiler/testData/cfg/declarations/properties/backingFieldAccess.values b/compiler/testData/cfg/declarations/properties/backingFieldAccess.values index 431ec3f8c21..3194299dd53 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldAccess.values +++ b/compiler/testData/cfg/declarations/properties/backingFieldAccess.values @@ -9,6 +9,6 @@ class C { } --------------------- : C NEW: magic[IMPLICIT_RECEIVER]($a) -> -$a : * NEW: r($a|) -> +$a : * NEW: r($a, a|) -> { $a } : * COPY ===================== diff --git a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.instructions b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.instructions index e2d652d107a..28cce844d5b 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.instructions +++ b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.instructions @@ -22,8 +22,8 @@ L0: mark("foo") r("foo") -> mark(this.$bar) - r(this) -> - r($bar|) -> + r(this, ) -> + r($bar, bar|) -> mark("foo" + this.$bar) call("foo" + this.$bar, plus|, ) -> ret(*|) L1 @@ -33,4 +33,4 @@ error: PREV:[] sink: PREV:[, ] -===================== \ No newline at end of file +===================== diff --git a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values index c6b6648fcd5..2a8c918a997 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values +++ b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values @@ -10,8 +10,8 @@ fun foo() = "foo" + this.$bar --------------------- "foo" : String NEW: r("foo") -> this : {<: Bar} COPY -this : {<: Bar} NEW: r(this) -> -$bar : * NEW: r($bar|) -> +this : {<: Bar} NEW: r(this, ) -> +$bar : * NEW: r($bar, bar|) -> this.$bar : * COPY "foo" + this.$bar : String NEW: call("foo" + this.$bar, plus|, ) -> =====================