From ef194ffe232931b39f50b1a2dd49ef87e545f697 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 3 Dec 2013 18:12:03 +0400 Subject: [PATCH] Order fixed in assignment instructions with qualified expression on a lhs --- .../jet/lang/cfg/JetControlFlowProcessor.java | 10 +++------- compiler/testData/cfg/Assignments.instructions | 18 ++++++++---------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index abae820b925..6dc08ec889e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -358,21 +358,17 @@ public class JetControlFlowProcessor { return; } - if (left instanceof JetSimpleNameExpression) { - // Do nothing, only record write below + if (left instanceof JetSimpleNameExpression || left instanceof JetProperty) { + generateInstructions(rhs, false); } else if (left instanceof JetQualifiedExpression) { - // read the receiver + generateInstructions(rhs, false); generateInstructions(((JetQualifiedExpression) left).getReceiverExpression(), false); } - else if (left instanceof JetProperty) { - // do nothing, just write below - } else { builder.unsupported(parentExpression); // TODO } - generateInstructions(rhs, false); recordWrite(left, parentExpression); } diff --git a/compiler/testData/cfg/Assignments.instructions b/compiler/testData/cfg/Assignments.instructions index 4123c49d123..d378755e555 100644 --- a/compiler/testData/cfg/Assignments.instructions +++ b/compiler/testData/cfg/Assignments.instructions @@ -36,9 +36,9 @@ L0: r(2) NEXT:[w(x)] PREV:[w(x)] w(x) NEXT:[r(x)] PREV:[r(2)] r(x) NEXT:[r(2)] PREV:[w(x)] - r(2) NEXT:[r(+=)] PREV:[r(x)] - r(+=) NEXT:[w(x)] PREV:[r(2)] - w(x) NEXT:[r(true)] PREV:[r(+=)] + r(2) NEXT:[call(+=, plus)] PREV:[r(x)] + call(+=, plus) NEXT:[w(x)] PREV:[r(2)] + w(x) NEXT:[r(true)] PREV:[call(+=, plus)] r(true) NEXT:[jf(L2)] PREV:[w(x)] jf(L2) NEXT:[r(2), r(1)] PREV:[r(true)] r(1) NEXT:[jmp(L3)] PREV:[jf(L2)] @@ -61,14 +61,12 @@ L4: L5: r(false && true) NEXT:[w(z)] PREV:[jf(L5), r(true)] w(z) NEXT:[v(val t = Test())] PREV:[r(false && true)] - v(val t = Test()) NEXT:[r(Test)] PREV:[w(z)] - r(Test) NEXT:[r(Test())] PREV:[v(val t = Test())] - r(Test()) NEXT:[w(t)] PREV:[r(Test)] - w(t) NEXT:[r(1)] PREV:[r(Test())] + v(val t = Test()) NEXT:[call(Test, )] PREV:[w(z)] + call(Test, ) NEXT:[w(t)] PREV:[v(val t = Test())] + w(t) NEXT:[r(1)] PREV:[call(Test, )] r(1) NEXT:[r(t)] PREV:[w(t)] - r(t) NEXT:[r(=)] PREV:[r(1)] - r(=) NEXT:[w(t.x)] PREV:[r(t)] - w(t.x) NEXT:[] PREV:[r(=)] + r(t) NEXT:[w(t.x)] PREV:[r(1)] + w(t.x) NEXT:[] PREV:[r(t)] L1: NEXT:[] PREV:[w(t.x)] error: