diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/flowFromInplaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/flowFromInplaceLambda.dot index ce3294f98b1..5d679933c0a 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/flowFromInplaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/flowFromInplaceLambda.dot @@ -78,31 +78,31 @@ digraph flowFromInplaceLambda_kt { 27 [label="Postponed enter to lambda"]; subgraph cluster_6 { color=blue - 29 [label="Enter function anonymousFunction"]; - 31 [label="Access variable R|/x|"]; - 32 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; - 30 [label="Exit function anonymousFunction"]; + 33 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 35 [label="Access variable R|/x|"]; + 36 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; + 34 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 34 [label="Call arguments union" style="filled" fillcolor=yellow]; + 30 [label="Call arguments union" style="filled" fillcolor=yellow]; 28 [label="Postponed exit from lambda"]; - 33 [label="Function call: R|kotlin/run|(...)"]; - 35 [label="Access variable R|/x|"]; - 36 [label="Function call: R|/takeInt|(...)"]; + 29 [label="Function call: R|kotlin/run|(...)"]; + 31 [label="Access variable R|/x|"]; + 32 [label="Function call: R|/takeInt|(...)"]; 26 [label="Exit function test_1" style="filled" fillcolor=red]; } 25 -> {27}; - 27 -> {29}; + 27 -> {33}; 27 -> {28} [color=red]; - 28 -> {33} [color=green]; + 28 -> {29} [color=green]; 29 -> {31}; - 30 -> {28} [color=green]; - 30 -> {34} [color=red]; + 30 -> {29} [color=red]; 31 -> {32}; - 32 -> {30}; + 32 -> {26}; 33 -> {35}; - 34 -> {33} [color=red]; + 34 -> {28} [color=green]; + 34 -> {30} [color=red]; 35 -> {36}; - 36 -> {26}; + 36 -> {34}; subgraph cluster_7 { color=red @@ -110,80 +110,80 @@ digraph flowFromInplaceLambda_kt { 39 [label="Postponed enter to lambda"]; subgraph cluster_8 { color=blue - 41 [label="Enter function anonymousFunction"]; - 43 [label="Access variable R|/y|"]; - 44 [label="Function call: R|/y|.#()"]; - 45 [label="Access variable R|/x|"]; - 46 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; - 42 [label="Exit function anonymousFunction"]; + 58 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 60 [label="Access variable R|/y|"]; + 61 [label="Function call: R|/y|.#()"]; + 62 [label="Access variable R|/x|"]; + 63 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; + 59 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 40 [label="Postponed exit from lambda"]; - 47 [label="Function call: R|kotlin/run|(...)"]; - 49 [label="Call arguments union" style="filled" fillcolor=yellow]; - 48 [label="Function call: R|/id|(...)"]; - 50 [label="Access variable R|/y|"]; - 51 [label="Type operator: (R|/y| as R|kotlin/Int|)"]; - 52 [label="Postponed enter to lambda"]; + 41 [label="Function call: R|kotlin/run|(...)"]; + 43 [label="Call arguments union" style="filled" fillcolor=yellow]; + 42 [label="Function call: R|/id|(...)"]; + 44 [label="Access variable R|/y|"]; + 45 [label="Type operator: (R|/y| as R|kotlin/Int|)"]; + 46 [label="Postponed enter to lambda"]; subgraph cluster_9 { color=blue - 54 [label="Enter function anonymousFunction"]; - 56 [label="Access variable R|/x|"]; - 57 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; - 58 [label="Access variable R|/y|"]; - 59 [label="Function call: R|/y|.R|kotlin/Int.inc|()"]; - 60 [label="Const: Int(1)"]; - 55 [label="Exit function anonymousFunction"]; + 64 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 66 [label="Access variable R|/x|"]; + 67 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; + 68 [label="Access variable R|/y|"]; + 69 [label="Function call: R|/y|.R|kotlin/Int.inc|()"]; + 70 [label="Const: Int(1)"]; + 65 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 53 [label="Postponed exit from lambda"]; - 61 [label="Function call: R|kotlin/run|(...)"]; - 63 [label="Call arguments union" style="filled" fillcolor=yellow]; - 62 [label="Function call: R|/select|(...)"]; - 64 [label="Variable declaration: lval a: R|kotlin/Int|"]; - 65 [label="Access variable R|/x|"]; - 66 [label="Function call: R|/takeInt|(...)"]; - 67 [label="Access variable R|/y|"]; - 68 [label="Function call: R|/takeInt|(...)"]; - 69 [label="Access variable R|/a|"]; - 70 [label="Function call: R|/takeInt|(...)"]; + 47 [label="Postponed exit from lambda"]; + 48 [label="Function call: R|kotlin/run|(...)"]; + 50 [label="Call arguments union" style="filled" fillcolor=yellow]; + 49 [label="Function call: R|/select|(...)"]; + 51 [label="Variable declaration: lval a: R|kotlin/Int|"]; + 52 [label="Access variable R|/x|"]; + 53 [label="Function call: R|/takeInt|(...)"]; + 54 [label="Access variable R|/y|"]; + 55 [label="Function call: R|/takeInt|(...)"]; + 56 [label="Access variable R|/a|"]; + 57 [label="Function call: R|/takeInt|(...)"]; 38 [label="Exit function test_2" style="filled" fillcolor=red]; } 37 -> {39}; - 39 -> {41}; + 39 -> {58}; 39 -> {40} [color=red]; - 40 -> {47}; + 40 -> {41}; 41 -> {43}; - 42 -> {40} [color=green]; - 42 -> {49} [color=red]; - 43 -> {44}; + 42 -> {44}; + 43 -> {42}; 44 -> {45}; 45 -> {46}; - 46 -> {42}; - 47 -> {49}; + 46 -> {64}; + 46 -> {47} [color=red]; + 47 -> {48}; 48 -> {50}; - 49 -> {48}; - 50 -> {51}; + 49 -> {51}; + 50 -> {49}; 51 -> {52}; - 52 -> {54}; - 52 -> {53} [color=red]; - 53 -> {61}; - 54 -> {56}; - 55 -> {53} [color=green]; - 55 -> {63} [color=red]; + 52 -> {53}; + 53 -> {54}; + 54 -> {55}; + 55 -> {56}; 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - 59 -> {60}; - 60 -> {55}; - 61 -> {63}; - 62 -> {64}; - 63 -> {62}; - 64 -> {65}; - 65 -> {66}; + 57 -> {38}; + 58 -> {60}; + 59 -> {40} [color=green]; + 59 -> {43} [color=red]; + 60 -> {61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {59}; + 64 -> {66}; + 65 -> {47} [color=green]; + 65 -> {50} [color=red]; 66 -> {67}; 67 -> {68}; 68 -> {69}; 69 -> {70}; - 70 -> {38}; + 70 -> {65}; subgraph cluster_10 { color=red @@ -191,80 +191,80 @@ digraph flowFromInplaceLambda_kt { 73 [label="Postponed enter to lambda"]; subgraph cluster_11 { color=blue - 75 [label="Enter function anonymousFunction"]; - 77 [label="Access variable R|/y|"]; - 78 [label="Function call: R|/y|.#()"]; - 79 [label="Access variable R|/x|"]; - 80 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; - 81 [label="Function call: R|/materialize|()"]; - 76 [label="Exit function anonymousFunction"]; + 89 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 91 [label="Access variable R|/y|"]; + 92 [label="Function call: R|/y|.#()"]; + 93 [label="Access variable R|/x|"]; + 94 [label="Type operator: (R|/x| as R|kotlin/Int|)"]; + 95 [label="Function call: R|/materialize|()"]; + 90 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 74 [label="Postponed exit from lambda"]; - 82 [label="Function call: R|kotlin/run|(...)"]; - 83 [label="Function call: R|/id|(...)"]; - 84 [label="Postponed enter to lambda"]; + 75 [label="Function call: R|kotlin/run|(...)"]; + 76 [label="Function call: R|/id|(...)"]; + 77 [label="Postponed enter to lambda"]; subgraph cluster_12 { color=blue - 86 [label="Enter function anonymousFunction"]; - 88 [label="Access variable R|/y|"]; - 89 [label="Type operator: (R|/y| as R|kotlin/Int|)"]; - 90 [label="Access variable R|/x|"]; - 91 [label="Function call: R|/x|.#()"]; - 92 [label="Access variable R|/y|"]; - 93 [label="Function call: R|/y|.R|kotlin/Int.inc|()"]; - 94 [label="Const: Int(1)"]; - 87 [label="Exit function anonymousFunction"]; + 96 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 98 [label="Access variable R|/y|"]; + 99 [label="Type operator: (R|/y| as R|kotlin/Int|)"]; + 100 [label="Access variable R|/x|"]; + 101 [label="Function call: R|/x|.#()"]; + 102 [label="Access variable R|/y|"]; + 103 [label="Function call: R|/y|.R|kotlin/Int.inc|()"]; + 104 [label="Const: Int(1)"]; + 97 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 85 [label="Postponed exit from lambda"]; - 95 [label="Function call: R|kotlin/run|(...)"]; - 97 [label="Call arguments union" style="filled" fillcolor=yellow]; - 96 [label="Function call: R|/select|(...)"]; - 98 [label="Variable declaration: lval a: R|kotlin/Int|"]; - 99 [label="Access variable R|/x|"]; - 100 [label="Function call: R|/takeInt|(...)"]; - 101 [label="Access variable R|/y|"]; - 102 [label="Function call: R|/takeInt|(...)"]; - 103 [label="Access variable R|/a|"]; - 104 [label="Function call: R|/takeInt|(...)"]; + 78 [label="Postponed exit from lambda"]; + 79 [label="Function call: R|kotlin/run|(...)"]; + 81 [label="Call arguments union" style="filled" fillcolor=yellow]; + 80 [label="Function call: R|/select|(...)"]; + 82 [label="Variable declaration: lval a: R|kotlin/Int|"]; + 83 [label="Access variable R|/x|"]; + 84 [label="Function call: R|/takeInt|(...)"]; + 85 [label="Access variable R|/y|"]; + 86 [label="Function call: R|/takeInt|(...)"]; + 87 [label="Access variable R|/a|"]; + 88 [label="Function call: R|/takeInt|(...)"]; 72 [label="Exit function test_3" style="filled" fillcolor=red]; } 71 -> {73}; - 73 -> {75}; + 73 -> {89}; 73 -> {74} [color=red]; - 74 -> {82}; - 75 -> {77}; - 76 -> {74} [color=green]; - 76 -> {97} [color=red]; - 77 -> {78}; + 74 -> {75}; + 75 -> {76}; + 76 -> {77}; + 77 -> {96}; + 77 -> {78} [color=red]; 78 -> {79}; - 79 -> {80}; - 80 -> {81}; - 81 -> {76}; + 79 -> {81}; + 80 -> {82}; + 81 -> {80}; 82 -> {83}; 83 -> {84}; - 84 -> {86}; - 84 -> {85} [color=red]; - 85 -> {95}; - 86 -> {88}; - 87 -> {85} [color=green]; - 87 -> {97} [color=red]; - 88 -> {89}; - 89 -> {90}; - 90 -> {91}; + 84 -> {85}; + 85 -> {86}; + 86 -> {87}; + 87 -> {88}; + 88 -> {72}; + 89 -> {91}; + 90 -> {74} [color=green]; + 90 -> {81} [color=red]; 91 -> {92}; 92 -> {93}; 93 -> {94}; - 94 -> {87}; - 95 -> {97}; + 94 -> {95}; + 95 -> {90}; 96 -> {98}; - 97 -> {96}; + 97 -> {78} [color=green]; + 97 -> {81} [color=red]; 98 -> {99}; 99 -> {100}; 100 -> {101}; 101 -> {102}; 102 -> {103}; 103 -> {104}; - 104 -> {72}; + 104 -> {97}; subgraph cluster_13 { color=red @@ -349,50 +349,50 @@ digraph flowFromInplaceLambda_kt { 141 [label="Postponed enter to lambda"]; subgraph cluster_17 { color=blue - 143 [label="Enter function anonymousFunction"]; - 145 [label="Function call: R|/materialize|()"]; - 144 [label="Exit function anonymousFunction"]; + 152 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 154 [label="Function call: R|/materialize|()"]; + 153 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 142 [label="Postponed exit from lambda"]; - 146 [label="Function call: R|kotlin/run|(...)"]; - 147 [label="Postponed enter to lambda"]; + 143 [label="Function call: R|kotlin/run|(...)"]; + 144 [label="Postponed enter to lambda"]; subgraph cluster_18 { color=blue - 149 [label="Enter function anonymousFunction"]; - 151 [label="Function call: R|/materialize|()"]; - 150 [label="Exit function anonymousFunction"]; + 155 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 157 [label="Function call: R|/materialize|()"]; + 156 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 148 [label="Postponed exit from lambda"]; - 152 [label="Function call: R|kotlin/run|(...)"]; - 154 [label="Call arguments union" style="filled" fillcolor=yellow]; - 153 [label="Function call: R|/select|(...)"]; - 155 [label="Variable declaration: lval x: R|kotlin/Int|"]; - 156 [label="Access variable R|/x|"]; - 157 [label="Function call: R|/takeInt|(...)"]; + 145 [label="Postponed exit from lambda"]; + 146 [label="Function call: R|kotlin/run|(...)"]; + 148 [label="Call arguments union" style="filled" fillcolor=yellow]; + 147 [label="Function call: R|/select|(...)"]; + 149 [label="Variable declaration: lval x: R|kotlin/Int|"]; + 150 [label="Access variable R|/x|"]; + 151 [label="Function call: R|/takeInt|(...)"]; 140 [label="Exit function test_5" style="filled" fillcolor=red]; } 139 -> {141}; - 141 -> {143}; + 141 -> {152}; 141 -> {142} [color=red]; - 142 -> {146}; - 143 -> {145}; - 144 -> {142} [color=green]; - 144 -> {154} [color=red]; - 145 -> {144}; - 146 -> {147}; + 142 -> {143}; + 143 -> {144}; + 144 -> {155}; + 144 -> {145} [color=red]; + 145 -> {146}; + 146 -> {148}; 147 -> {149}; - 147 -> {148} [color=red]; - 148 -> {152}; - 149 -> {151}; - 150 -> {148} [color=green]; - 150 -> {154} [color=red]; - 151 -> {150}; + 148 -> {147}; + 149 -> {150}; + 150 -> {151}; + 151 -> {140}; 152 -> {154}; - 153 -> {155}; + 153 -> {142} [color=green]; + 153 -> {148} [color=red]; 154 -> {153}; - 155 -> {156}; - 156 -> {157}; - 157 -> {140}; + 155 -> {157}; + 156 -> {145} [color=green]; + 156 -> {148} [color=red]; + 157 -> {156}; subgraph cluster_19 { color=red @@ -404,12 +404,12 @@ digraph flowFromInplaceLambda_kt { 167 [label="Postponed enter to lambda"]; subgraph cluster_21 { color=blue - 169 [label="Enter function anonymousFunction"]; - 171 [label="Function call: R|/materialize|()"]; - 170 [label="Exit function anonymousFunction"]; + 170 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 172 [label="Function call: R|/materialize|()"]; + 171 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 168 [label="Postponed exit from lambda"]; - 172 [label="Function call: R|kotlin/run|(...)"]; + 169 [label="Function call: R|kotlin/run|(...)"]; 166 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 161 [label="Postponed exit from lambda"]; @@ -426,12 +426,12 @@ digraph flowFromInplaceLambda_kt { 163 -> {164}; 164 -> {159}; 165 -> {167}; - 167 -> {169}; + 167 -> {170}; 167 -> {168} [color=red]; - 168 -> {172}; - 169 -> {171}; - 170 -> {168} [color=green]; - 171 -> {170}; - 172 -> {166}; + 168 -> {169}; + 169 -> {166}; + 170 -> {172}; + 171 -> {168} [color=green]; + 172 -> {171}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 42a50a7bd70..3c7343c9114 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -44,53 +44,53 @@ digraph initBlockAndInPlaceLambda_kt { 29 [label="Enter class C" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 11 [label="Enter init block" style="filled" fillcolor=red]; + 16 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/a|"]; - 15 [label="Access variable R|/A.b|"]; - 16 [label="Enter safe call"]; - 18 [label="Postponed enter to lambda"]; + 18 [label="Enter block"]; + 19 [label="Access variable R|/a|"]; + 20 [label="Access variable R|/A.b|"]; + 21 [label="Enter safe call"]; + 23 [label="Postponed enter to lambda"]; subgraph cluster_8 { color=blue - 20 [label="Enter function anonymousFunction"]; - 22 [label="Access variable R|/a|"]; - 23 [label="Access variable R|/it|"]; - 24 [label="Function call: R|/C.C|(...)"]; - 21 [label="Exit function anonymousFunction"]; + 11 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 13 [label="Access variable R|/a|"]; + 14 [label="Access variable R|/it|"]; + 15 [label="Function call: R|/C.C|(...)"]; + 12 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 26 [label="Call arguments union" style="filled" fillcolor=yellow]; - 19 [label="Postponed exit from lambda"]; + 24 [label="Postponed exit from lambda"]; 25 [label="Function call: R|/a|.R|/A.b|?.R|kotlin/let|(...)"]; - 17 [label="Exit safe call"]; + 22 [label="Exit safe call"]; 27 [label="Variable declaration: lval c: R|C?|"]; 28 [label="Exit block"]; } - 12 [label="Exit init block" style="filled" fillcolor=red]; + 17 [label="Exit init block" style="filled" fillcolor=red]; } 30 [label="Exit class C" style="filled" fillcolor=red]; } - 29 -> {11} [color=green]; - 11 -> {13}; - 12 -> {30} [color=green]; - 13 -> {14}; - 14 -> {15}; - 15 -> {16 17}; + 29 -> {16} [color=green]; 16 -> {18}; - 17 -> {27}; - 18 -> {20}; - 18 -> {19} [color=red]; - 19 -> {25} [color=green]; - 20 -> {22}; - 21 -> {19} [color=green]; - 21 -> {26} [color=red]; - 22 -> {23}; - 23 -> {24}; - 24 -> {21}; - 25 -> {17}; + 17 -> {30} [color=green]; + 18 -> {19}; + 19 -> {20}; + 20 -> {21 22}; + 21 -> {23}; + 22 -> {27}; + 23 -> {11}; + 23 -> {24} [color=red]; + 24 -> {25} [color=green]; + 25 -> {22}; 26 -> {25} [color=red]; 27 -> {28}; - 28 -> {12}; + 28 -> {17}; + 11 -> {13}; + 12 -> {24} [color=green]; + 12 -> {26} [color=red]; + 13 -> {14}; + 14 -> {15}; + 15 -> {12}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/inplaceLambdaInControlFlowExpressions.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/inplaceLambdaInControlFlowExpressions.dot index 81e2b04414a..2217cdf1578 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/inplaceLambdaInControlFlowExpressions.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/inplaceLambdaInControlFlowExpressions.dot @@ -33,17 +33,17 @@ digraph inplaceLambdaInControlFlowExpressions_kt { } subgraph cluster_4 { color=blue - 23 [label="Enter when branch condition else"]; - 24 [label="Exit when branch condition"]; + 20 [label="Enter when branch condition else"]; + 21 [label="Exit when branch condition"]; } - 25 [label="Enter when branch result"]; + 22 [label="Enter when branch result"]; subgraph cluster_5 { color=blue - 26 [label="Enter block"]; - 27 [label="Const: String()"]; - 28 [label="Exit block"]; + 23 [label="Enter block"]; + 24 [label="Const: String()"]; + 25 [label="Exit block"]; } - 29 [label="Exit when branch result"]; + 26 [label="Exit when branch result"]; 13 [label="Enter when branch result"]; subgraph cluster_6 { color=blue @@ -51,48 +51,48 @@ digraph inplaceLambdaInControlFlowExpressions_kt { 15 [label="Postponed enter to lambda"]; subgraph cluster_7 { color=blue - 17 [label="Enter function anonymousFunction"]; - 19 [label="Function call: R|/materialize|()"]; - 18 [label="Exit function anonymousFunction"]; + 29 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 31 [label="Function call: R|/materialize|()"]; + 30 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 16 [label="Postponed exit from lambda"]; - 20 [label="Function call: R|kotlin/run|(...)"]; - 21 [label="Exit block"]; + 17 [label="Function call: R|kotlin/run|(...)"]; + 18 [label="Exit block"]; } - 22 [label="Exit when branch result"]; + 19 [label="Exit when branch result"]; 9 [label="Exit when"]; } - 30 [label="Call arguments union" style="filled" fillcolor=yellow]; - 31 [label="Variable declaration: lval x: R|kotlin/String|"]; + 27 [label="Call arguments union" style="filled" fillcolor=yellow]; + 28 [label="Variable declaration: lval x: R|kotlin/String|"]; 7 [label="Exit function test_1" style="filled" fillcolor=red]; } 6 -> {8}; 8 -> {10}; - 9 -> {30}; + 9 -> {27}; 10 -> {11}; 11 -> {12}; - 12 -> {13 23}; + 12 -> {13 20}; 13 -> {14}; 14 -> {15}; - 15 -> {17}; + 15 -> {29}; 15 -> {16} [color=red]; - 16 -> {20}; - 17 -> {19}; - 18 -> {16} [color=green]; - 18 -> {30} [color=red]; - 19 -> {18}; + 16 -> {17}; + 17 -> {18}; + 18 -> {19}; + 19 -> {9}; 20 -> {21}; 21 -> {22}; - 22 -> {9}; + 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; - 26 -> {27}; + 26 -> {9}; 27 -> {28}; - 28 -> {29}; - 29 -> {9}; - 30 -> {31}; - 31 -> {7}; + 28 -> {7}; + 29 -> {31}; + 30 -> {16} [color=green]; + 30 -> {27} [color=red]; + 31 -> {30}; subgraph cluster_8 { color=red @@ -109,55 +109,55 @@ digraph inplaceLambdaInControlFlowExpressions_kt { 39 [label="Postponed enter to lambda"]; subgraph cluster_12 { color=blue - 41 [label="Enter function anonymousFunction"]; - 43 [label="Function call: R|/materialize|()"]; - 42 [label="Exit function anonymousFunction"]; + 50 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 52 [label="Function call: R|/materialize|()"]; + 51 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 40 [label="Postponed exit from lambda"]; - 44 [label="Function call: R|kotlin/run|(...)"]; - 45 [label="Exit block"]; + 41 [label="Function call: R|kotlin/run|(...)"]; + 42 [label="Exit block"]; } - 46 [label="Try main block exit"]; + 43 [label="Try main block exit"]; } subgraph cluster_13 { color=blue 37 [label="Catch enter"]; subgraph cluster_14 { color=blue - 47 [label="Enter block"]; - 48 [label="Const: String()"]; - 49 [label="Exit block"]; + 44 [label="Enter block"]; + 45 [label="Const: String()"]; + 46 [label="Exit block"]; } - 50 [label="Catch exit"]; + 47 [label="Catch exit"]; } 35 [label="Try expression exit"]; } - 51 [label="Call arguments union" style="filled" fillcolor=yellow]; - 52 [label="Variable declaration: lval x: R|kotlin/String|"]; + 48 [label="Call arguments union" style="filled" fillcolor=yellow]; + 49 [label="Variable declaration: lval x: R|kotlin/String|"]; 33 [label="Exit function test_2" style="filled" fillcolor=red]; } 32 -> {34}; 34 -> {36}; - 35 -> {51}; + 35 -> {48}; 36 -> {33 37 38}; - 37 -> {33 47}; + 37 -> {33 44}; 38 -> {39}; - 39 -> {41}; + 39 -> {50}; 39 -> {40} [color=red]; - 40 -> {44}; - 41 -> {43}; - 42 -> {40} [color=green]; - 42 -> {51} [color=red]; - 43 -> {42}; + 40 -> {41}; + 41 -> {42}; + 42 -> {43}; + 43 -> {35}; 44 -> {45}; 45 -> {46}; - 46 -> {35}; - 47 -> {48}; + 46 -> {47}; + 47 -> {35}; 48 -> {49}; - 49 -> {50}; - 50 -> {35}; - 51 -> {52}; - 52 -> {33}; + 49 -> {33}; + 50 -> {52}; + 51 -> {40} [color=green]; + 51 -> {48} [color=red]; + 52 -> {51}; subgraph cluster_15 { color=red @@ -165,28 +165,28 @@ digraph inplaceLambdaInControlFlowExpressions_kt { 55 [label="Postponed enter to lambda"]; subgraph cluster_16 { color=blue - 57 [label="Enter function anonymousFunction"]; - 59 [label="Function call: R|/materialize|()"]; - 58 [label="Exit function anonymousFunction"]; + 61 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 63 [label="Function call: R|/materialize|()"]; + 62 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 56 [label="Postponed exit from lambda"]; - 60 [label="Function call: R|kotlin/run|(...)"]; - 61 [label="Check not null: R|kotlin/run|(...)!!"]; - 62 [label="Call arguments union" style="filled" fillcolor=yellow]; - 63 [label="Variable declaration: lval x: R|kotlin/String|"]; + 57 [label="Function call: R|kotlin/run|(...)"]; + 58 [label="Check not null: R|kotlin/run|(...)!!"]; + 59 [label="Call arguments union" style="filled" fillcolor=yellow]; + 60 [label="Variable declaration: lval x: R|kotlin/String|"]; 54 [label="Exit function test_3" style="filled" fillcolor=red]; } 53 -> {55}; - 55 -> {57}; + 55 -> {61}; 55 -> {56} [color=red]; - 56 -> {60}; - 57 -> {59}; - 58 -> {56} [color=green]; - 58 -> {62} [color=red]; - 59 -> {58}; - 60 -> {61}; - 61 -> {62}; - 62 -> {63}; - 63 -> {54}; + 56 -> {57}; + 57 -> {58}; + 58 -> {59}; + 59 -> {60}; + 60 -> {54}; + 61 -> {63}; + 62 -> {56} [color=green]; + 62 -> {59} [color=red]; + 63 -> {62}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/jumps.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/jumps.dot index d6466ad1034..d81bad9c3ef 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/jumps.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/jumps.dot @@ -331,25 +331,25 @@ digraph jumps_kt { 114 [label="Postponed enter to lambda"]; subgraph cluster_32 { color=blue - 116 [label="Enter function anonymousFunction"]; - 118 [label="Jump: ^@run Unit"]; - 119 [label="Stub" style="filled" fillcolor=gray]; - 117 [label="Exit function anonymousFunction"]; + 117 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 119 [label="Jump: ^@run Unit"]; + 120 [label="Stub" style="filled" fillcolor=gray]; + 118 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 115 [label="Postponed exit from lambda"]; - 120 [label="Function call: R|/run|(...)"]; + 116 [label="Function call: R|/run|(...)"]; 113 [label="Exit function test_6" style="filled" fillcolor=red]; } 112 -> {114}; - 114 -> {116}; + 114 -> {117}; 114 -> {115} [color=red]; - 115 -> {120}; - 116 -> {117 118}; - 117 -> {116}; - 117 -> {115} [color=green]; + 115 -> {116}; + 116 -> {113}; + 117 -> {118 119}; 118 -> {117}; - 118 -> {119} [style=dotted]; - 119 -> {117} [style=dotted]; - 120 -> {113}; + 118 -> {115} [color=green]; + 119 -> {118}; + 119 -> {120} [style=dotted]; + 120 -> {118} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdas.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdas.dot index a73455a778a..3a454bd7457 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdas.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdas.dot @@ -25,7 +25,7 @@ digraph lambdas_kt { 9 [label="Type operator: (R|/x| is R|kotlin/Int|)"]; 10 [label="Exit when branch condition"]; } - 22 [label="Synthetic else branch"]; + 18 [label="Synthetic else branch"]; 11 [label="Enter when branch result"]; subgraph cluster_4 { color=blue @@ -33,16 +33,16 @@ digraph lambdas_kt { 13 [label="Postponed enter to lambda"]; subgraph cluster_5 { color=blue - 15 [label="Enter function anonymousFunction"]; - 17 [label="Access variable R|/x|"]; - 18 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; - 16 [label="Exit function anonymousFunction"]; + 19 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 21 [label="Access variable R|/x|"]; + 22 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; + 20 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 14 [label="Postponed exit from lambda"]; - 19 [label="Function call: R|/run|(...)"]; - 20 [label="Exit block"]; + 15 [label="Function call: R|/run|(...)"]; + 16 [label="Exit block"]; } - 21 [label="Exit when branch result"]; + 17 [label="Exit when branch result"]; 6 [label="Exit when"]; } 4 [label="Exit function test_1" style="filled" fillcolor=red]; @@ -53,21 +53,21 @@ digraph lambdas_kt { 7 -> {8}; 8 -> {9}; 9 -> {10}; - 10 -> {11 22}; + 10 -> {11 18}; 11 -> {12}; 12 -> {13}; - 13 -> {15}; + 13 -> {19}; 13 -> {14} [color=red]; - 14 -> {19}; - 15 -> {16 17}; - 16 -> {15}; - 16 -> {14} [color=green]; - 17 -> {18}; - 18 -> {16}; - 19 -> {20}; - 20 -> {21}; - 21 -> {6}; - 22 -> {6}; + 14 -> {15}; + 15 -> {16}; + 16 -> {17}; + 17 -> {6}; + 18 -> {6}; + 19 -> {20 21}; + 20 -> {19}; + 20 -> {14} [color=green]; + 21 -> {22}; + 22 -> {20}; subgraph cluster_6 { color=red @@ -142,36 +142,36 @@ digraph lambdas_kt { 49 [label="Postponed enter to lambda"]; subgraph cluster_13 { color=blue - 51 [label="Enter function anonymousFunction"]; - 53 [label="Const: Int(1)"]; - 54 [label="Jump: ^test_3 Int(1)"]; - 55 [label="Stub" style="filled" fillcolor=gray]; - 52 [label="Exit function anonymousFunction"]; + 54 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 56 [label="Const: Int(1)"]; + 57 [label="Jump: ^test_3 Int(1)"]; + 58 [label="Stub" style="filled" fillcolor=gray]; + 55 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 50 [label="Postponed exit from lambda"]; - 56 [label="Function call: R|/getInt|(...)"]; - 57 [label="Jump: ^test_3 R|/getInt|( = getInt@fun (): R|kotlin/Unit| { + 51 [label="Function call: R|/getInt|(...)"]; + 52 [label="Jump: ^test_3 R|/getInt|( = getInt@fun (): R|kotlin/Unit| { ^test_3 Int(1) } )"]; - 58 [label="Stub" style="filled" fillcolor=gray]; + 53 [label="Stub" style="filled" fillcolor=gray]; 48 [label="Exit function test_3" style="filled" fillcolor=red]; } 47 -> {49}; - 49 -> {51}; + 49 -> {54}; 49 -> {50} [color=red]; - 50 -> {56}; - 51 -> {52 53}; - 52 -> {51}; - 52 -> {50} [color=green]; - 53 -> {54}; - 54 -> {48}; - 54 -> {55} [style=dotted]; - 55 -> {52} [style=dotted]; + 50 -> {51}; + 51 -> {52}; + 52 -> {48}; + 52 -> {53} [style=dotted]; + 53 -> {48} [style=dotted]; + 54 -> {55 56}; + 55 -> {54}; + 55 -> {50} [color=green]; 56 -> {57}; 57 -> {48}; 57 -> {58} [style=dotted]; - 58 -> {48} [style=dotted]; + 58 -> {55} [style=dotted]; subgraph cluster_14 { color=red @@ -179,35 +179,35 @@ digraph lambdas_kt { 61 [label="Postponed enter to lambda"]; subgraph cluster_15 { color=blue - 63 [label="Enter function anonymousFunction"]; - 65 [label="Const: Int(1)"]; - 66 [label="Jump: ^test_4 Int(1)"]; - 67 [label="Stub" style="filled" fillcolor=gray]; - 64 [label="Exit function anonymousFunction"]; + 66 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 68 [label="Const: Int(1)"]; + 69 [label="Jump: ^test_4 Int(1)"]; + 70 [label="Stub" style="filled" fillcolor=gray]; + 67 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 62 [label="Postponed exit from lambda"]; - 68 [label="Function call: R|/getInt|(...)"]; - 69 [label="Jump: ^test_4 R|/getInt|(block = getInt@fun (): R|kotlin/Unit| { + 63 [label="Function call: R|/getInt|(...)"]; + 64 [label="Jump: ^test_4 R|/getInt|(block = getInt@fun (): R|kotlin/Unit| { ^test_4 Int(1) } )"]; - 70 [label="Stub" style="filled" fillcolor=gray]; + 65 [label="Stub" style="filled" fillcolor=gray]; 60 [label="Exit function test_4" style="filled" fillcolor=red]; } 59 -> {61}; - 61 -> {63}; + 61 -> {66}; 61 -> {62} [color=red]; - 62 -> {68}; - 63 -> {64 65}; - 64 -> {63}; - 64 -> {62} [color=green]; - 65 -> {66}; - 66 -> {60}; - 66 -> {67} [style=dotted]; - 67 -> {64} [style=dotted]; + 62 -> {63}; + 63 -> {64}; + 64 -> {60}; + 64 -> {65} [style=dotted]; + 65 -> {60} [style=dotted]; + 66 -> {67 68}; + 67 -> {66}; + 67 -> {62} [color=green]; 68 -> {69}; 69 -> {60}; 69 -> {70} [style=dotted]; - 70 -> {60} [style=dotted]; + 70 -> {67} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot index 0300bcdf306..ee0191b018f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot @@ -83,49 +83,49 @@ digraph localClassesWithImplicit_kt { 28 [label="Postponed enter to lambda"]; subgraph cluster_7 { color=blue - 30 [label="Enter function anonymousFunction"]; - 32 [label="Access variable R|/a|"]; - 33 [label="Access variable R|kotlin/String.length|"]; + 33 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 35 [label="Access variable R|/a|"]; + 36 [label="Access variable R|kotlin/String.length|"]; subgraph cluster_8 { color=blue - 34 [label="Enter when"]; + 37 [label="Enter when"]; subgraph cluster_9 { color=blue - 36 [label="Enter when branch condition "]; - 37 [label="Access variable R|/b|"]; - 38 [label="Type operator: (R|/b| is R|kotlin/String|)"]; - 39 [label="Exit when branch condition"]; + 39 [label="Enter when branch condition "]; + 40 [label="Access variable R|/b|"]; + 41 [label="Type operator: (R|/b| is R|kotlin/String|)"]; + 42 [label="Exit when branch condition"]; } subgraph cluster_10 { color=blue - 47 [label="Enter when branch condition else"]; - 48 [label="Exit when branch condition"]; + 50 [label="Enter when branch condition else"]; + 51 [label="Exit when branch condition"]; } - 49 [label="Enter when branch result"]; + 52 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 50 [label="Enter block"]; - 51 [label="Const: Int(1)"]; - 52 [label="Exit block"]; + 53 [label="Enter block"]; + 54 [label="Const: Int(1)"]; + 55 [label="Exit block"]; } - 53 [label="Exit when branch result"]; - 40 [label="Enter when branch result"]; + 56 [label="Exit when branch result"]; + 43 [label="Enter when branch result"]; subgraph cluster_12 { color=blue - 41 [label="Enter block"]; - 42 [label="Access variable R|/b|"]; - 43 [label="Access variable R|kotlin/String.length|"]; - 44 [label="Function call: this@R|/A|.R|/A.bar|()"]; - 45 [label="Exit block"]; + 44 [label="Enter block"]; + 45 [label="Access variable R|/b|"]; + 46 [label="Access variable R|kotlin/String.length|"]; + 47 [label="Function call: this@R|/A|.R|/A.bar|()"]; + 48 [label="Exit block"]; } - 46 [label="Exit when branch result"]; - 35 [label="Exit when"]; + 49 [label="Exit when branch result"]; + 38 [label="Exit when"]; } - 31 [label="Exit function anonymousFunction"]; + 34 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 29 [label="Postponed exit from lambda"]; - 54 [label="Function call: R|/myRun|(...)"]; - 55 [label="Jump: ^foo R|/myRun|( = myRun@fun (): R|kotlin/Int| { + 30 [label="Function call: R|/myRun|(...)"]; + 31 [label="Jump: ^foo R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/a|.R|kotlin/String.length| ^ when () { (R|/b| is R|kotlin/String|) -> { @@ -139,42 +139,42 @@ digraph localClassesWithImplicit_kt { } )"]; - 56 [label="Stub" style="filled" fillcolor=gray]; + 32 [label="Stub" style="filled" fillcolor=gray]; 27 [label="Exit function foo" style="filled" fillcolor=red]; } 26 -> {28}; - 28 -> {30}; + 28 -> {33}; 28 -> {29} [color=red]; - 29 -> {54}; - 30 -> {31 32}; - 31 -> {30}; - 31 -> {29} [color=green]; - 32 -> {33}; - 33 -> {34}; - 34 -> {36}; - 35 -> {31}; + 29 -> {30}; + 30 -> {31}; + 31 -> {27}; + 31 -> {32} [style=dotted]; + 32 -> {27} [style=dotted]; + 33 -> {34 35}; + 34 -> {33}; + 34 -> {29} [color=green]; + 35 -> {36}; 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40 47}; + 37 -> {39}; + 38 -> {34}; + 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; + 42 -> {43 50}; 43 -> {44}; 44 -> {45}; 45 -> {46}; - 46 -> {35}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; - 49 -> {50}; + 49 -> {38}; 50 -> {51}; 51 -> {52}; 52 -> {53}; - 53 -> {35}; + 53 -> {54}; 54 -> {55}; - 55 -> {27}; - 55 -> {56} [style=dotted]; - 56 -> {27} [style=dotted]; + 55 -> {56}; + 56 -> {38}; subgraph cluster_13 { color=red @@ -182,41 +182,41 @@ digraph localClassesWithImplicit_kt { 59 [label="Postponed enter to lambda"]; subgraph cluster_14 { color=blue - 61 [label="Enter function anonymousFunction"]; - 63 [label="Access variable R|/b|"]; - 64 [label="Access variable #"]; - 65 [label="Access variable R|/a|"]; - 66 [label="Access variable R|kotlin/String.length|"]; - 67 [label="Function call: this@R|/A|.R|/A.baz|()"]; - 62 [label="Exit function anonymousFunction"]; + 64 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 66 [label="Access variable R|/b|"]; + 67 [label="Access variable #"]; + 68 [label="Access variable R|/a|"]; + 69 [label="Access variable R|kotlin/String.length|"]; + 70 [label="Function call: this@R|/A|.R|/A.baz|()"]; + 65 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 60 [label="Postponed exit from lambda"]; - 68 [label="Function call: R|/myRun|(...)"]; - 69 [label="Jump: ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { + 61 [label="Function call: R|/myRun|(...)"]; + 62 [label="Jump: ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/b|.# R|/a|.R|kotlin/String.length| ^ this@R|/A|.R|/A.baz|() } )"]; - 70 [label="Stub" style="filled" fillcolor=gray]; + 63 [label="Stub" style="filled" fillcolor=gray]; 58 [label="Exit function bar" style="filled" fillcolor=red]; } 57 -> {59}; - 59 -> {61}; + 59 -> {64}; 59 -> {60} [color=red]; - 60 -> {68}; - 61 -> {62 63}; - 62 -> {61}; - 62 -> {60} [color=green]; - 63 -> {64}; - 64 -> {65}; - 65 -> {66}; + 60 -> {61}; + 61 -> {62}; + 62 -> {58}; + 62 -> {63} [style=dotted]; + 63 -> {58} [style=dotted]; + 64 -> {65 66}; + 65 -> {64}; + 65 -> {60} [color=green]; 66 -> {67}; - 67 -> {62}; + 67 -> {68}; 68 -> {69}; - 69 -> {58}; - 69 -> {70} [style=dotted]; - 70 -> {58} [style=dotted]; + 69 -> {70}; + 70 -> {65}; subgraph cluster_15 { color=red @@ -254,49 +254,49 @@ digraph localClassesWithImplicit_kt { 83 [label="Postponed enter to lambda"]; subgraph cluster_19 { color=blue - 85 [label="Enter function anonymousFunction"]; - 87 [label="Access variable R|/a|"]; - 88 [label="Access variable R|kotlin/String.length|"]; + 88 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 90 [label="Access variable R|/a|"]; + 91 [label="Access variable R|kotlin/String.length|"]; subgraph cluster_20 { color=blue - 89 [label="Enter when"]; + 92 [label="Enter when"]; subgraph cluster_21 { color=blue - 91 [label="Enter when branch condition "]; - 92 [label="Access variable R|/b|"]; - 93 [label="Type operator: (R|/b| is R|kotlin/String|)"]; - 94 [label="Exit when branch condition"]; + 94 [label="Enter when branch condition "]; + 95 [label="Access variable R|/b|"]; + 96 [label="Type operator: (R|/b| is R|kotlin/String|)"]; + 97 [label="Exit when branch condition"]; } subgraph cluster_22 { color=blue - 102 [label="Enter when branch condition else"]; - 103 [label="Exit when branch condition"]; + 105 [label="Enter when branch condition else"]; + 106 [label="Exit when branch condition"]; } - 104 [label="Enter when branch result"]; + 107 [label="Enter when branch result"]; subgraph cluster_23 { color=blue - 105 [label="Enter block"]; - 106 [label="Const: Int(1)"]; - 107 [label="Exit block"]; + 108 [label="Enter block"]; + 109 [label="Const: Int(1)"]; + 110 [label="Exit block"]; } - 108 [label="Exit when branch result"]; - 95 [label="Enter when branch result"]; + 111 [label="Exit when branch result"]; + 98 [label="Enter when branch result"]; subgraph cluster_24 { color=blue - 96 [label="Enter block"]; - 97 [label="Access variable R|/b|"]; - 98 [label="Access variable R|kotlin/String.length|"]; - 99 [label="Function call: this@R|/anonymous|.R|/anonymous.bar|()"]; - 100 [label="Exit block"]; + 99 [label="Enter block"]; + 100 [label="Access variable R|/b|"]; + 101 [label="Access variable R|kotlin/String.length|"]; + 102 [label="Function call: this@R|/anonymous|.R|/anonymous.bar|()"]; + 103 [label="Exit block"]; } - 101 [label="Exit when branch result"]; - 90 [label="Exit when"]; + 104 [label="Exit when branch result"]; + 93 [label="Exit when"]; } - 86 [label="Exit function anonymousFunction"]; + 89 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 84 [label="Postponed exit from lambda"]; - 109 [label="Function call: R|/myRun|(...)"]; - 110 [label="Jump: ^foo R|/myRun|( = myRun@fun (): R|kotlin/Int| { + 85 [label="Function call: R|/myRun|(...)"]; + 86 [label="Jump: ^foo R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/a|.R|kotlin/String.length| ^ when () { (R|/b| is R|kotlin/String|) -> { @@ -310,42 +310,42 @@ digraph localClassesWithImplicit_kt { } )"]; - 111 [label="Stub" style="filled" fillcolor=gray]; + 87 [label="Stub" style="filled" fillcolor=gray]; 82 [label="Exit function foo" style="filled" fillcolor=red]; } 81 -> {83}; - 83 -> {85}; + 83 -> {88}; 83 -> {84} [color=red]; - 84 -> {109}; - 85 -> {86 87}; - 86 -> {85}; - 86 -> {84} [color=green]; - 87 -> {88}; - 88 -> {89}; - 89 -> {91}; - 90 -> {86}; + 84 -> {85}; + 85 -> {86}; + 86 -> {82}; + 86 -> {87} [style=dotted]; + 87 -> {82} [style=dotted]; + 88 -> {89 90}; + 89 -> {88}; + 89 -> {84} [color=green]; + 90 -> {91}; 91 -> {92}; - 92 -> {93}; - 93 -> {94}; - 94 -> {95 102}; + 92 -> {94}; + 93 -> {89}; + 94 -> {95}; 95 -> {96}; 96 -> {97}; - 97 -> {98}; + 97 -> {98 105}; 98 -> {99}; 99 -> {100}; 100 -> {101}; - 101 -> {90}; + 101 -> {102}; 102 -> {103}; 103 -> {104}; - 104 -> {105}; + 104 -> {93}; 105 -> {106}; 106 -> {107}; 107 -> {108}; - 108 -> {90}; + 108 -> {109}; 109 -> {110}; - 110 -> {82}; - 110 -> {111} [style=dotted]; - 111 -> {82} [style=dotted]; + 110 -> {111}; + 111 -> {93}; subgraph cluster_25 { color=red @@ -353,41 +353,41 @@ digraph localClassesWithImplicit_kt { 114 [label="Postponed enter to lambda"]; subgraph cluster_26 { color=blue - 116 [label="Enter function anonymousFunction"]; - 118 [label="Access variable R|/a|"]; - 119 [label="Access variable R|kotlin/String.length|"]; - 120 [label="Access variable R|/b|"]; - 121 [label="Access variable #"]; - 122 [label="Function call: this@R|/anonymous|.R|/anonymous.baz|()"]; - 117 [label="Exit function anonymousFunction"]; + 119 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 121 [label="Access variable R|/a|"]; + 122 [label="Access variable R|kotlin/String.length|"]; + 123 [label="Access variable R|/b|"]; + 124 [label="Access variable #"]; + 125 [label="Function call: this@R|/anonymous|.R|/anonymous.baz|()"]; + 120 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 115 [label="Postponed exit from lambda"]; - 123 [label="Function call: R|/myRun|(...)"]; - 124 [label="Jump: ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { + 116 [label="Function call: R|/myRun|(...)"]; + 117 [label="Jump: ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/a|.R|kotlin/String.length| R|/b|.# ^ this@R|/anonymous|.R|/anonymous.baz|() } )"]; - 125 [label="Stub" style="filled" fillcolor=gray]; + 118 [label="Stub" style="filled" fillcolor=gray]; 113 [label="Exit function bar" style="filled" fillcolor=red]; } 112 -> {114}; - 114 -> {116}; + 114 -> {119}; 114 -> {115} [color=red]; - 115 -> {123}; - 116 -> {117 118}; - 117 -> {116}; - 117 -> {115} [color=green]; - 118 -> {119}; - 119 -> {120}; - 120 -> {121}; + 115 -> {116}; + 116 -> {117}; + 117 -> {113}; + 117 -> {118} [style=dotted]; + 118 -> {113} [style=dotted]; + 119 -> {120 121}; + 120 -> {119}; + 120 -> {115} [color=green]; 121 -> {122}; - 122 -> {117}; + 122 -> {123}; 123 -> {124}; - 124 -> {113}; - 124 -> {125} [style=dotted]; - 125 -> {113} [style=dotted]; + 124 -> {125}; + 125 -> {120}; subgraph cluster_27 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot index 21085c0ece1..1f385cc63ae 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot @@ -26,37 +26,37 @@ digraph postponedLambdaInConstructor_kt { 8 [label="Postponed enter to lambda"]; subgraph cluster_3 { color=blue - 10 [label="Enter function anonymousFunction"]; - 12 [label="Postponed enter to lambda"]; + 13 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 15 [label="Postponed enter to lambda"]; subgraph cluster_4 { color=blue 17 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; 19 [label="Access variable R|/it|"]; 18 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 13 [label="Postponed exit from lambda"]; - 11 [label="Exit function anonymousFunction"]; + 16 [label="Postponed exit from lambda"]; + 14 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 9 [label="Postponed exit from lambda"]; - 14 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)"]; - 16 [label="Call arguments union" style="filled" fillcolor=yellow]; - 15 [label="Delegated constructor call: super(...)"]; + 10 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)"]; + 12 [label="Call arguments union" style="filled" fillcolor=yellow]; + 11 [label="Delegated constructor call: super(...)"]; 6 [label="Exit function " style="filled" fillcolor=red]; } 5 -> {7}; 7 -> {8}; - 8 -> {10}; + 8 -> {13}; 8 -> {9} [color=red]; - 9 -> {14}; + 9 -> {10}; 10 -> {12}; - 11 -> {9} [color=green]; - 11 -> {16} [color=red]; - 12 -> {13 13} [color=green]; - 12 -> {17} [color=red]; - 13 -> {11}; - 14 -> {16}; - 15 -> {6}; - 16 -> {15}; + 11 -> {6}; + 12 -> {11}; + 13 -> {15}; + 14 -> {9} [color=green]; + 14 -> {12} [color=red]; + 15 -> {16 16} [color=green]; + 15 -> {17} [color=red]; + 16 -> {14}; 17 -> {19}; 19 -> {18}; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdas.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdas.dot index 35e911a4849..dd4595892dd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdas.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdas.dot @@ -17,25 +17,25 @@ digraph postponedLambdas_kt { 5 [label="Postponed enter to lambda"]; subgraph cluster_2 { color=blue - 8 [label="Enter function anonymousFunction"]; - 10 [label="Const: String()"]; - 9 [label="Exit function anonymousFunction"]; + 9 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 11 [label="Const: String()"]; + 10 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 6 [label="Postponed exit from lambda"]; 7 [label="Access variable R|/b|"]; - 11 [label="Function call: R|/foo|(...)"]; + 8 [label="Function call: R|/foo|(...)"]; 3 [label="Exit function test" style="filled" fillcolor=red]; } 2 -> {4}; 4 -> {5}; - 5 -> {8}; + 5 -> {9}; 5 -> {6} [color=red]; 6 -> {7}; - 7 -> {11}; - 8 -> {9 10}; - 9 -> {8}; - 9 -> {6} [color=green]; + 7 -> {8}; + 8 -> {3}; + 9 -> {10 11}; 10 -> {9}; - 11 -> {3}; + 10 -> {6} [color=green]; + 11 -> {10}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot index f04321ec010..a7a41a4b618 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -61,153 +61,153 @@ digraph propertiesAndInitBlocks_kt { subgraph cluster_6 { color=red - 29 [label="Enter function " style="filled" fillcolor=red]; - 31 [label="Delegated constructor call: super()"]; - 30 [label="Exit function " style="filled" fillcolor=red]; + 35 [label="Enter function " style="filled" fillcolor=red]; + 37 [label="Delegated constructor call: super()"]; + 36 [label="Exit function " style="filled" fillcolor=red]; } - 29 -> {31}; - 31 -> {30}; + 35 -> {37}; + 37 -> {36}; subgraph cluster_7 { color=red - 40 [label="Enter class LocalClass" style="filled" fillcolor=red]; + 46 [label="Enter class LocalClass" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 32 [label="Enter init block" style="filled" fillcolor=red]; + 38 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_9 { color=blue - 34 [label="Enter block"]; - 35 [label="Function call: R|java/lang/Exception.Exception|()"]; - 36 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 37 [label="Stub" style="filled" fillcolor=gray]; - 38 [label="Const: Int(1)" style="filled" fillcolor=gray]; - 39 [label="Exit block" style="filled" fillcolor=gray]; + 40 [label="Enter block"]; + 41 [label="Function call: R|java/lang/Exception.Exception|()"]; + 42 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 43 [label="Stub" style="filled" fillcolor=gray]; + 44 [label="Const: Int(1)" style="filled" fillcolor=gray]; + 45 [label="Exit block" style="filled" fillcolor=gray]; } - 33 [label="Exit init block" style="filled" fillcolor=red]; + 39 [label="Exit init block" style="filled" fillcolor=red]; } - 41 [label="Exit class LocalClass" style="filled" fillcolor=red]; + 47 [label="Exit class LocalClass" style="filled" fillcolor=red]; } - 40 -> {32} [color=green]; - 32 -> {34}; - 33 -> {41} [color=green]; - 34 -> {35}; - 35 -> {36}; - 36 -> {33}; - 36 -> {37} [style=dotted]; - 37 -> {38} [style=dotted]; - 38 -> {39} [style=dotted]; - 39 -> {33} [style=dotted]; + 46 -> {38} [color=green]; + 38 -> {40}; + 39 -> {47} [color=green]; + 40 -> {41}; + 41 -> {42}; + 42 -> {39}; + 42 -> {43} [style=dotted]; + 43 -> {44} [style=dotted]; + 44 -> {45} [style=dotted]; + 45 -> {39} [style=dotted]; subgraph cluster_10 { color=red - 45 [label="Enter function " style="filled" fillcolor=red]; - 47 [label="Delegated constructor call: super()"]; - 46 [label="Exit function " style="filled" fillcolor=red]; + 51 [label="Enter function " style="filled" fillcolor=red]; + 53 [label="Delegated constructor call: super()"]; + 52 [label="Exit function " style="filled" fillcolor=red]; } - 45 -> {47}; - 47 -> {46}; + 51 -> {53}; + 53 -> {52}; subgraph cluster_11 { color=red - 55 [label="Enter class LocalClass" style="filled" fillcolor=red]; + 61 [label="Enter class LocalClass" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue - 48 [label="Enter init block" style="filled" fillcolor=red]; + 54 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_13 { color=blue - 50 [label="Enter block"]; - 51 [label="Function call: R|java/lang/Exception.Exception|()"]; - 52 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 53 [label="Stub" style="filled" fillcolor=gray]; - 54 [label="Exit block" style="filled" fillcolor=gray]; + 56 [label="Enter block"]; + 57 [label="Function call: R|java/lang/Exception.Exception|()"]; + 58 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 59 [label="Stub" style="filled" fillcolor=gray]; + 60 [label="Exit block" style="filled" fillcolor=gray]; } - 49 [label="Exit init block" style="filled" fillcolor=red]; + 55 [label="Exit init block" style="filled" fillcolor=red]; } - 56 [label="Exit class LocalClass" style="filled" fillcolor=red]; + 62 [label="Exit class LocalClass" style="filled" fillcolor=red]; } - 55 -> {48} [color=green]; - 48 -> {50}; - 49 -> {56} [color=green]; - 50 -> {51}; - 51 -> {52}; - 52 -> {49}; - 52 -> {53} [style=dotted]; - 53 -> {54} [style=dotted]; - 54 -> {49} [style=dotted]; + 61 -> {54} [color=green]; + 54 -> {56}; + 55 -> {62} [color=green]; + 56 -> {57}; + 57 -> {58}; + 58 -> {55}; + 58 -> {59} [style=dotted]; + 59 -> {60} [style=dotted]; + 60 -> {55} [style=dotted]; subgraph cluster_14 { color=red - 57 [label="Enter property" style="filled" fillcolor=red]; + 63 [label="Enter property" style="filled" fillcolor=red]; subgraph cluster_15 { color=blue - 42 [label="Enter function getter" style="filled" fillcolor=red]; - 44 [label="Exit local class "]; - 43 [label="Exit function getter" style="filled" fillcolor=red]; + 48 [label="Enter function getter" style="filled" fillcolor=red]; + 50 [label="Exit local class "]; + 49 [label="Exit function getter" style="filled" fillcolor=red]; } subgraph cluster_16 { color=blue - 45 [label="Enter function " style="filled" fillcolor=red]; - 47 [label="Delegated constructor call: super()"]; - 46 [label="Exit function " style="filled" fillcolor=red]; + 51 [label="Enter function " style="filled" fillcolor=red]; + 53 [label="Delegated constructor call: super()"]; + 52 [label="Exit function " style="filled" fillcolor=red]; } - 59 [label="Postponed enter to lambda"]; + 65 [label="Postponed enter to lambda"]; subgraph cluster_17 { color=blue - 61 [label="Enter function anonymousFunction"]; - 63 [label="Exit local class val x3"]; - 64 [label="Function call: R|java/lang/Exception.Exception|()"]; - 65 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 66 [label="Stub" style="filled" fillcolor=gray]; + 20 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 22 [label="Exit local class "]; + 23 [label="Function call: R|java/lang/Exception.Exception|()"]; + 24 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 25 [label="Stub" style="filled" fillcolor=gray]; subgraph cluster_18 { color=blue - 29 [label="Enter function " style="filled" fillcolor=red]; - 31 [label="Delegated constructor call: super()"]; - 30 [label="Exit function " style="filled" fillcolor=red]; + 35 [label="Enter function " style="filled" fillcolor=red]; + 37 [label="Delegated constructor call: super()"]; + 36 [label="Exit function " style="filled" fillcolor=red]; } subgraph cluster_19 { color=blue - 20 [label="Enter function foo" style="filled" fillcolor=red]; - 22 [label="Const: Int(1)"]; - 23 [label="Const: Int(1)"]; - 24 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"]; - 25 [label="Variable declaration: lval c: R|kotlin/Int|"]; - 26 [label="Function call: R|java/lang/Exception.Exception|()"]; - 27 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 28 [label="Stub" style="filled" fillcolor=gray]; - 21 [label="Exit function foo" style="filled" fillcolor=red]; + 26 [label="Enter function foo" style="filled" fillcolor=red]; + 28 [label="Const: Int(1)"]; + 29 [label="Const: Int(1)"]; + 30 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"]; + 31 [label="Variable declaration: lval c: R|kotlin/Int|"]; + 32 [label="Function call: R|java/lang/Exception.Exception|()"]; + 33 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 34 [label="Stub" style="filled" fillcolor=gray]; + 27 [label="Exit function foo" style="filled" fillcolor=red]; } - 62 [label="Exit function anonymousFunction"]; + 21 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 60 [label="Postponed exit from lambda"]; + 66 [label="Postponed exit from lambda"]; 67 [label="Function call: R|/run|(...)"]; - 58 [label="Exit property" style="filled" fillcolor=red]; + 64 [label="Exit property" style="filled" fillcolor=red]; } - 57 -> {59}; - 59 -> {61}; - 59 -> {60} [color=red]; - 60 -> {67}; - 61 -> {62 63}; - 61 -> {20 29} [color=red]; - 62 -> {61}; - 62 -> {60} [color=green]; - 63 -> {64}; - 64 -> {65}; - 65 -> {58}; - 65 -> {66} [style=dotted]; - 66 -> {62} [style=dotted]; - 67 -> {58}; - 20 -> {22}; + 63 -> {65}; + 65 -> {20}; + 65 -> {66} [color=red]; + 66 -> {67}; + 67 -> {64}; + 20 -> {21 22}; + 20 -> {26 35} [color=red]; + 21 -> {20}; + 21 -> {66} [color=green]; 22 -> {23}; 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {21}; - 27 -> {28} [style=dotted]; - 28 -> {21} [style=dotted]; - 42 -> {44}; - 42 -> {45} [color=red]; - 44 -> {43}; + 24 -> {64}; + 24 -> {25} [style=dotted]; + 25 -> {21} [style=dotted]; + 26 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + 33 -> {27}; + 33 -> {34} [style=dotted]; + 34 -> {27} [style=dotted]; + 48 -> {50}; + 48 -> {51} [color=red]; + 50 -> {49}; subgraph cluster_20 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot index e52b8a22ab6..65f37b607d7 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot @@ -48,63 +48,63 @@ digraph returnValuesFromLambda_kt { 14 [label="Postponed enter to lambda"]; subgraph cluster_6 { color=blue - 16 [label="Enter function anonymousFunction"]; + 19 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 18 [label="Enter when"]; + 21 [label="Enter when"]; subgraph cluster_8 { color=blue - 20 [label="Enter when branch condition "]; - 21 [label="Access variable R|/b|"]; - 22 [label="Exit when branch condition"]; + 23 [label="Enter when branch condition "]; + 24 [label="Access variable R|/b|"]; + 25 [label="Exit when branch condition"]; } - 30 [label="Synthetic else branch"]; - 23 [label="Enter when branch result"]; + 33 [label="Synthetic else branch"]; + 26 [label="Enter when branch result"]; subgraph cluster_9 { color=blue - 24 [label="Enter block"]; - 25 [label="Function call: R|/B.B|()"]; - 26 [label="Jump: ^@run R|/B.B|()"]; - 27 [label="Stub" style="filled" fillcolor=gray]; - 28 [label="Exit block" style="filled" fillcolor=gray]; + 27 [label="Enter block"]; + 28 [label="Function call: R|/B.B|()"]; + 29 [label="Jump: ^@run R|/B.B|()"]; + 30 [label="Stub" style="filled" fillcolor=gray]; + 31 [label="Exit block" style="filled" fillcolor=gray]; } - 29 [label="Exit when branch result" style="filled" fillcolor=gray]; - 19 [label="Exit when"]; + 32 [label="Exit when branch result" style="filled" fillcolor=gray]; + 22 [label="Exit when"]; } - 31 [label="Function call: R|/C.C|()"]; - 17 [label="Exit function anonymousFunction"]; + 34 [label="Function call: R|/C.C|()"]; + 20 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 33 [label="Call arguments union" style="filled" fillcolor=yellow]; + 17 [label="Call arguments union" style="filled" fillcolor=yellow]; 15 [label="Postponed exit from lambda"]; - 32 [label="Function call: R|kotlin/run|(...)"]; - 34 [label="Variable declaration: lval x: R|A|"]; + 16 [label="Function call: R|kotlin/run|(...)"]; + 18 [label="Variable declaration: lval x: R|A|"]; 13 [label="Exit function test_1" style="filled" fillcolor=red]; } 12 -> {14}; - 14 -> {16}; + 14 -> {19}; 14 -> {15} [color=red]; - 15 -> {32} [color=green]; + 15 -> {16} [color=green]; 16 -> {18}; - 17 -> {15} [color=green]; - 17 -> {33} [color=red]; - 18 -> {20}; - 19 -> {31}; - 20 -> {21}; - 21 -> {22}; - 22 -> {23 30}; + 17 -> {16} [color=red]; + 18 -> {13}; + 19 -> {21}; + 20 -> {15} [color=green]; + 20 -> {17} [color=red]; + 21 -> {23}; + 22 -> {34}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; - 26 -> {17}; - 26 -> {27} [style=dotted]; - 27 -> {28} [style=dotted]; - 28 -> {29} [style=dotted]; - 29 -> {19} [style=dotted]; - 30 -> {19}; - 31 -> {17}; - 32 -> {34}; - 33 -> {32} [color=red]; - 34 -> {13}; + 25 -> {26 33}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {20}; + 29 -> {30} [style=dotted]; + 30 -> {31} [style=dotted]; + 31 -> {32} [style=dotted]; + 32 -> {22} [style=dotted]; + 33 -> {22}; + 34 -> {20}; subgraph cluster_10 { color=red @@ -112,32 +112,32 @@ digraph returnValuesFromLambda_kt { 37 [label="Postponed enter to lambda"]; subgraph cluster_11 { color=blue - 39 [label="Enter function anonymousFunction"]; - 41 [label="Function call: R|/C.C|()"]; - 42 [label="Jump: ^@run R|/C.C|()"]; - 43 [label="Stub" style="filled" fillcolor=gray]; - 40 [label="Exit function anonymousFunction"]; + 42 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 44 [label="Function call: R|/C.C|()"]; + 45 [label="Jump: ^@run R|/C.C|()"]; + 46 [label="Stub" style="filled" fillcolor=gray]; + 43 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 45 [label="Call arguments union" style="filled" fillcolor=yellow]; + 40 [label="Call arguments union" style="filled" fillcolor=yellow]; 38 [label="Postponed exit from lambda"]; - 44 [label="Function call: R|kotlin/run|(...)"]; - 46 [label="Variable declaration: lval x: R|C|"]; + 39 [label="Function call: R|kotlin/run|(...)"]; + 41 [label="Variable declaration: lval x: R|C|"]; 36 [label="Exit function test_2" style="filled" fillcolor=red]; } 35 -> {37}; - 37 -> {39}; + 37 -> {42}; 37 -> {38} [color=red]; - 38 -> {44} [color=green]; + 38 -> {39} [color=green]; 39 -> {41}; - 40 -> {38} [color=green]; - 40 -> {45} [color=red]; - 41 -> {42}; - 42 -> {40}; - 42 -> {43} [style=dotted]; - 43 -> {40} [style=dotted]; - 44 -> {46}; - 45 -> {44} [color=red]; - 46 -> {36}; + 40 -> {39} [color=red]; + 41 -> {36}; + 42 -> {44}; + 43 -> {38} [color=green]; + 43 -> {40} [color=red]; + 44 -> {45}; + 45 -> {43}; + 45 -> {46} [style=dotted]; + 46 -> {43} [style=dotted]; subgraph cluster_12 { color=red @@ -145,31 +145,31 @@ digraph returnValuesFromLambda_kt { 49 [label="Postponed enter to lambda"]; subgraph cluster_13 { color=blue - 51 [label="Enter function anonymousFunction"]; - 53 [label="Jump: ^test_3 Unit"]; - 54 [label="Stub" style="filled" fillcolor=gray]; - 52 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; + 55 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 57 [label="Jump: ^test_3 Unit"]; + 58 [label="Stub" style="filled" fillcolor=gray]; + 56 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray]; } - 56 [label="Call arguments union" style="filled" fillcolor=gray]; + 52 [label="Call arguments union" style="filled" fillcolor=gray]; 50 [label="Postponed exit from lambda"]; - 55 [label="Function call: R|kotlin/run|(...)" style="filled" fillcolor=gray]; - 57 [label="Stub" style="filled" fillcolor=gray]; - 58 [label="Variable declaration: lval x: R|kotlin/Nothing|" style="filled" fillcolor=gray]; + 51 [label="Function call: R|kotlin/run|(...)" style="filled" fillcolor=gray]; + 53 [label="Stub" style="filled" fillcolor=gray]; + 54 [label="Variable declaration: lval x: R|kotlin/Nothing|" style="filled" fillcolor=gray]; 48 [label="Exit function test_3" style="filled" fillcolor=red]; } 47 -> {49}; - 49 -> {51}; + 49 -> {55}; 49 -> {50} [color=red]; - 50 -> {55} [color=green]; - 51 -> {53}; - 52 -> {56} [style=dotted]; - 52 -> {50} [color=green]; - 53 -> {48}; + 50 -> {51} [color=green]; + 51 -> {48 53} [style=dotted]; + 52 -> {51} [style=dotted]; 53 -> {54} [style=dotted]; - 54 -> {52} [style=dotted]; - 55 -> {48 57} [style=dotted]; - 56 -> {55} [style=dotted]; + 54 -> {48} [style=dotted]; + 55 -> {57}; + 56 -> {52} [style=dotted]; + 56 -> {50} [color=green]; + 57 -> {48}; 57 -> {58} [style=dotted]; - 58 -> {48} [style=dotted]; + 58 -> {56} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot index d42825288a3..841ef240620 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot @@ -44,7 +44,7 @@ digraph inPlaceLambdas_kt { 14 [label="Type operator: (R|/x| is R|A|)"]; 15 [label="Exit when branch condition"]; } - 28 [label="Synthetic else branch"]; + 24 [label="Synthetic else branch"]; 16 [label="Enter when branch result"]; subgraph cluster_7 { color=blue @@ -52,17 +52,17 @@ digraph inPlaceLambdas_kt { 18 [label="Postponed enter to lambda"]; subgraph cluster_8 { color=blue - 20 [label="Enter function anonymousFunction"]; - 22 [label="Access variable R|/x|"]; - 23 [label="Function call: R|/x|.R|/A.foo|()"]; - 21 [label="Exit function anonymousFunction"]; + 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 27 [label="Access variable R|/x|"]; + 28 [label="Function call: R|/x|.R|/A.foo|()"]; + 26 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 25 [label="Call arguments union" style="filled" fillcolor=yellow]; + 21 [label="Call arguments union" style="filled" fillcolor=yellow]; 19 [label="Postponed exit from lambda"]; - 24 [label="Function call: R|kotlin/run|(...)"]; - 26 [label="Exit block"]; + 20 [label="Function call: R|kotlin/run|(...)"]; + 22 [label="Exit block"]; } - 27 [label="Exit when branch result"]; + 23 [label="Exit when branch result"]; 11 [label="Exit when"]; } 9 [label="Exit function test_1" style="filled" fillcolor=red]; @@ -73,22 +73,22 @@ digraph inPlaceLambdas_kt { 12 -> {13}; 13 -> {14}; 14 -> {15}; - 15 -> {16 28}; + 15 -> {16 24}; 16 -> {17}; 17 -> {18}; - 18 -> {20}; + 18 -> {25}; 18 -> {19} [color=red]; - 19 -> {24} [color=green]; + 19 -> {20} [color=green]; 20 -> {22}; - 21 -> {19} [color=green]; - 21 -> {25} [color=red]; + 21 -> {20} [color=red]; 22 -> {23}; - 23 -> {21}; - 24 -> {26}; - 25 -> {24} [color=red]; - 26 -> {27}; - 27 -> {11}; - 28 -> {11}; + 23 -> {11}; + 24 -> {11}; + 25 -> {27}; + 26 -> {19} [color=green]; + 26 -> {21} [color=red]; + 27 -> {28}; + 28 -> {26}; subgraph cluster_9 { color=red @@ -96,31 +96,31 @@ digraph inPlaceLambdas_kt { 31 [label="Postponed enter to lambda"]; subgraph cluster_10 { color=blue - 33 [label="Enter function anonymousFunction"]; - 35 [label="Access variable R|/x|"]; - 36 [label="Type operator: (R|/x| as R|B|)"]; - 34 [label="Exit function anonymousFunction"]; + 37 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 39 [label="Access variable R|/x|"]; + 40 [label="Type operator: (R|/x| as R|B|)"]; + 38 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 38 [label="Call arguments union" style="filled" fillcolor=yellow]; + 34 [label="Call arguments union" style="filled" fillcolor=yellow]; 32 [label="Postponed exit from lambda"]; - 37 [label="Function call: R|kotlin/run|(...)"]; - 39 [label="Access variable R|/x|"]; - 40 [label="Function call: R|/x|.R|/B.bar|()"]; + 33 [label="Function call: R|kotlin/run|(...)"]; + 35 [label="Access variable R|/x|"]; + 36 [label="Function call: R|/x|.R|/B.bar|()"]; 30 [label="Exit function test_2" style="filled" fillcolor=red]; } 29 -> {31}; - 31 -> {33}; + 31 -> {37}; 31 -> {32} [color=red]; - 32 -> {37} [color=green]; + 32 -> {33} [color=green]; 33 -> {35}; - 34 -> {32} [color=green]; - 34 -> {38} [color=red]; + 34 -> {33} [color=red]; 35 -> {36}; - 36 -> {34}; + 36 -> {30}; 37 -> {39}; - 38 -> {37} [color=red]; + 38 -> {32} [color=green]; + 38 -> {34} [color=red]; 39 -> {40}; - 40 -> {30}; + 40 -> {38}; subgraph cluster_11 { color=red @@ -135,7 +135,7 @@ digraph inPlaceLambdas_kt { 47 [label="Type operator: (R|/x| is R|A|)"]; 48 [label="Exit when branch condition"]; } - 65 [label="Synthetic else branch"]; + 59 [label="Synthetic else branch"]; 49 [label="Enter when branch result"]; subgraph cluster_14 { color=blue @@ -143,21 +143,21 @@ digraph inPlaceLambdas_kt { 51 [label="Postponed enter to lambda"]; subgraph cluster_15 { color=blue - 53 [label="Enter function anonymousFunction"]; - 55 [label="Access variable R|/x|"]; - 56 [label="Function call: R|/x|.R|/A.foo|()"]; - 57 [label="Access variable R|/x|"]; - 58 [label="Type operator: (R|/x| as R|B|)"]; - 54 [label="Exit function anonymousFunction"]; + 60 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 62 [label="Access variable R|/x|"]; + 63 [label="Function call: R|/x|.R|/A.foo|()"]; + 64 [label="Access variable R|/x|"]; + 65 [label="Type operator: (R|/x| as R|B|)"]; + 61 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 60 [label="Call arguments union" style="filled" fillcolor=yellow]; + 54 [label="Call arguments union" style="filled" fillcolor=yellow]; 52 [label="Postponed exit from lambda"]; - 59 [label="Function call: R|kotlin/run|(...)"]; - 61 [label="Access variable R|/x|"]; - 62 [label="Function call: R|/x|.R|/B.bar|()"]; - 63 [label="Exit block"]; + 53 [label="Function call: R|kotlin/run|(...)"]; + 55 [label="Access variable R|/x|"]; + 56 [label="Function call: R|/x|.R|/B.bar|()"]; + 57 [label="Exit block"]; } - 64 [label="Exit when branch result"]; + 58 [label="Exit when branch result"]; 44 [label="Exit when"]; } 42 [label="Exit function test_3" style="filled" fillcolor=red]; @@ -168,25 +168,25 @@ digraph inPlaceLambdas_kt { 45 -> {46}; 46 -> {47}; 47 -> {48}; - 48 -> {49 65}; + 48 -> {49 59}; 49 -> {50}; 50 -> {51}; - 51 -> {53}; + 51 -> {60}; 51 -> {52} [color=red]; - 52 -> {59} [color=green]; + 52 -> {53} [color=green]; 53 -> {55}; - 54 -> {52} [color=green]; - 54 -> {60} [color=red]; + 54 -> {53} [color=red]; 55 -> {56}; 56 -> {57}; 57 -> {58}; - 58 -> {54}; - 59 -> {61}; - 60 -> {59} [color=red]; - 61 -> {62}; + 58 -> {44}; + 59 -> {44}; + 60 -> {62}; + 61 -> {52} [color=green]; + 61 -> {54} [color=red]; 62 -> {63}; 63 -> {64}; - 64 -> {44}; - 65 -> {44}; + 64 -> {65}; + 65 -> {61}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot index f2c8ba2757d..2e04fa22644 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot @@ -207,76 +207,75 @@ digraph implicitReceivers_kt { 73 [label="Postponed enter to lambda"]; subgraph cluster_20 { color=blue - 75 [label="Enter function anonymousFunction"]; - 77 [label="Access variable R|/b|"]; - 78 [label="Postponed enter to lambda"]; + 77 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 79 [label="Access variable R|/b|"]; + 80 [label="Postponed enter to lambda"]; subgraph cluster_21 { color=blue - 80 [label="Enter function anonymousFunction"]; - 82 [label="Access variable R|/c|"]; - 83 [label="Postponed enter to lambda"]; + 83 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 85 [label="Access variable R|/c|"]; + 86 [label="Postponed enter to lambda"]; subgraph cluster_22 { color=blue - 85 [label="Enter function anonymousFunction"]; - 87 [label="Access variable this@R|special/anonymous|"]; - 88 [label="Type operator: (this@R|special/anonymous| as R|A|)"]; - 89 [label="Access variable this@R|special/anonymous|"]; - 90 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 91 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 86 [label="Exit function anonymousFunction"]; + 93 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 95 [label="Access variable this@R|special/anonymous|"]; + 96 [label="Type operator: (this@R|special/anonymous| as R|A|)"]; + 97 [label="Access variable this@R|special/anonymous|"]; + 98 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 99 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 94 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 93 [label="Call arguments union" style="filled" fillcolor=yellow]; - 84 [label="Postponed exit from lambda"]; - 92 [label="Function call: R|kotlin/with|(...)"]; - 94 [label="Access variable this@R|special/anonymous|"]; - 95 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 96 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 81 [label="Exit function anonymousFunction"]; + 89 [label="Call arguments union" style="filled" fillcolor=yellow]; + 87 [label="Postponed exit from lambda"]; + 88 [label="Function call: R|kotlin/with|(...)"]; + 90 [label="Access variable this@R|special/anonymous|"]; + 91 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 92 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 84 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 79 [label="Postponed exit from lambda"]; - 97 [label="Function call: R|kotlin/with|(...)"]; - 76 [label="Exit function anonymousFunction"]; + 81 [label="Postponed exit from lambda"]; + 82 [label="Function call: R|kotlin/with|(...)"]; + 78 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 99 [label="Call arguments union" style="filled" fillcolor=yellow]; + 76 [label="Call arguments union" style="filled" fillcolor=yellow]; 74 [label="Postponed exit from lambda"]; - 98 [label="Function call: R|kotlin/with|(...)"]; + 75 [label="Function call: R|kotlin/with|(...)"]; 71 [label="Exit function test_3" style="filled" fillcolor=red]; } 70 -> {72}; 72 -> {73}; - 73 -> {75}; + 73 -> {77}; 73 -> {74} [color=red]; - 74 -> {98} [color=green]; - 75 -> {77}; - 76 -> {74} [color=green]; - 76 -> {99} [color=red]; - 77 -> {78}; - 78 -> {80}; - 78 -> {79} [color=red]; - 79 -> {97}; - 80 -> {82}; - 81 -> {79} [color=green]; - 81 -> {99} [color=red]; - 82 -> {83}; + 74 -> {75} [color=green]; + 75 -> {71}; + 76 -> {75} [color=red]; + 77 -> {79}; + 78 -> {74} [color=green]; + 78 -> {76} [color=red]; + 79 -> {80}; + 80 -> {83}; + 80 -> {81} [color=red]; + 81 -> {82}; + 82 -> {78}; 83 -> {85}; - 83 -> {84} [color=red]; - 84 -> {92} [color=green]; - 85 -> {87}; - 86 -> {84} [color=green]; - 86 -> {93} [color=red]; - 87 -> {88}; - 88 -> {89}; - 89 -> {90}; + 84 -> {81} [color=green]; + 85 -> {86}; + 86 -> {93}; + 86 -> {87} [color=red]; + 87 -> {88} [color=green]; + 88 -> {90}; + 89 -> {88} [color=red]; 90 -> {91}; - 91 -> {86}; - 92 -> {94}; - 93 -> {92} [color=red]; - 94 -> {95}; + 91 -> {92}; + 92 -> {84}; + 93 -> {95}; + 94 -> {87} [color=green]; + 94 -> {89} [color=red]; 95 -> {96}; - 96 -> {81}; - 97 -> {76}; - 98 -> {71}; - 99 -> {98} [color=red]; + 96 -> {97}; + 97 -> {98}; + 98 -> {99}; + 99 -> {94}; subgraph cluster_23 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot index f1cb5144593..00192be47e8 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot @@ -192,45 +192,45 @@ digraph safeCalls_kt { 77 [label="Postponed enter to lambda"]; subgraph cluster_13 { color=blue - 79 [label="Enter function anonymousFunction"]; - 81 [label="Jump: ^test_5 Unit"]; - 82 [label="Stub" style="filled" fillcolor=gray]; - 80 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; + 88 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 90 [label="Jump: ^test_5 Unit"]; + 91 [label="Stub" style="filled" fillcolor=gray]; + 89 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray]; } - 84 [label="Call arguments union" style="filled" fillcolor=gray]; + 80 [label="Call arguments union" style="filled" fillcolor=gray]; 78 [label="Postponed exit from lambda"]; - 83 [label="Function call: R|/x|?.R|kotlin/let|(...)" style="filled" fillcolor=gray]; + 79 [label="Function call: R|/x|?.R|kotlin/let|(...)" style="filled" fillcolor=gray]; 76 [label="Exit safe call"]; - 85 [label="Enter safe call"]; - 87 [label="Access variable R|/x|"]; - 88 [label="Function call: R|/x|.R|/A.bool|()"]; - 89 [label="Function call: R|/x|?.R|kotlin/let|(...)?.R|/boo|(...)"]; - 86 [label="Exit safe call"]; - 90 [label="Access variable R|/x|"]; - 91 [label="Function call: R|/x|.#()"]; + 81 [label="Enter safe call"]; + 83 [label="Access variable R|/x|"]; + 84 [label="Function call: R|/x|.R|/A.bool|()"]; + 85 [label="Function call: R|/x|?.R|kotlin/let|(...)?.R|/boo|(...)"]; + 82 [label="Exit safe call"]; + 86 [label="Access variable R|/x|"]; + 87 [label="Function call: R|/x|.#()"]; 73 [label="Exit function test_5" style="filled" fillcolor=red]; } 72 -> {74}; 74 -> {75 76}; 75 -> {77}; - 76 -> {85 86}; - 77 -> {79}; + 76 -> {81 82}; + 77 -> {88}; 77 -> {78} [color=red]; - 78 -> {83} [color=green]; - 79 -> {81}; - 80 -> {84} [style=dotted]; - 80 -> {78} [color=green]; - 81 -> {73}; - 81 -> {82} [style=dotted]; - 82 -> {80} [style=dotted]; - 83 -> {76} [style=dotted]; - 84 -> {83} [style=dotted]; - 85 -> {87}; - 86 -> {90}; - 87 -> {88}; - 88 -> {89}; - 89 -> {86}; - 90 -> {91}; - 91 -> {73}; + 78 -> {79} [color=green]; + 79 -> {76} [style=dotted]; + 80 -> {79} [style=dotted]; + 81 -> {83}; + 82 -> {86}; + 83 -> {84}; + 84 -> {85}; + 85 -> {82}; + 86 -> {87}; + 87 -> {73}; + 88 -> {90}; + 89 -> {80} [style=dotted]; + 89 -> {78} [color=green]; + 90 -> {73}; + 90 -> {91} [style=dotted]; + 91 -> {89} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot index bc750b1a91a..560ba4d7c8f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot @@ -202,14 +202,14 @@ digraph smartcastToNothing_kt { 88 [label="Postponed enter to lambda"]; subgraph cluster_21 { color=blue - 90 [label="Enter function anonymousFunction"]; - 92 [label="Access variable R|/it|"]; - 93 [label="Access variable R|/A.a|"]; - 91 [label="Exit function anonymousFunction"]; + 92 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 94 [label="Access variable R|/it|"]; + 95 [label="Access variable R|/A.a|"]; + 93 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 95 [label="Call arguments union" style="filled" fillcolor=yellow]; + 91 [label="Call arguments union" style="filled" fillcolor=yellow]; 89 [label="Postponed exit from lambda"]; - 94 [label="Function call: R|/s|?.R|kotlin/let|(...)"]; + 90 [label="Function call: R|/s|?.R|kotlin/let|(...)"]; 87 [label="Exit safe call"]; 48 [label="Exit function test_0" style="filled" fillcolor=red]; } @@ -254,15 +254,15 @@ digraph smartcastToNothing_kt { 85 -> {86 87}; 86 -> {88}; 87 -> {48} [style=dotted]; - 88 -> {90}; + 88 -> {92}; 88 -> {89} [color=red]; - 89 -> {94} [color=green]; - 90 -> {92}; - 91 -> {89} [color=green]; - 91 -> {95} [color=red]; - 92 -> {93}; - 93 -> {91}; - 94 -> {87}; - 95 -> {94} [color=red]; + 89 -> {90} [color=green]; + 90 -> {87}; + 91 -> {90} [color=red]; + 92 -> {94}; + 93 -> {89} [color=green]; + 93 -> {91} [color=red]; + 94 -> {95}; + 95 -> {93}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/callsInPlace.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/callsInPlace.dot index c5e1ce5cd37..b75e665ce1a 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/callsInPlace.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/callsInPlace.dot @@ -10,32 +10,32 @@ digraph callsInPlace_kt { 3 [label="Postponed enter to lambda"]; subgraph cluster_1 { color=blue - 5 [label="Enter function anonymousFunction"]; - 7 [label="Const: Int(1)"]; - 8 [label="Assignment: R|/x|"]; - 6 [label="Exit function anonymousFunction"]; + 9 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 11 [label="Const: Int(1)"]; + 12 [label="Assignment: R|/x|"]; + 10 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 10 [label="Call arguments union" style="filled" fillcolor=yellow]; + 6 [label="Call arguments union" style="filled" fillcolor=yellow]; 4 [label="Postponed exit from lambda"]; - 9 [label="Function call: R|kotlin/run|(...)"]; - 11 [label="Access variable R|/x|"]; - 12 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; + 5 [label="Function call: R|kotlin/run|(...)"]; + 7 [label="Access variable R|/x|"]; + 8 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; 1 [label="Exit function test" style="filled" fillcolor=red]; } 0 -> {2}; 2 -> {3}; - 3 -> {5}; + 3 -> {9}; 3 -> {4} [color=red]; - 4 -> {9} [color=green]; + 4 -> {5} [color=green]; 5 -> {7}; - 6 -> {4} [color=green]; - 6 -> {10} [color=red]; + 6 -> {5} [color=red]; 7 -> {8}; - 8 -> {6}; + 8 -> {1}; 9 -> {11}; - 10 -> {9} [color=red]; + 10 -> {4} [color=green]; + 10 -> {6} [color=red]; 11 -> {12}; - 12 -> {1}; + 12 -> {10}; subgraph cluster_2 { color=red @@ -44,24 +44,24 @@ digraph callsInPlace_kt { 16 [label="Postponed enter to lambda"]; subgraph cluster_3 { color=blue - 18 [label="Enter function anonymousFunction"]; - 20 [label="Const: String(test_2)"]; - 19 [label="Exit function anonymousFunction"]; + 19 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 21 [label="Const: String(test_2)"]; + 20 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 17 [label="Postponed exit from lambda"]; - 21 [label="Function call: R|kotlin/repeat|(...)"]; + 18 [label="Function call: R|kotlin/repeat|(...)"]; 14 [label="Exit function test_2" style="filled" fillcolor=red]; } 13 -> {15}; 15 -> {16}; - 16 -> {18}; + 16 -> {19}; 16 -> {17} [color=red]; - 17 -> {21}; - 18 -> {19 20}; - 19 -> {18}; - 19 -> {17} [color=green]; + 17 -> {18}; + 18 -> {14}; + 19 -> {20 21}; 20 -> {19}; - 21 -> {14}; + 20 -> {17} [color=green]; + 21 -> {20}; subgraph cluster_4 { color=red @@ -69,25 +69,25 @@ digraph callsInPlace_kt { 24 [label="Postponed enter to lambda"]; subgraph cluster_5 { color=blue - 27 [label="Enter function anonymousFunction"]; - 29 [label="Const: String(test_3)"]; - 28 [label="Exit function anonymousFunction"]; + 28 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 30 [label="Const: String(test_3)"]; + 29 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 25 [label="Postponed exit from lambda"]; 26 [label="Const: Int(10)"]; - 30 [label="Function call: R|kotlin/repeat|(...)"]; + 27 [label="Function call: R|kotlin/repeat|(...)"]; 23 [label="Exit function test_3" style="filled" fillcolor=red]; } 22 -> {24}; - 24 -> {27}; + 24 -> {28}; 24 -> {25} [color=red]; 25 -> {26}; - 26 -> {30}; - 27 -> {28 29}; - 28 -> {27}; - 28 -> {25} [color=green]; + 26 -> {27}; + 27 -> {23}; + 28 -> {29 30}; 29 -> {28}; - 30 -> {23}; + 29 -> {25} [color=green]; + 30 -> {29}; subgraph cluster_6 { color=red @@ -96,34 +96,34 @@ digraph callsInPlace_kt { 34 [label="Postponed enter to lambda"]; subgraph cluster_7 { color=blue - 36 [label="Enter function anonymousFunction"]; - 38 [label="Const: String(test_4)"]; - 39 [label="Access variable R|/it|"]; - 40 [label="Const: Int(0)"]; - 41 [label="Function call: R|/it|.R|kotlin/Int.compareTo|(...)"]; - 42 [label="Comparison >"]; - 37 [label="Exit function anonymousFunction"]; + 38 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 40 [label="Const: String(test_4)"]; + 41 [label="Access variable R|/it|"]; + 42 [label="Const: Int(0)"]; + 43 [label="Function call: R|/it|.R|kotlin/Int.compareTo|(...)"]; + 44 [label="Comparison >"]; + 39 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 44 [label="Call arguments union" style="filled" fillcolor=yellow]; + 37 [label="Call arguments union" style="filled" fillcolor=yellow]; 35 [label="Postponed exit from lambda"]; - 43 [label="Function call: Int(1).R|kotlin/takeUnless|(...)"]; + 36 [label="Function call: Int(1).R|kotlin/takeUnless|(...)"]; 32 [label="Exit function test_4" style="filled" fillcolor=red]; } 31 -> {33}; 33 -> {34}; - 34 -> {36}; + 34 -> {38}; 34 -> {35} [color=red]; - 35 -> {43} [color=green]; - 36 -> {38}; - 37 -> {35} [color=green]; - 37 -> {44} [color=red]; - 38 -> {39}; - 39 -> {40}; + 35 -> {36} [color=green]; + 36 -> {32}; + 37 -> {36} [color=red]; + 38 -> {40}; + 39 -> {35} [color=green]; + 39 -> {37} [color=red]; 40 -> {41}; 41 -> {42}; - 42 -> {37}; - 43 -> {32}; - 44 -> {43} [color=red]; + 42 -> {43}; + 43 -> {44}; + 44 -> {39}; subgraph cluster_8 { color=red @@ -132,34 +132,34 @@ digraph callsInPlace_kt { 48 [label="Postponed enter to lambda"]; subgraph cluster_9 { color=blue - 50 [label="Enter function anonymousFunction"]; - 52 [label="Const: String(test_5)"]; - 53 [label="Access variable R|/it|"]; - 54 [label="Const: Int(0)"]; - 55 [label="Function call: R|/it|.R|kotlin/Int.compareTo|(...)"]; - 56 [label="Comparison >"]; - 51 [label="Exit function anonymousFunction"]; + 52 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 54 [label="Const: String(test_5)"]; + 55 [label="Access variable R|/it|"]; + 56 [label="Const: Int(0)"]; + 57 [label="Function call: R|/it|.R|kotlin/Int.compareTo|(...)"]; + 58 [label="Comparison >"]; + 53 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 58 [label="Call arguments union" style="filled" fillcolor=yellow]; + 51 [label="Call arguments union" style="filled" fillcolor=yellow]; 49 [label="Postponed exit from lambda"]; - 57 [label="Function call: Int(1).R|kotlin/takeUnless|(...)"]; + 50 [label="Function call: Int(1).R|kotlin/takeUnless|(...)"]; 46 [label="Exit function test_5" style="filled" fillcolor=red]; } 45 -> {47}; 47 -> {48}; - 48 -> {50}; + 48 -> {52}; 48 -> {49} [color=red]; - 49 -> {57} [color=green]; - 50 -> {52}; - 51 -> {49} [color=green]; - 51 -> {58} [color=red]; - 52 -> {53}; - 53 -> {54}; + 49 -> {50} [color=green]; + 50 -> {46}; + 51 -> {50} [color=red]; + 52 -> {54}; + 53 -> {49} [color=green]; + 53 -> {51} [color=red]; 54 -> {55}; 55 -> {56}; - 56 -> {51}; - 57 -> {46}; - 58 -> {57} [color=red]; + 56 -> {57}; + 57 -> {58}; + 58 -> {53}; subgraph cluster_10 { color=red @@ -178,38 +178,38 @@ digraph callsInPlace_kt { 65 [label="Postponed enter to lambda"]; subgraph cluster_12 { color=blue - 69 [label="Enter function anonymousFunction"]; - 71 [label="Const: String(test_6_1)"]; - 70 [label="Exit function anonymousFunction"]; + 70 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 72 [label="Const: String(test_6_1)"]; + 71 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 66 [label="Postponed exit from lambda"]; 67 [label="Postponed enter to lambda"]; subgraph cluster_13 { color=blue - 72 [label="Enter function anonymousFunction"]; - 74 [label="Const: String(test_6_2)"]; - 73 [label="Exit function anonymousFunction"]; + 73 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 75 [label="Const: String(test_6_2)"]; + 74 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 68 [label="Postponed exit from lambda"]; - 75 [label="Function call: R|/myRun|(...)"]; + 69 [label="Function call: R|/myRun|(...)"]; 64 [label="Exit function test_6" style="filled" fillcolor=red]; } 63 -> {65}; - 65 -> {69}; + 65 -> {70}; 65 -> {66} [color=red]; 66 -> {67}; - 67 -> {72}; + 67 -> {73}; 67 -> {68} [color=red]; - 68 -> {75}; - 69 -> {70 71}; - 70 -> {69}; - 70 -> {66} [color=green]; + 68 -> {69}; + 69 -> {64}; + 70 -> {71 72}; 71 -> {70}; - 72 -> {73 74}; - 73 -> {72}; - 73 -> {68} [color=green]; + 71 -> {66} [color=green]; + 72 -> {71}; + 73 -> {74 75}; 74 -> {73}; - 75 -> {64}; + 74 -> {68} [color=green]; + 75 -> {74}; subgraph cluster_14 { color=red @@ -217,38 +217,38 @@ digraph callsInPlace_kt { 78 [label="Postponed enter to lambda"]; subgraph cluster_15 { color=blue - 82 [label="Enter function anonymousFunction"]; - 84 [label="Const: String(test_7_2)"]; - 83 [label="Exit function anonymousFunction"]; + 83 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 85 [label="Const: String(test_7_2)"]; + 84 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 79 [label="Postponed exit from lambda"]; 80 [label="Postponed enter to lambda"]; subgraph cluster_16 { color=blue - 85 [label="Enter function anonymousFunction"]; - 87 [label="Const: String(test_7_1)"]; - 86 [label="Exit function anonymousFunction"]; + 86 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 88 [label="Const: String(test_7_1)"]; + 87 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 81 [label="Postponed exit from lambda"]; - 88 [label="Function call: R|/myRun|(...)"]; + 82 [label="Function call: R|/myRun|(...)"]; 77 [label="Exit function test_7" style="filled" fillcolor=red]; } 76 -> {78}; - 78 -> {82}; + 78 -> {83}; 78 -> {79} [color=red]; 79 -> {80}; - 80 -> {85}; + 80 -> {86}; 80 -> {81} [color=red]; - 81 -> {88}; - 82 -> {83 84}; - 83 -> {82}; - 83 -> {79} [color=green]; + 81 -> {82}; + 82 -> {77}; + 83 -> {84 85}; 84 -> {83}; - 85 -> {86 87}; - 86 -> {85}; - 86 -> {81} [color=green]; + 84 -> {79} [color=green]; + 85 -> {84}; + 86 -> {87 88}; 87 -> {86}; - 88 -> {77}; + 87 -> {81} [color=green]; + 88 -> {87}; subgraph cluster_17 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/smartcasts/tryWithLambdaInside.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/smartcasts/tryWithLambdaInside.dot index 38dc8eef109..61375423862 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/smartcasts/tryWithLambdaInside.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/smartcasts/tryWithLambdaInside.dot @@ -40,29 +40,29 @@ digraph tryWithLambdaInside_kt { 15 [label="Postponed enter to lambda"]; subgraph cluster_6 { color=blue - 17 [label="Enter function anonymousFunction"]; - 19 [label="Access variable R|/it|"]; - 18 [label="Exit function anonymousFunction"]; + 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 27 [label="Access variable R|/it|"]; + 26 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } 16 [label="Postponed exit from lambda"]; - 20 [label="Function call: R|/list|.R|kotlin/collections/filter|(...)"]; - 21 [label="Exit block"]; + 17 [label="Function call: R|/list|.R|kotlin/collections/filter|(...)"]; + 18 [label="Exit block"]; } - 22 [label="Try main block exit"]; + 19 [label="Try main block exit"]; } subgraph cluster_7 { color=blue 12 [label="Enter finally"]; subgraph cluster_8 { color=blue - 23 [label="Enter block"]; - 24 [label="Exit block"]; + 20 [label="Enter block"]; + 21 [label="Exit block"]; } - 25 [label="Exit finally"]; + 22 [label="Exit finally"]; } 10 [label="Try expression exit"]; } - 26 [label="Jump: ^testInPlace try { + 23 [label="Jump: ^testInPlace try { R|/list|.R|kotlin/collections/filter|( = filter@fun (it: R|kotlin/Boolean|): R|kotlin/Boolean| { ^ R|/it| } @@ -71,32 +71,32 @@ digraph tryWithLambdaInside_kt { finally { } "]; - 27 [label="Stub" style="filled" fillcolor=gray]; + 24 [label="Stub" style="filled" fillcolor=gray]; 8 [label="Exit function testInPlace" style="filled" fillcolor=red]; } 7 -> {9}; 9 -> {11}; - 10 -> {26}; + 10 -> {23}; 11 -> {8 12 13}; - 12 -> {23}; + 12 -> {20}; 13 -> {14}; 14 -> {15}; - 15 -> {17}; + 15 -> {25}; 15 -> {16} [color=red]; - 16 -> {20}; - 17 -> {18 19}; - 18 -> {17}; - 18 -> {16} [color=green]; - 19 -> {18}; + 16 -> {17}; + 17 -> {18}; + 18 -> {19}; + 19 -> {10}; 20 -> {21}; 21 -> {22}; 22 -> {10}; - 23 -> {24}; - 24 -> {25}; - 25 -> {10}; - 26 -> {8}; - 26 -> {27} [style=dotted]; - 27 -> {8} [style=dotted]; + 23 -> {8}; + 23 -> {24} [style=dotted]; + 24 -> {8} [style=dotted]; + 25 -> {26 27}; + 26 -> {25}; + 26 -> {16} [color=green]; + 27 -> {26}; subgraph cluster_9 { color=red diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 84389e65c5b..47864ee03bb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -133,7 +133,7 @@ abstract class FirDataFlowAnalyzer( functionEnterNode.mergeIncomingFlow(shouldForkFlow = previousNode != null) } - fun exitFunction(function: FirFunction<*>): ControlFlowGraph? { + fun exitFunction(function: FirFunction<*>): ControlFlowGraph { val (node, graph) = graphBuilder.exitFunction(function) node.mergeIncomingFlow() if (!graphBuilder.isTopLevel()) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index 5d89d6ae508..e59d12e74e4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -95,11 +95,9 @@ class ControlFlowGraphBuilder { null } - if (!isInplace) { - graphs.push(ControlFlowGraph(function, name, ControlFlowGraph.Kind.Function)) - } + graphs.push(ControlFlowGraph(function, name, ControlFlowGraph.Kind.Function)) - val enterNode = createFunctionEnterNode(function, isInplace).also { + val enterNode = createFunctionEnterNode(function).also { if (isInplace) { val postponedEnterNode = entersToPostponedAnonymousFunctions[function.symbol] if (postponedEnterNode != null) { @@ -117,7 +115,7 @@ class ControlFlowGraphBuilder { if (previousNode != null && !isInplace) { addEdge(previousNode, enterNode, preferredKind = EdgeKind.Dfg) } - val exitNode = createFunctionExitNode(function, isInplace) + val exitNode = createFunctionExitNode(function) if (function is FirAnonymousFunction) { exitsOfAnonymousFunctions[function] = exitNode } @@ -137,7 +135,7 @@ class ControlFlowGraphBuilder { return enterNode to previousNode } - fun exitFunction(function: FirFunction<*>): Pair { + fun exitFunction(function: FirFunction<*>): Pair { levelCounter-- val exitNode = functionExitNodes.pop() val invocationKind = function.invocationKind @@ -171,19 +169,14 @@ class ControlFlowGraphBuilder { lexicalScopes.pop() } exitNode.updateDeadStatus() - val graph = if (!isInplace) { - graphs.pop().also { graph -> - exitsFromCompletedPostponedAnonymousFunctions.removeAll { it.owner == graph } - } - } else { - null + val graph = graphs.pop().also { graph -> + exitsFromCompletedPostponedAnonymousFunctions.removeAll { it.owner == graph } } - if (graph != null) { - val previousGraph = parentGraphForAnonymousFunctions.remove(function.symbol) ?: graphs.top() - if (previousGraph.kind == ControlFlowGraph.Kind.Function) { - previousGraph.addSubGraph(graph) - } + val previousGraph = parentGraphForAnonymousFunctions.remove(function.symbol) ?: graphs.top() + if (previousGraph.kind == ControlFlowGraph.Kind.Function) { + previousGraph.addSubGraph(graph) } + return exitNode to graph } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt index d95fb8168fd..4fa4b35057f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt @@ -56,18 +56,14 @@ fun ControlFlowGraphBuilder.createPropertyInitializerExitNode(fir: FirProperty): fun ControlFlowGraphBuilder.createPropertyInitializerEnterNode(fir: FirProperty): PropertyInitializerEnterNode = PropertyInitializerEnterNode(graph, fir, levelCounter, createId()) -fun ControlFlowGraphBuilder.createFunctionEnterNode(fir: FirFunction<*>, isInPlace: Boolean): FunctionEnterNode = +fun ControlFlowGraphBuilder.createFunctionEnterNode(fir: FirFunction<*>): FunctionEnterNode = FunctionEnterNode(graph, fir, levelCounter, createId()).also { - if (!isInPlace) { - graph.enterNode = it - } + graph.enterNode = it } -fun ControlFlowGraphBuilder.createFunctionExitNode(fir: FirFunction<*>, isInPlace: Boolean): FunctionExitNode = +fun ControlFlowGraphBuilder.createFunctionExitNode(fir: FirFunction<*>): FunctionExitNode = FunctionExitNode(graph, fir, levelCounter, createId()).also { - if (!isInPlace) { - graph.exitNode = it - } + graph.exitNode = it } fun ControlFlowGraphBuilder.createBinaryOrEnterNode(fir: FirBinaryLogicExpression): BinaryOrEnterNode = diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 98d65a36260..4a073b6d12c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -439,9 +439,8 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) transformDeclarationContent(function, data).also { if (functionIsNotAnalyzed) { val result = it.single as FirFunction<*> - dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph -> - result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) - } + val controlFlowGraph = dataFlowAnalyzer.exitFunction(result) + result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) } } as CompositeTransformResult }