diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot index 41a48037944..a1581051f70 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot @@ -6,89 +6,85 @@ digraph initBlock_kt { subgraph cluster_0 { color=red 0 [label="Enter class Foo" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter init block" style="filled" fillcolor=red]; + 1 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_2 { color=blue - 3 [label="Enter block"]; - 4 [label="Const: Int(1)"]; - 5 [label="Variable declaration: lval x: R|kotlin/Int|"]; - 6 [label="Exit block"]; + 2 [label="Enter block"]; + 3 [label="Const: Int(1)"]; + 4 [label="Variable declaration: lval x: R|kotlin/Int|"]; + 5 [label="Exit block"]; } - 7 [label="Exit init block" style="filled" fillcolor=red]; + 6 [label="Exit init block" style="filled" fillcolor=red]; } - 8 [label="Exit class Foo" style="filled" fillcolor=red]; + 7 [label="Exit class Foo" style="filled" fillcolor=red]; } subgraph cluster_3 { color=blue - 9 [label="Enter function " style="filled" fillcolor=red]; - 10 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 11 [label="Exit function " style="filled" fillcolor=red]; + 8 [label="Enter function " style="filled" fillcolor=red]; + 9 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 10 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {8} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {7} [style=dotted]; + 0 -> {1} [style=dashed]; + 1 -> {2}; 2 -> {3}; 3 -> {4}; 4 -> {5}; 5 -> {6}; - 6 -> {7}; + 6 -> {7} [color=green]; 7 -> {8} [color=green]; - 8 -> {9} [color=green]; - 8 -> {9} [style=dashed]; + 7 -> {8} [style=dashed]; + 8 -> {9}; 9 -> {10}; - 10 -> {11}; subgraph cluster_4 { color=red - 12 [label="Enter class Bar" style="filled" fillcolor=red]; - 13 [label="Part of class initialization"]; + 11 [label="Enter class Bar" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue - 14 [label="Enter init block" style="filled" fillcolor=red]; + 12 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 15 [label="Enter block"]; - 16 [label="Const: Int(1)"]; - 17 [label="Variable declaration: lval x: R|kotlin/Int|"]; - 18 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; - 19 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 20 [label="Stub" style="filled" fillcolor=gray]; - 21 [label="Const: Int(2)" style="filled" fillcolor=gray]; - 22 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray]; - 23 [label="Exit block" style="filled" fillcolor=gray]; + 13 [label="Enter block"]; + 14 [label="Const: Int(1)"]; + 15 [label="Variable declaration: lval x: R|kotlin/Int|"]; + 16 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; + 17 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 18 [label="Stub" style="filled" fillcolor=gray]; + 19 [label="Const: Int(2)" style="filled" fillcolor=gray]; + 20 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray]; + 21 [label="Exit block" style="filled" fillcolor=gray]; } - 24 [label="Exit init block" style="filled" fillcolor=gray]; + 22 [label="Exit init block" style="filled" fillcolor=gray]; } - 25 [label="Exit class Bar" style="filled" fillcolor=gray]; + 23 [label="Exit class Bar" style="filled" fillcolor=gray]; } subgraph cluster_7 { color=blue - 26 [label="Enter function " style="filled" fillcolor=gray]; - 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 28 [label="Exit function " style="filled" fillcolor=red]; + 24 [label="Enter function " style="filled" fillcolor=gray]; + 25 [label="Delegated constructor call: super()" style="filled" fillcolor=gray]; + 26 [label="Exit function " style="filled" fillcolor=gray]; } - 12 -> {13} [color=green]; - 13 -> {14} [color=green]; - 13 -> {25} [style=dotted]; - 13 -> {14} [style=dashed]; + 11 -> {12} [color=green]; + 11 -> {23} [style=dotted]; + 11 -> {12} [style=dashed]; + 12 -> {13}; + 13 -> {14}; 14 -> {15}; 15 -> {16}; 16 -> {17}; - 17 -> {18}; - 18 -> {19}; + 17 -> {18} [style=dotted]; + 18 -> {19} [style=dotted]; 19 -> {20} [style=dotted]; 20 -> {21} [style=dotted]; 21 -> {22} [style=dotted]; 22 -> {23} [style=dotted]; 23 -> {24} [style=dotted]; + 23 -> {24} [style=dashed]; 24 -> {25} [style=dotted]; 25 -> {26} [style=dotted]; - 25 -> {26} [style=dashed]; - 26 -> {27}; - 27 -> {28}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 46e7b876fa1..77a51c6cd0a 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -20,58 +20,57 @@ digraph initBlockAndInPlaceLambda_kt { subgraph cluster_2 { color=red 4 [label="Enter class C" style="filled" fillcolor=red]; - 5 [label="Part of class initialization"]; subgraph cluster_3 { color=blue - 6 [label="Enter init block" style="filled" fillcolor=red]; + 5 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_4 { color=blue - 7 [label="Enter block"]; - 8 [label="Access variable R|/a|"]; - 9 [label="Access variable R|/A.b|"]; - 10 [label="Enter safe call"]; - 11 [label="Postponed enter to lambda"]; + 6 [label="Enter block"]; + 7 [label="Access variable R|/a|"]; + 8 [label="Access variable R|/A.b|"]; + 9 [label="Enter safe call"]; + 10 [label="Postponed enter to lambda"]; subgraph cluster_5 { color=blue - 12 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 11 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/a|"]; - 15 [label="Access variable R|/it|"]; - 16 [label="Function call: R|/C.C|(...)" style="filled" fillcolor=yellow]; - 17 [label="Exit block"]; + 12 [label="Enter block"]; + 13 [label="Access variable R|/a|"]; + 14 [label="Access variable R|/it|"]; + 15 [label="Function call: R|/C.C|(...)" style="filled" fillcolor=yellow]; + 16 [label="Exit block"]; } - 18 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 17 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 19 [label="Postponed exit from lambda"]; - 20 [label="Function call: $subj$.R|kotlin/let|(...)" style="filled" fillcolor=yellow]; - 21 [label="Exit safe call"]; - 22 [label="Variable declaration: lval c: R|C?|"]; - 23 [label="Exit block"]; + 18 [label="Postponed exit from lambda"]; + 19 [label="Function call: $subj$.R|kotlin/let|(...)" style="filled" fillcolor=yellow]; + 20 [label="Exit safe call"]; + 21 [label="Variable declaration: lval c: R|C?|"]; + 22 [label="Exit block"]; } - 24 [label="Exit init block" style="filled" fillcolor=red]; + 23 [label="Exit init block" style="filled" fillcolor=red]; } - 25 [label="Exit class C" style="filled" fillcolor=red]; + 24 [label="Exit class C" style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 26 [label="Enter function " style="filled" fillcolor=red]; - 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 28 [label="Exit function " style="filled" fillcolor=red]; + 25 [label="Enter function " style="filled" fillcolor=red]; + 26 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 27 [label="Exit function " style="filled" fillcolor=red]; } 4 -> {5} [color=green]; - 5 -> {6} [color=green]; - 5 -> {25} [style=dotted]; - 5 -> {6} [style=dashed]; + 4 -> {24} [style=dotted]; + 4 -> {5} [style=dashed]; + 5 -> {6}; 6 -> {7}; 7 -> {8}; - 8 -> {9}; - 9 -> {10 21}; - 10 -> {11}; - 11 -> {12 20}; - 11 -> {19} [style=dotted]; - 11 -> {12} [style=dashed]; + 8 -> {9 20}; + 9 -> {10}; + 10 -> {11 19}; + 10 -> {18} [style=dotted]; + 10 -> {11} [style=dashed]; + 11 -> {12}; 12 -> {13}; 13 -> {14}; 14 -> {15}; @@ -83,11 +82,10 @@ digraph initBlockAndInPlaceLambda_kt { 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {24}; + 23 -> {24} [color=green]; 24 -> {25} [color=green]; - 25 -> {26} [color=green]; - 25 -> {26} [style=dashed]; + 24 -> {25} [style=dashed]; + 25 -> {26}; 26 -> {27}; - 27 -> {28}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot index 608b9b80cd1..bb3b56ba2c7 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot @@ -23,89 +23,87 @@ digraph postponedLambdaInConstructor_kt { subgraph cluster_2 { color=red 5 [label="Enter class B" style="filled" fillcolor=red]; - 6 [label="Part of class initialization"]; subgraph cluster_3 { color=blue - 7 [label="Enter property" style="filled" fillcolor=red]; - 8 [label="Access variable R|/s|"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Access variable R|/s|"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } - 10 [label="Exit class B" style="filled" fillcolor=red]; + 9 [label="Exit class B" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue - 11 [label="Enter function foo" style="filled" fillcolor=red]; + 10 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue - 12 [label="Enter block"]; - 13 [label="Function call: this@R|/B|.R|/B.foo|()" style="filled" fillcolor=yellow]; - 14 [label="Exit block"]; + 11 [label="Enter block"]; + 12 [label="Function call: this@R|/B|.R|/B.foo|()" style="filled" fillcolor=yellow]; + 13 [label="Exit block"]; } - 15 [label="Exit function foo" style="filled" fillcolor=red]; + 14 [label="Exit function foo" style="filled" fillcolor=red]; } subgraph cluster_6 { color=blue - 16 [label="Enter function " style="filled" fillcolor=red]; - 17 [label="Access variable R|/s|"]; - 18 [label="Postponed enter to lambda"]; + 15 [label="Enter function " style="filled" fillcolor=red]; + 16 [label="Access variable R|/s|"]; + 17 [label="Postponed enter to lambda"]; subgraph cluster_7 { color=blue - 19 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 18 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 20 [label="Enter block"]; - 21 [label="Exit anonymous function expression"]; + 19 [label="Enter block"]; + 20 [label="Exit anonymous function expression"]; subgraph cluster_9 { color=blue - 22 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 21 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_10 { color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/it|"]; - 25 [label="Exit block"]; + 22 [label="Enter block"]; + 23 [label="Access variable R|/it|"]; + 24 [label="Exit block"]; } - 26 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 25 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 27 [label="Exit block"]; + 26 [label="Exit block"]; } - 28 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 27 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 29 [label="Postponed exit from lambda"]; - 30 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)" style="filled" fillcolor=yellow]; - 31 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; - 32 [label="Exit function " style="filled" fillcolor=red]; + 28 [label="Postponed exit from lambda"]; + 29 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)" style="filled" fillcolor=yellow]; + 30 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; + 31 [label="Exit function " style="filled" fillcolor=red]; } 5 -> {6} [color=green]; - 6 -> {7} [color=green]; - 6 -> {10} [style=dotted]; - 6 -> {7} [style=dashed]; + 5 -> {9} [style=dotted]; + 5 -> {6} [style=dashed]; + 6 -> {7}; 7 -> {8}; - 8 -> {9}; - 9 -> {10} [color=green]; - 10 -> {11 16} [color=green]; - 10 -> {11 16} [style=dashed]; + 8 -> {9} [color=green]; + 9 -> {10 15} [color=green]; + 9 -> {10 15} [style=dashed]; + 10 -> {11}; 11 -> {12}; 12 -> {13}; 13 -> {14}; - 14 -> {15}; + 15 -> {16}; 16 -> {17}; - 17 -> {18}; - 18 -> {19 30}; - 18 -> {29} [style=dotted]; - 18 -> {19} [style=dashed]; + 17 -> {18 29}; + 17 -> {28} [style=dotted]; + 17 -> {18} [style=dashed]; + 18 -> {19}; 19 -> {20}; - 20 -> {21}; - 21 -> {22 27}; - 21 -> {22} [style=dashed]; + 20 -> {21 26}; + 20 -> {21} [style=dashed]; + 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; + 26 -> {27}; 27 -> {28}; - 28 -> {29}; - 29 -> {30} [color=green]; - 29 -> {31} [color=red]; + 28 -> {29} [color=green]; + 28 -> {30} [color=red]; + 29 -> {30}; 30 -> {31}; - 31 -> {32}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot index c80d0f25c21..bdb45971b55 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -90,215 +90,213 @@ digraph propertiesAndInitBlocks_kt { subgraph cluster_10 { color=blue 29 [label="Enter class GetterLocalClass" style="filled" fillcolor=red]; - 30 [label="Part of class initialization"]; subgraph cluster_11 { color=blue - 31 [label="Enter init block" style="filled" fillcolor=red]; + 30 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue - 32 [label="Enter block"]; - 33 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; - 34 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 35 [label="Stub" style="filled" fillcolor=gray]; - 36 [label="Exit block" style="filled" fillcolor=gray]; + 31 [label="Enter block"]; + 32 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; + 33 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 34 [label="Stub" style="filled" fillcolor=gray]; + 35 [label="Exit block" style="filled" fillcolor=gray]; } - 37 [label="Exit init block" style="filled" fillcolor=gray]; + 36 [label="Exit init block" style="filled" fillcolor=gray]; } - 38 [label="Exit class GetterLocalClass" style="filled" fillcolor=gray]; + 37 [label="Exit class GetterLocalClass" style="filled" fillcolor=gray]; } subgraph cluster_13 { color=blue - 39 [label="Enter function " style="filled" fillcolor=gray]; - 40 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 41 [label="Exit function " style="filled" fillcolor=red]; + 38 [label="Enter function " style="filled" fillcolor=gray]; + 39 [label="Delegated constructor call: super()" style="filled" fillcolor=gray]; + 40 [label="Exit function " style="filled" fillcolor=gray]; } 24 -> {25}; 25 -> {26}; 26 -> {27 29}; 26 -> {29} [style=dashed]; 27 -> {28}; - 29 -> {30} [color=green]; - 29 -> {31 39} [color=red]; - 30 -> {31} [color=green]; - 30 -> {38} [style=dotted]; - 30 -> {31} [style=dashed]; + 29 -> {30}; + 29 -> {38} [color=red]; + 29 -> {37} [style=dotted]; + 29 -> {30} [style=dashed]; + 30 -> {31}; 31 -> {32}; 32 -> {33}; - 33 -> {34}; + 33 -> {34} [style=dotted]; 34 -> {35} [style=dotted]; 35 -> {36} [style=dotted]; 36 -> {37} [style=dotted]; 37 -> {38} [style=dotted]; + 37 -> {38} [style=dashed]; 38 -> {39} [style=dotted]; - 38 -> {39} [style=dashed]; - 39 -> {40}; - 40 -> {41}; + 39 -> {40} [style=dotted]; subgraph cluster_14 { color=red - 42 [label="Enter property" style="filled" fillcolor=red]; - 43 [label="Postponed enter to lambda"]; + 41 [label="Enter property" style="filled" fillcolor=red]; + 42 [label="Postponed enter to lambda"]; subgraph cluster_15 { color=blue - 44 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 43 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_16 { color=blue - 45 [label="Enter block"]; - 46 [label="Local function declaration "]; - 47 [label="Exit local class "]; - 48 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; - 49 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 50 [label="Stub" style="filled" fillcolor=gray]; - 51 [label="Exit block" style="filled" fillcolor=gray]; + 44 [label="Enter block"]; + 45 [label="Local function declaration "]; + 46 [label="Exit local class "]; + 47 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; + 48 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 49 [label="Stub" style="filled" fillcolor=gray]; + 50 [label="Exit block" style="filled" fillcolor=gray]; } - 52 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; + 51 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; } subgraph cluster_17 { color=blue - 53 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; - 54 [label="Part of class initialization"]; + 52 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; subgraph cluster_18 { color=blue - 55 [label="Enter init block" style="filled" fillcolor=red]; + 53 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_19 { color=blue - 56 [label="Enter block"]; - 57 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; - 58 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 59 [label="Stub" style="filled" fillcolor=gray]; - 60 [label="Const: Int(1)" style="filled" fillcolor=gray]; - 61 [label="Exit block" style="filled" fillcolor=gray]; + 54 [label="Enter block"]; + 55 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; + 56 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 57 [label="Stub" style="filled" fillcolor=gray]; + 58 [label="Const: Int(1)" style="filled" fillcolor=gray]; + 59 [label="Exit block" style="filled" fillcolor=gray]; } - 62 [label="Exit init block" style="filled" fillcolor=gray]; + 60 [label="Exit init block" style="filled" fillcolor=gray]; } - 63 [label="Exit class InitializerLocalClass" style="filled" fillcolor=gray]; + 61 [label="Exit class InitializerLocalClass" style="filled" fillcolor=gray]; } subgraph cluster_20 { color=blue - 64 [label="Enter function " style="filled" fillcolor=gray]; - 65 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 66 [label="Exit function " style="filled" fillcolor=red]; + 62 [label="Enter function " style="filled" fillcolor=gray]; + 63 [label="Delegated constructor call: super()" style="filled" fillcolor=gray]; + 64 [label="Exit function " style="filled" fillcolor=gray]; } subgraph cluster_21 { color=blue - 67 [label="Enter function foo" style="filled" fillcolor=red]; + 65 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_22 { color=blue - 68 [label="Enter block"]; - 69 [label="Const: Int(1)"]; - 70 [label="Const: Int(1)"]; - 71 [label="Function call: Int(1).R|kotlin/Int.plus|(...)" style="filled" fillcolor=yellow]; - 72 [label="Variable declaration: lval c: R|kotlin/Int|"]; - 73 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; - 74 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 75 [label="Stub" style="filled" fillcolor=gray]; - 76 [label="Exit block" style="filled" fillcolor=gray]; + 66 [label="Enter block"]; + 67 [label="Const: Int(1)"]; + 68 [label="Const: Int(1)"]; + 69 [label="Function call: Int(1).R|kotlin/Int.plus|(...)" style="filled" fillcolor=yellow]; + 70 [label="Variable declaration: lval c: R|kotlin/Int|"]; + 71 [label="Function call: R|java/lang/Exception.Exception|()" style="filled" fillcolor=yellow]; + 72 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 73 [label="Stub" style="filled" fillcolor=gray]; + 74 [label="Exit block" style="filled" fillcolor=gray]; } - 77 [label="Exit function foo" style="filled" fillcolor=gray]; + 75 [label="Exit function foo" style="filled" fillcolor=gray]; } - 78 [label="Postponed exit from lambda"]; - 79 [label="Function call: R|/run|(...)" style="filled" fillcolor=yellow]; - 80 [label="Exit property" style="filled" fillcolor=red]; + 76 [label="Postponed exit from lambda"]; + 77 [label="Function call: R|/run|(...)" style="filled" fillcolor=yellow]; + 78 [label="Exit property" style="filled" fillcolor=red]; } - 42 -> {43}; - 43 -> {44 78 79}; - 43 -> {44} [style=dashed]; + 41 -> {42}; + 42 -> {43 76 77}; + 42 -> {43} [style=dashed]; + 43 -> {44}; 44 -> {45}; - 45 -> {46}; - 46 -> {47 67}; - 46 -> {67} [style=dashed]; - 47 -> {48 53}; - 47 -> {53} [style=dashed]; - 48 -> {49}; + 45 -> {46 65}; + 45 -> {65} [style=dashed]; + 46 -> {47 52}; + 46 -> {52} [style=dashed]; + 47 -> {48}; + 48 -> {49} [style=dotted]; 49 -> {50} [style=dotted]; 50 -> {51} [style=dotted]; - 51 -> {52} [style=dotted]; - 52 -> {78} [style=dotted]; - 53 -> {54} [color=green]; - 53 -> {55 64} [color=red]; - 54 -> {55} [color=green]; - 54 -> {63} [style=dotted]; - 54 -> {55} [style=dashed]; + 51 -> {76} [style=dotted]; + 52 -> {53}; + 52 -> {62} [color=red]; + 52 -> {61} [style=dotted]; + 52 -> {53} [style=dashed]; + 53 -> {54}; + 54 -> {55}; 55 -> {56}; - 56 -> {57}; - 57 -> {58}; + 56 -> {57} [style=dotted]; + 57 -> {58} [style=dotted]; 58 -> {59} [style=dotted]; 59 -> {60} [style=dotted]; 60 -> {61} [style=dotted]; 61 -> {62} [style=dotted]; + 61 -> {62} [style=dashed]; 62 -> {63} [style=dotted]; 63 -> {64} [style=dotted]; - 63 -> {64} [style=dashed]; - 64 -> {65}; 65 -> {66}; + 66 -> {67}; 67 -> {68}; 68 -> {69}; 69 -> {70}; 70 -> {71}; 71 -> {72}; - 72 -> {73}; - 73 -> {74}; + 72 -> {73} [style=dotted]; + 73 -> {74} [style=dotted]; 74 -> {75} [style=dotted]; - 75 -> {76} [style=dotted]; - 76 -> {77} [style=dotted]; - 78 -> {79}; - 78 -> {43} [color=green style=dashed]; - 79 -> {80}; + 76 -> {77}; + 76 -> {42} [color=green style=dashed]; + 77 -> {78}; subgraph cluster_23 { color=red - 81 [label="Enter property" style="filled" fillcolor=red]; + 79 [label="Enter property" style="filled" fillcolor=red]; subgraph cluster_24 { color=blue - 82 [label="Try expression enter"]; + 80 [label="Try expression enter"]; subgraph cluster_25 { color=blue - 83 [label="Try main block enter"]; + 81 [label="Try main block enter"]; subgraph cluster_26 { color=blue - 84 [label="Enter block"]; - 85 [label="Const: Int(1)"]; - 86 [label="Exit block"]; + 82 [label="Enter block"]; + 83 [label="Const: Int(1)"]; + 84 [label="Exit block"]; } - 87 [label="Try main block exit"]; + 85 [label="Try main block exit"]; } subgraph cluster_27 { color=blue - 88 [label="Catch enter"]; - 89 [label="Variable declaration: e: R|kotlin/Exception|"]; + 86 [label="Catch enter"]; + 87 [label="Variable declaration: e: R|kotlin/Exception|"]; subgraph cluster_28 { color=blue - 90 [label="Enter block"]; - 91 [label="Const: Int(2)"]; - 92 [label="Exit block"]; + 88 [label="Enter block"]; + 89 [label="Const: Int(2)"]; + 90 [label="Exit block"]; } - 93 [label="Catch exit"]; + 91 [label="Catch exit"]; } subgraph cluster_29 { color=blue - 94 [label="Enter finally"]; + 92 [label="Enter finally"]; subgraph cluster_30 { color=blue - 95 [label="Enter block"]; - 96 [label="Const: Int(0)"]; - 97 [label="Exit block"]; + 93 [label="Enter block"]; + 94 [label="Const: Int(0)"]; + 95 [label="Exit block"]; } - 98 [label="Exit finally"]; + 96 [label="Exit finally"]; } - 99 [label="Try expression exit"]; + 97 [label="Try expression exit"]; } - 100 [label="Exit property" style="filled" fillcolor=red]; + 98 [label="Exit property" style="filled" fillcolor=red]; } + 79 -> {80}; + 80 -> {81 86}; + 80 -> {92} [label="onUncaughtException"]; 81 -> {82}; - 82 -> {83 88}; - 82 -> {94} [label="onUncaughtException"]; + 82 -> {83}; 83 -> {84}; 84 -> {85}; - 85 -> {86}; + 85 -> {86 92}; 86 -> {87}; - 87 -> {88 94}; + 86 -> {92} [label="onUncaughtException"]; + 87 -> {88}; 88 -> {89}; - 88 -> {94} [label="onUncaughtException"]; 89 -> {90}; 90 -> {91}; 91 -> {92}; @@ -308,7 +306,5 @@ digraph propertiesAndInitBlocks_kt { 95 -> {96}; 96 -> {97}; 97 -> {98}; - 98 -> {99}; - 99 -> {100}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot index bcc86909d2a..e42f2ef5da2 100644 --- a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot +++ b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot @@ -6,95 +6,85 @@ digraph secondaryConstructorCfg_kt { subgraph cluster_0 { color=red 0 [label="Enter class B" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Access variable R|/p0|"]; - 4 [label="Exit property" style="filled" fillcolor=red]; + 1 [label="Enter property" style="filled" fillcolor=red]; + 2 [label="Access variable R|/p0|"]; + 3 [label="Exit property" style="filled" fillcolor=red]; } - 5 [label="Part of class initialization"]; subgraph cluster_2 { color=blue - 6 [label="Enter property" style="filled" fillcolor=red]; - 7 [label="Access variable R|/p0|"]; - 8 [label="Access variable R|kotlin/String.length|"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 4 [label="Enter property" style="filled" fillcolor=red]; + 5 [label="Access variable R|/p0|"]; + 6 [label="Access variable R|kotlin/String.length|"]; + 7 [label="Exit property" style="filled" fillcolor=red]; } - 10 [label="Part of class initialization"]; subgraph cluster_3 { color=blue - 11 [label="Enter init block" style="filled" fillcolor=red]; + 8 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_4 { color=blue - 12 [label="Enter block"]; - 13 [label="Access variable R|/p0|"]; - 14 [label="Access variable R|kotlin/String.length|"]; - 15 [label="Assignment: R|/B.p1|"]; - 16 [label="Const: String()"]; - 17 [label="Assignment: R|/B.p3|"]; - 18 [label="Exit block"]; + 9 [label="Enter block"]; + 10 [label="Access variable R|/p0|"]; + 11 [label="Access variable R|kotlin/String.length|"]; + 12 [label="Assignment: R|/B.p1|"]; + 13 [label="Const: String()"]; + 14 [label="Assignment: R|/B.p3|"]; + 15 [label="Exit block"]; } - 19 [label="Exit init block" style="filled" fillcolor=red]; + 16 [label="Exit init block" style="filled" fillcolor=red]; } - 20 [label="Exit class B" style="filled" fillcolor=red]; + 17 [label="Exit class B" style="filled" fillcolor=red]; } subgraph cluster_5 { color=blue - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Access variable R|/p0|"]; - 23 [label="Delegated constructor call: this(...)" style="filled" fillcolor=yellow]; + 18 [label="Enter function " style="filled" fillcolor=red]; + 19 [label="Access variable R|/p0|"]; + 20 [label="Delegated constructor call: this(...)" style="filled" fillcolor=yellow]; subgraph cluster_6 { color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/p1|"]; - 26 [label="Assignment: R|/B.p3|"]; - 27 [label="Exit block"]; + 21 [label="Enter block"]; + 22 [label="Access variable R|/p1|"]; + 23 [label="Assignment: R|/B.p3|"]; + 24 [label="Exit block"]; } - 28 [label="Exit function " style="filled" fillcolor=red]; + 25 [label="Exit function " style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 29 [label="Enter function " style="filled" fillcolor=red]; - 30 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 31 [label="Exit function " style="filled" fillcolor=red]; + 26 [label="Enter function " style="filled" fillcolor=red]; + 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 28 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {5} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {17} [style=dotted]; + 0 -> {1 4 8} [style=dashed]; + 1 -> {2}; 2 -> {3}; - 3 -> {4}; - 4 -> {5} [color=green]; - 5 -> {6} [color=green]; - 5 -> {10} [style=dotted]; - 5 -> {6} [style=dashed]; + 3 -> {4} [color=green]; + 4 -> {5}; + 5 -> {6}; 6 -> {7}; - 7 -> {8}; + 7 -> {8} [color=green]; 8 -> {9}; - 9 -> {10} [color=green]; - 10 -> {11} [color=green]; - 10 -> {20} [style=dotted]; - 10 -> {11} [style=dashed]; + 9 -> {10}; + 10 -> {11}; 11 -> {12}; 12 -> {13}; 13 -> {14}; 14 -> {15}; 15 -> {16}; - 16 -> {17}; - 17 -> {18}; + 16 -> {17} [color=green]; + 17 -> {18 26} [color=green]; + 17 -> {18 26} [style=dashed]; 18 -> {19}; - 19 -> {20} [color=green]; - 20 -> {21 29} [color=green]; - 20 -> {21 29} [style=dashed]; + 19 -> {20}; + 20 -> {21}; 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; 26 -> {27}; 27 -> {28}; - 29 -> {30}; - 30 -> {31}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot index 6d8ac3c236d..4aa96c7e1dd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot @@ -339,86 +339,85 @@ digraph boundSmartcasts_kt { subgraph cluster_27 { color=red 125 [label="Enter class D" style="filled" fillcolor=red]; - 126 [label="Part of class initialization"]; subgraph cluster_28 { color=blue - 127 [label="Enter property" style="filled" fillcolor=red]; - 128 [label="Access variable R|/any|"]; - 129 [label="Exit property" style="filled" fillcolor=red]; + 126 [label="Enter property" style="filled" fillcolor=red]; + 127 [label="Access variable R|/any|"]; + 128 [label="Exit property" style="filled" fillcolor=red]; } - 130 [label="Exit class D" style="filled" fillcolor=red]; + 129 [label="Exit class D" style="filled" fillcolor=red]; } subgraph cluster_29 { color=blue - 131 [label="Enter function " style="filled" fillcolor=red]; - 132 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 133 [label="Exit function " style="filled" fillcolor=red]; + 130 [label="Enter function " style="filled" fillcolor=red]; + 131 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 132 [label="Exit function " style="filled" fillcolor=red]; } 125 -> {126} [color=green]; - 126 -> {127} [color=green]; - 126 -> {130} [style=dotted]; - 126 -> {127} [style=dashed]; + 125 -> {129} [style=dotted]; + 125 -> {126} [style=dashed]; + 126 -> {127}; 127 -> {128}; - 128 -> {129}; + 128 -> {129} [color=green]; 129 -> {130} [color=green]; - 130 -> {131} [color=green]; - 130 -> {131} [style=dashed]; + 129 -> {130} [style=dashed]; + 130 -> {131}; 131 -> {132}; - 132 -> {133}; subgraph cluster_30 { color=red - 134 [label="Enter function baz" style="filled" fillcolor=red]; + 133 [label="Enter function baz" style="filled" fillcolor=red]; subgraph cluster_31 { color=blue - 135 [label="Enter block"]; - 136 [label="Exit block"]; + 134 [label="Enter block"]; + 135 [label="Exit block"]; } - 137 [label="Exit function baz" style="filled" fillcolor=red]; + 136 [label="Exit function baz" style="filled" fillcolor=red]; } + 133 -> {134}; 134 -> {135}; 135 -> {136}; - 136 -> {137}; subgraph cluster_32 { color=red - 138 [label="Enter function test_5" style="filled" fillcolor=red]; + 137 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_33 { color=blue - 139 [label="Enter block"]; - 140 [label="Access variable R|/d|"]; - 141 [label="Access variable R|/D.any|"]; - 142 [label="Exit lhs of ?:"]; - 143 [label="Enter rhs of ?:"]; - 144 [label="Jump: ^test_5 Unit"]; - 145 [label="Stub" style="filled" fillcolor=gray]; - 146 [label="Lhs of ?: is not null"]; - 147 [label="Exit ?:"]; - 148 [label="Variable declaration: lval a: R|kotlin/Any|"]; - 149 [label="Access variable R|/a|"]; - 150 [label="Function call: R|/a|.R|/baz|()" style="filled" fillcolor=yellow]; - 151 [label="Access variable R|/d|"]; - 152 [label="Access variable R|/D.any|"]; - 153 [label="Smart cast: R|/d|.R|/D.any|"]; - 154 [label="Function call: R|/d|.R|/D.any|.R|/baz|()" style="filled" fillcolor=yellow]; - 155 [label="Access variable R|/a|"]; - 156 [label="Type operator: (R|/a| as R|A|)"]; - 157 [label="Access variable R|/a|"]; - 158 [label="Smart cast: R|/a|"]; - 159 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 160 [label="Exit block"]; + 138 [label="Enter block"]; + 139 [label="Access variable R|/d|"]; + 140 [label="Access variable R|/D.any|"]; + 141 [label="Exit lhs of ?:"]; + 142 [label="Enter rhs of ?:"]; + 143 [label="Jump: ^test_5 Unit"]; + 144 [label="Stub" style="filled" fillcolor=gray]; + 145 [label="Lhs of ?: is not null"]; + 146 [label="Exit ?:"]; + 147 [label="Variable declaration: lval a: R|kotlin/Any|"]; + 148 [label="Access variable R|/a|"]; + 149 [label="Function call: R|/a|.R|/baz|()" style="filled" fillcolor=yellow]; + 150 [label="Access variable R|/d|"]; + 151 [label="Access variable R|/D.any|"]; + 152 [label="Smart cast: R|/d|.R|/D.any|"]; + 153 [label="Function call: R|/d|.R|/D.any|.R|/baz|()" style="filled" fillcolor=yellow]; + 154 [label="Access variable R|/a|"]; + 155 [label="Type operator: (R|/a| as R|A|)"]; + 156 [label="Access variable R|/a|"]; + 157 [label="Smart cast: R|/a|"]; + 158 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 159 [label="Exit block"]; } - 161 [label="Exit function test_5" style="filled" fillcolor=red]; + 160 [label="Exit function test_5" style="filled" fillcolor=red]; } + 137 -> {138}; 138 -> {139}; 139 -> {140}; 140 -> {141}; - 141 -> {142}; - 142 -> {143 146}; - 143 -> {144}; - 144 -> {161}; - 144 -> {145} [style=dotted]; - 145 -> {147} [style=dotted]; + 141 -> {142 145}; + 142 -> {143}; + 143 -> {160}; + 143 -> {144} [style=dotted]; + 144 -> {146} [style=dotted]; + 145 -> {146}; 146 -> {147}; 147 -> {148}; 148 -> {149}; @@ -433,34 +432,34 @@ digraph boundSmartcasts_kt { 157 -> {158}; 158 -> {159}; 159 -> {160}; - 160 -> {161}; subgraph cluster_34 { color=red - 162 [label="Enter function test_6" style="filled" fillcolor=red]; + 161 [label="Enter function test_6" style="filled" fillcolor=red]; subgraph cluster_35 { color=blue - 163 [label="Enter block"]; - 164 [label="Access variable R|/d1|"]; - 165 [label="Access variable R|/D.any|"]; - 166 [label="Variable declaration: lval a: R|kotlin/Any?|"]; - 167 [label="Access variable R|/a|"]; - 168 [label="Type operator: (R|/a| as R|A|)"]; - 169 [label="Access variable R|/a|"]; - 170 [label="Smart cast: R|/a|"]; - 171 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 172 [label="Access variable R|/d1|"]; - 173 [label="Access variable R|/D.any|"]; - 174 [label="Smart cast: R|/d1|.R|/D.any|"]; - 175 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 176 [label="Access variable R|/d1|"]; - 177 [label="Access variable R|/D.any|"]; - 178 [label="Smart cast: R|/d1|.R|/D.any|"]; - 179 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()" style="filled" fillcolor=yellow]; - 180 [label="Exit block"]; + 162 [label="Enter block"]; + 163 [label="Access variable R|/d1|"]; + 164 [label="Access variable R|/D.any|"]; + 165 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 166 [label="Access variable R|/a|"]; + 167 [label="Type operator: (R|/a| as R|A|)"]; + 168 [label="Access variable R|/a|"]; + 169 [label="Smart cast: R|/a|"]; + 170 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 171 [label="Access variable R|/d1|"]; + 172 [label="Access variable R|/D.any|"]; + 173 [label="Smart cast: R|/d1|.R|/D.any|"]; + 174 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 175 [label="Access variable R|/d1|"]; + 176 [label="Access variable R|/D.any|"]; + 177 [label="Smart cast: R|/d1|.R|/D.any|"]; + 178 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()" style="filled" fillcolor=yellow]; + 179 [label="Exit block"]; } - 181 [label="Exit function test_6" style="filled" fillcolor=red]; + 180 [label="Exit function test_6" style="filled" fillcolor=red]; } + 161 -> {162}; 162 -> {163}; 163 -> {164}; 164 -> {165}; @@ -479,46 +478,46 @@ digraph boundSmartcasts_kt { 177 -> {178}; 178 -> {179}; 179 -> {180}; - 180 -> {181}; subgraph cluster_36 { color=red - 182 [label="Enter function test_7" style="filled" fillcolor=red]; + 181 [label="Enter function test_7" style="filled" fillcolor=red]; subgraph cluster_37 { color=blue - 183 [label="Enter block"]; - 184 [label="Access variable R|/d1|"]; - 185 [label="Enter safe call"]; - 186 [label="Access variable R|/D.any|"]; - 187 [label="Exit safe call"]; - 188 [label="Variable declaration: lval a: R|kotlin/Any?|"]; - 189 [label="Access variable R|/d2|"]; - 190 [label="Enter safe call"]; - 191 [label="Access variable R|/D.any|"]; - 192 [label="Exit safe call"]; - 193 [label="Variable declaration: lval b: R|kotlin/Any?|"]; - 194 [label="Access variable R|/a|"]; - 195 [label="Type operator: (R|/a| as R|A|)"]; - 196 [label="Access variable R|/a|"]; - 197 [label="Smart cast: R|/a|"]; - 198 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 199 [label="Access variable R|/b|"]; - 200 [label="Type operator: (R|/b| as R|B|)"]; - 201 [label="Access variable R|/b|"]; - 202 [label="Smart cast: R|/b|"]; - 203 [label="Function call: R|/b|.R|/B.bar|()" style="filled" fillcolor=yellow]; - 204 [label="Exit block"]; + 182 [label="Enter block"]; + 183 [label="Access variable R|/d1|"]; + 184 [label="Enter safe call"]; + 185 [label="Access variable R|/D.any|"]; + 186 [label="Exit safe call"]; + 187 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 188 [label="Access variable R|/d2|"]; + 189 [label="Enter safe call"]; + 190 [label="Access variable R|/D.any|"]; + 191 [label="Exit safe call"]; + 192 [label="Variable declaration: lval b: R|kotlin/Any?|"]; + 193 [label="Access variable R|/a|"]; + 194 [label="Type operator: (R|/a| as R|A|)"]; + 195 [label="Access variable R|/a|"]; + 196 [label="Smart cast: R|/a|"]; + 197 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 198 [label="Access variable R|/b|"]; + 199 [label="Type operator: (R|/b| as R|B|)"]; + 200 [label="Access variable R|/b|"]; + 201 [label="Smart cast: R|/b|"]; + 202 [label="Function call: R|/b|.R|/B.bar|()" style="filled" fillcolor=yellow]; + 203 [label="Exit block"]; } - 205 [label="Exit function test_7" style="filled" fillcolor=red]; + 204 [label="Exit function test_7" style="filled" fillcolor=red]; } + 181 -> {182}; 182 -> {183}; - 183 -> {184}; - 184 -> {185 187}; + 183 -> {184 186}; + 184 -> {185}; 185 -> {186}; 186 -> {187}; 187 -> {188}; - 188 -> {189}; - 189 -> {190 192}; + 188 -> {189 191}; + 189 -> {190}; 190 -> {191}; 191 -> {192}; 192 -> {193}; @@ -533,6 +532,5 @@ digraph boundSmartcasts_kt { 201 -> {202}; 202 -> {203}; 203 -> {204}; - 204 -> {205}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot index 5630fb4c58a..448502da12d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot @@ -6,106 +6,105 @@ digraph boundSmartcastsInBranches_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Const: String()"]; - 4 [label="Exit property" style="filled" fillcolor=red]; + 1 [label="Enter property" style="filled" fillcolor=red]; + 2 [label="Const: String()"]; + 3 [label="Exit property" style="filled" fillcolor=red]; } - 5 [label="Exit class A" style="filled" fillcolor=red]; + 4 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_2 { color=blue - 6 [label="Enter function " style="filled" fillcolor=red]; - 7 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 8 [label="Exit function " style="filled" fillcolor=red]; + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 7 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {5} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {4} [style=dotted]; + 0 -> {1} [style=dashed]; + 1 -> {2}; 2 -> {3}; - 3 -> {4}; + 3 -> {4} [color=green]; 4 -> {5} [color=green]; - 5 -> {6} [color=green]; - 5 -> {6} [style=dashed]; + 4 -> {5} [style=dashed]; + 5 -> {6}; 6 -> {7}; - 7 -> {8}; subgraph cluster_3 { color=red - 9 [label="Enter function test_0" style="filled" fillcolor=red]; + 8 [label="Enter function test_0" style="filled" fillcolor=red]; subgraph cluster_4 { color=blue - 10 [label="Enter block"]; - 11 [label="Const: Null(null)"]; - 12 [label="Variable declaration: lvar goodA: R|A?|"]; + 9 [label="Enter block"]; + 10 [label="Const: Null(null)"]; + 11 [label="Variable declaration: lvar goodA: R|A?|"]; subgraph cluster_5 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/list|"]; - 15 [label="Function call: R|/list|.R|SubstitutionOverride|>|()" style="filled" fillcolor=yellow]; - 16 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; + 12 [label="Enter block"]; + 13 [label="Access variable R|/list|"]; + 14 [label="Function call: R|/list|.R|SubstitutionOverride|>|()" style="filled" fillcolor=yellow]; + 15 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; subgraph cluster_6 { color=blue - 17 [label="Enter while loop"]; + 16 [label="Enter while loop"]; subgraph cluster_7 { color=blue - 18 [label="Enter loop condition"]; - 19 [label="Access variable R|/|"]; - 20 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 21 [label="Exit loop condition"]; + 17 [label="Enter loop condition"]; + 18 [label="Access variable R|/|"]; + 19 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 20 [label="Exit loop condition"]; } subgraph cluster_8 { color=blue - 22 [label="Enter loop block"]; + 21 [label="Enter loop block"]; subgraph cluster_9 { color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/|"]; - 25 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 26 [label="Variable declaration: lval a: R|A|"]; + 22 [label="Enter block"]; + 23 [label="Access variable R|/|"]; + 24 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 25 [label="Variable declaration: lval a: R|A|"]; subgraph cluster_10 { color=blue - 27 [label="Enter when"]; + 26 [label="Enter when"]; subgraph cluster_11 { color=blue - 28 [label="Enter when branch condition "]; - 29 [label="Access variable R|/goodA|"]; - 30 [label="Const: Null(null)"]; - 31 [label="Equality operator =="]; - 32 [label="Exit when branch condition"]; + 27 [label="Enter when branch condition "]; + 28 [label="Access variable R|/goodA|"]; + 29 [label="Const: Null(null)"]; + 30 [label="Equality operator =="]; + 31 [label="Exit when branch condition"]; } - 33 [label="Synthetic else branch"]; - 34 [label="Enter when branch result"]; + 32 [label="Synthetic else branch"]; + 33 [label="Enter when branch result"]; subgraph cluster_12 { color=blue - 35 [label="Enter block"]; - 36 [label="Access variable R|/a|"]; - 37 [label="Assignment: R|/goodA|"]; - 38 [label="Jump: continue@@@[R|/|.R|SubstitutionOverride|()] "]; - 39 [label="Stub" style="filled" fillcolor=gray]; - 40 [label="Exit block" style="filled" fillcolor=gray]; + 34 [label="Enter block"]; + 35 [label="Access variable R|/a|"]; + 36 [label="Assignment: R|/goodA|"]; + 37 [label="Jump: continue@@@[R|/|.R|SubstitutionOverride|()] "]; + 38 [label="Stub" style="filled" fillcolor=gray]; + 39 [label="Exit block" style="filled" fillcolor=gray]; } - 41 [label="Exit when branch result" style="filled" fillcolor=gray]; - 42 [label="Exit when"]; + 40 [label="Exit when branch result" style="filled" fillcolor=gray]; + 41 [label="Exit when"]; } - 43 [label="Access variable R|/goodA|"]; - 44 [label="Smart cast: R|/goodA|"]; - 45 [label="Access variable R|/A.s|"]; - 46 [label="Exit block"]; + 42 [label="Access variable R|/goodA|"]; + 43 [label="Smart cast: R|/goodA|"]; + 44 [label="Access variable R|/A.s|"]; + 45 [label="Exit block"]; } - 47 [label="Exit loop block"]; + 46 [label="Exit loop block"]; } - 48 [label="Exit whileloop"]; + 47 [label="Exit whileloop"]; } - 49 [label="Exit block"]; + 48 [label="Exit block"]; } - 50 [label="Exit block"]; + 49 [label="Exit block"]; } - 51 [label="Exit function test_0" style="filled" fillcolor=red]; + 50 [label="Exit function test_0" style="filled" fillcolor=red]; } + 8 -> {9}; 9 -> {10}; 10 -> {11}; 11 -> {12}; @@ -117,8 +116,8 @@ digraph boundSmartcastsInBranches_kt { 17 -> {18}; 18 -> {19}; 19 -> {20}; - 20 -> {21}; - 21 -> {22 48}; + 20 -> {21 47}; + 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; @@ -128,91 +127,91 @@ digraph boundSmartcastsInBranches_kt { 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33 34}; - 33 -> {42}; + 31 -> {32 33}; + 32 -> {41}; + 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; - 37 -> {38}; - 38 -> {18} [color=green style=dashed]; + 37 -> {17} [color=green style=dashed]; + 37 -> {38} [style=dotted]; 38 -> {39} [style=dotted]; 39 -> {40} [style=dotted]; 40 -> {41} [style=dotted]; - 41 -> {42} [style=dotted]; + 41 -> {42}; 42 -> {43}; 43 -> {44}; 44 -> {45}; 45 -> {46}; - 46 -> {47}; - 47 -> {18} [color=green style=dashed]; + 46 -> {17} [color=green style=dashed]; + 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51}; subgraph cluster_13 { color=red - 52 [label="Enter function test_1" style="filled" fillcolor=red]; + 51 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_14 { color=blue - 53 [label="Enter block"]; - 54 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 52 [label="Enter block"]; + 53 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_15 { color=blue - 55 [label="Enter when"]; + 54 [label="Enter when"]; subgraph cluster_16 { color=blue - 56 [label="Enter when branch condition "]; - 57 [label="Access variable R|/b|"]; - 58 [label="Exit when branch condition"]; + 55 [label="Enter when branch condition "]; + 56 [label="Access variable R|/b|"]; + 57 [label="Exit when branch condition"]; } subgraph cluster_17 { color=blue - 59 [label="Enter when branch condition else"]; - 60 [label="Exit when branch condition"]; + 58 [label="Enter when branch condition else"]; + 59 [label="Exit when branch condition"]; } - 61 [label="Enter when branch result"]; + 60 [label="Enter when branch result"]; subgraph cluster_18 { color=blue - 62 [label="Enter block"]; - 63 [label="Access variable R|/a|"]; - 64 [label="Assignment: R|/x|"]; - 65 [label="Exit block"]; + 61 [label="Enter block"]; + 62 [label="Access variable R|/a|"]; + 63 [label="Assignment: R|/x|"]; + 64 [label="Exit block"]; } - 66 [label="Exit when branch result"]; - 67 [label="Enter when branch result"]; + 65 [label="Exit when branch result"]; + 66 [label="Enter when branch result"]; subgraph cluster_19 { color=blue - 68 [label="Enter block"]; - 69 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; - 70 [label="Assignment: R|/x|"]; - 71 [label="Exit block"]; + 67 [label="Enter block"]; + 68 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; + 69 [label="Assignment: R|/x|"]; + 70 [label="Exit block"]; } - 72 [label="Exit when branch result"]; - 73 [label="Exit when"]; + 71 [label="Exit when branch result"]; + 72 [label="Exit when"]; } - 74 [label="Access variable R|/x|"]; - 75 [label="Smart cast: R|/x|"]; - 76 [label="Access variable R|/A.s|"]; - 77 [label="Exit block"]; + 73 [label="Access variable R|/x|"]; + 74 [label="Smart cast: R|/x|"]; + 75 [label="Access variable R|/A.s|"]; + 76 [label="Exit block"]; } - 78 [label="Exit function test_1" style="filled" fillcolor=red]; + 77 [label="Exit function test_1" style="filled" fillcolor=red]; } + 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; 55 -> {56}; 56 -> {57}; - 57 -> {58}; - 58 -> {59 67}; + 57 -> {58 66}; + 58 -> {59}; 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; - 65 -> {66}; - 66 -> {73}; + 65 -> {72}; + 66 -> {67}; 67 -> {68}; 68 -> {69}; 69 -> {70}; @@ -223,65 +222,65 @@ digraph boundSmartcastsInBranches_kt { 74 -> {75}; 75 -> {76}; 76 -> {77}; - 77 -> {78}; subgraph cluster_20 { color=red - 79 [label="Enter function test_2" style="filled" fillcolor=red]; + 78 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 80 [label="Enter block"]; - 81 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 79 [label="Enter block"]; + 80 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_22 { color=blue - 82 [label="Enter when"]; + 81 [label="Enter when"]; subgraph cluster_23 { color=blue - 83 [label="Enter when branch condition "]; - 84 [label="Access variable R|/b|"]; - 85 [label="Exit when branch condition"]; + 82 [label="Enter when branch condition "]; + 83 [label="Access variable R|/b|"]; + 84 [label="Exit when branch condition"]; } subgraph cluster_24 { color=blue - 86 [label="Enter when branch condition else"]; - 87 [label="Exit when branch condition"]; + 85 [label="Enter when branch condition else"]; + 86 [label="Exit when branch condition"]; } - 88 [label="Enter when branch result"]; + 87 [label="Enter when branch result"]; subgraph cluster_25 { color=blue - 89 [label="Enter block"]; - 90 [label="Access variable R|/a|"]; - 91 [label="Assignment: R|/x|"]; - 92 [label="Access variable R|/a|"]; - 93 [label="Type operator: (R|/a| as R|A|)"]; - 94 [label="Exit block"]; + 88 [label="Enter block"]; + 89 [label="Access variable R|/a|"]; + 90 [label="Assignment: R|/x|"]; + 91 [label="Access variable R|/a|"]; + 92 [label="Type operator: (R|/a| as R|A|)"]; + 93 [label="Exit block"]; } - 95 [label="Exit when branch result"]; - 96 [label="Enter when branch result"]; + 94 [label="Exit when branch result"]; + 95 [label="Enter when branch result"]; subgraph cluster_26 { color=blue - 97 [label="Enter block"]; - 98 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; - 99 [label="Assignment: R|/x|"]; - 100 [label="Exit block"]; + 96 [label="Enter block"]; + 97 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; + 98 [label="Assignment: R|/x|"]; + 99 [label="Exit block"]; } - 101 [label="Exit when branch result"]; - 102 [label="Exit when"]; + 100 [label="Exit when branch result"]; + 101 [label="Exit when"]; } - 103 [label="Access variable R|/x|"]; - 104 [label="Smart cast: R|/x|"]; - 105 [label="Access variable R|/A.s|"]; - 106 [label="Exit block"]; + 102 [label="Access variable R|/x|"]; + 103 [label="Smart cast: R|/x|"]; + 104 [label="Access variable R|/A.s|"]; + 105 [label="Exit block"]; } - 107 [label="Exit function test_2" style="filled" fillcolor=red]; + 106 [label="Exit function test_2" style="filled" fillcolor=red]; } + 78 -> {79}; 79 -> {80}; 80 -> {81}; 81 -> {82}; 82 -> {83}; 83 -> {84}; - 84 -> {85}; - 85 -> {86 96}; + 84 -> {85 95}; + 85 -> {86}; 86 -> {87}; 87 -> {88}; 88 -> {89}; @@ -290,8 +289,8 @@ digraph boundSmartcastsInBranches_kt { 91 -> {92}; 92 -> {93}; 93 -> {94}; - 94 -> {95}; - 95 -> {102}; + 94 -> {101}; + 95 -> {96}; 96 -> {97}; 97 -> {98}; 98 -> {99}; @@ -302,66 +301,66 @@ digraph boundSmartcastsInBranches_kt { 103 -> {104}; 104 -> {105}; 105 -> {106}; - 106 -> {107}; subgraph cluster_27 { color=red - 108 [label="Enter function test_3" style="filled" fillcolor=red]; + 107 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_28 { color=blue - 109 [label="Enter block"]; - 110 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 108 [label="Enter block"]; + 109 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_29 { color=blue - 111 [label="Enter when"]; + 110 [label="Enter when"]; subgraph cluster_30 { color=blue - 112 [label="Enter when branch condition "]; - 113 [label="Access variable R|/b|"]; - 114 [label="Exit when branch condition"]; + 111 [label="Enter when branch condition "]; + 112 [label="Access variable R|/b|"]; + 113 [label="Exit when branch condition"]; } subgraph cluster_31 { color=blue - 115 [label="Enter when branch condition else"]; - 116 [label="Exit when branch condition"]; + 114 [label="Enter when branch condition else"]; + 115 [label="Exit when branch condition"]; } - 117 [label="Enter when branch result"]; + 116 [label="Enter when branch result"]; subgraph cluster_32 { color=blue - 118 [label="Enter block"]; - 119 [label="Access variable R|/a|"]; - 120 [label="Type operator: (R|/a| as R|A|)"]; - 121 [label="Access variable R|/a|"]; - 122 [label="Smart cast: R|/a|"]; - 123 [label="Assignment: R|/x|"]; - 124 [label="Exit block"]; + 117 [label="Enter block"]; + 118 [label="Access variable R|/a|"]; + 119 [label="Type operator: (R|/a| as R|A|)"]; + 120 [label="Access variable R|/a|"]; + 121 [label="Smart cast: R|/a|"]; + 122 [label="Assignment: R|/x|"]; + 123 [label="Exit block"]; } - 125 [label="Exit when branch result"]; - 126 [label="Enter when branch result"]; + 124 [label="Exit when branch result"]; + 125 [label="Enter when branch result"]; subgraph cluster_33 { color=blue - 127 [label="Enter block"]; - 128 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; - 129 [label="Assignment: R|/x|"]; - 130 [label="Exit block"]; + 126 [label="Enter block"]; + 127 [label="Function call: R|/A.A|()" style="filled" fillcolor=yellow]; + 128 [label="Assignment: R|/x|"]; + 129 [label="Exit block"]; } - 131 [label="Exit when branch result"]; - 132 [label="Exit when"]; + 130 [label="Exit when branch result"]; + 131 [label="Exit when"]; } - 133 [label="Access variable R|/x|"]; - 134 [label="Smart cast: R|/x|"]; - 135 [label="Access variable R|/A.s|"]; - 136 [label="Exit block"]; + 132 [label="Access variable R|/x|"]; + 133 [label="Smart cast: R|/x|"]; + 134 [label="Access variable R|/A.s|"]; + 135 [label="Exit block"]; } - 137 [label="Exit function test_3" style="filled" fillcolor=red]; + 136 [label="Exit function test_3" style="filled" fillcolor=red]; } + 107 -> {108}; 108 -> {109}; 109 -> {110}; 110 -> {111}; 111 -> {112}; 112 -> {113}; - 113 -> {114}; - 114 -> {115 126}; + 113 -> {114 125}; + 114 -> {115}; 115 -> {116}; 116 -> {117}; 117 -> {118}; @@ -371,8 +370,8 @@ digraph boundSmartcastsInBranches_kt { 121 -> {122}; 122 -> {123}; 123 -> {124}; - 124 -> {125}; - 125 -> {132}; + 124 -> {131}; + 125 -> {126}; 126 -> {127}; 127 -> {128}; 128 -> {129}; @@ -383,76 +382,76 @@ digraph boundSmartcastsInBranches_kt { 133 -> {134}; 134 -> {135}; 135 -> {136}; - 136 -> {137}; subgraph cluster_34 { color=red - 138 [label="Enter function test_4" style="filled" fillcolor=red]; + 137 [label="Enter function test_4" style="filled" fillcolor=red]; subgraph cluster_35 { color=blue - 139 [label="Enter block"]; - 140 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 138 [label="Enter block"]; + 139 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_36 { color=blue - 141 [label="Enter when"]; + 140 [label="Enter when"]; subgraph cluster_37 { color=blue - 142 [label="Enter when branch condition "]; - 143 [label="Access variable R|/b|"]; - 144 [label="Exit when branch condition"]; + 141 [label="Enter when branch condition "]; + 142 [label="Access variable R|/b|"]; + 143 [label="Exit when branch condition"]; } subgraph cluster_38 { color=blue - 145 [label="Enter when branch condition else"]; - 146 [label="Exit when branch condition"]; + 144 [label="Enter when branch condition else"]; + 145 [label="Exit when branch condition"]; } - 147 [label="Enter when branch result"]; + 146 [label="Enter when branch result"]; subgraph cluster_39 { color=blue - 148 [label="Enter block"]; - 149 [label="Access variable R|/a|"]; - 150 [label="Assignment: R|/x|"]; - 151 [label="Exit block"]; + 147 [label="Enter block"]; + 148 [label="Access variable R|/a|"]; + 149 [label="Assignment: R|/x|"]; + 150 [label="Exit block"]; } - 152 [label="Exit when branch result"]; - 153 [label="Enter when branch result"]; + 151 [label="Exit when branch result"]; + 152 [label="Enter when branch result"]; subgraph cluster_40 { color=blue - 154 [label="Enter block"]; - 155 [label="Access variable R|/a|"]; - 156 [label="Assignment: R|/x|"]; - 157 [label="Exit block"]; + 153 [label="Enter block"]; + 154 [label="Access variable R|/a|"]; + 155 [label="Assignment: R|/x|"]; + 156 [label="Exit block"]; } - 158 [label="Exit when branch result"]; - 159 [label="Exit when"]; + 157 [label="Exit when branch result"]; + 158 [label="Exit when"]; } - 160 [label="Access variable R|/x|"]; - 161 [label="Type operator: (R|/x| as R|A|)"]; - 162 [label="Access variable R|/x|"]; - 163 [label="Smart cast: R|/x|"]; - 164 [label="Access variable R|/A.s|"]; - 165 [label="Access variable R|/a|"]; - 166 [label="Smart cast: R|/a|"]; - 167 [label="Access variable R|/A.s|"]; - 168 [label="Exit block"]; + 159 [label="Access variable R|/x|"]; + 160 [label="Type operator: (R|/x| as R|A|)"]; + 161 [label="Access variable R|/x|"]; + 162 [label="Smart cast: R|/x|"]; + 163 [label="Access variable R|/A.s|"]; + 164 [label="Access variable R|/a|"]; + 165 [label="Smart cast: R|/a|"]; + 166 [label="Access variable R|/A.s|"]; + 167 [label="Exit block"]; } - 169 [label="Exit function test_4" style="filled" fillcolor=red]; + 168 [label="Exit function test_4" style="filled" fillcolor=red]; } + 137 -> {138}; 138 -> {139}; 139 -> {140}; 140 -> {141}; 141 -> {142}; 142 -> {143}; - 143 -> {144}; - 144 -> {145 153}; + 143 -> {144 152}; + 144 -> {145}; 145 -> {146}; 146 -> {147}; 147 -> {148}; 148 -> {149}; 149 -> {150}; 150 -> {151}; - 151 -> {152}; - 152 -> {159}; + 151 -> {158}; + 152 -> {153}; 153 -> {154}; 154 -> {155}; 155 -> {156}; @@ -468,76 +467,76 @@ digraph boundSmartcastsInBranches_kt { 165 -> {166}; 166 -> {167}; 167 -> {168}; - 168 -> {169}; subgraph cluster_41 { color=red - 170 [label="Enter function test_5" style="filled" fillcolor=red]; + 169 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_42 { color=blue - 171 [label="Enter block"]; - 172 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 170 [label="Enter block"]; + 171 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_43 { color=blue - 173 [label="Enter when"]; + 172 [label="Enter when"]; subgraph cluster_44 { color=blue - 174 [label="Enter when branch condition "]; - 175 [label="Access variable R|/b|"]; - 176 [label="Exit when branch condition"]; + 173 [label="Enter when branch condition "]; + 174 [label="Access variable R|/b|"]; + 175 [label="Exit when branch condition"]; } subgraph cluster_45 { color=blue - 177 [label="Enter when branch condition else"]; - 178 [label="Exit when branch condition"]; + 176 [label="Enter when branch condition else"]; + 177 [label="Exit when branch condition"]; } - 179 [label="Enter when branch result"]; + 178 [label="Enter when branch result"]; subgraph cluster_46 { color=blue - 180 [label="Enter block"]; - 181 [label="Access variable R|/a|"]; - 182 [label="Assignment: R|/x|"]; - 183 [label="Exit block"]; + 179 [label="Enter block"]; + 180 [label="Access variable R|/a|"]; + 181 [label="Assignment: R|/x|"]; + 182 [label="Exit block"]; } - 184 [label="Exit when branch result"]; - 185 [label="Enter when branch result"]; + 183 [label="Exit when branch result"]; + 184 [label="Enter when branch result"]; subgraph cluster_47 { color=blue - 186 [label="Enter block"]; - 187 [label="Access variable R|/a|"]; - 188 [label="Assignment: R|/x|"]; - 189 [label="Exit block"]; + 185 [label="Enter block"]; + 186 [label="Access variable R|/a|"]; + 187 [label="Assignment: R|/x|"]; + 188 [label="Exit block"]; } - 190 [label="Exit when branch result"]; - 191 [label="Exit when"]; + 189 [label="Exit when branch result"]; + 190 [label="Exit when"]; } - 192 [label="Access variable R|/a|"]; - 193 [label="Type operator: (R|/a| as R|A|)"]; - 194 [label="Access variable R|/x|"]; - 195 [label="Smart cast: R|/x|"]; - 196 [label="Access variable R|/A.s|"]; - 197 [label="Access variable R|/a|"]; - 198 [label="Smart cast: R|/a|"]; - 199 [label="Access variable R|/A.s|"]; - 200 [label="Exit block"]; + 191 [label="Access variable R|/a|"]; + 192 [label="Type operator: (R|/a| as R|A|)"]; + 193 [label="Access variable R|/x|"]; + 194 [label="Smart cast: R|/x|"]; + 195 [label="Access variable R|/A.s|"]; + 196 [label="Access variable R|/a|"]; + 197 [label="Smart cast: R|/a|"]; + 198 [label="Access variable R|/A.s|"]; + 199 [label="Exit block"]; } - 201 [label="Exit function test_5" style="filled" fillcolor=red]; + 200 [label="Exit function test_5" style="filled" fillcolor=red]; } + 169 -> {170}; 170 -> {171}; 171 -> {172}; 172 -> {173}; 173 -> {174}; 174 -> {175}; - 175 -> {176}; - 176 -> {177 185}; + 175 -> {176 184}; + 176 -> {177}; 177 -> {178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; 181 -> {182}; 182 -> {183}; - 183 -> {184}; - 184 -> {191}; + 183 -> {190}; + 184 -> {185}; 185 -> {186}; 186 -> {187}; 187 -> {188}; @@ -553,24 +552,24 @@ digraph boundSmartcastsInBranches_kt { 197 -> {198}; 198 -> {199}; 199 -> {200}; - 200 -> {201}; subgraph cluster_48 { color=red - 202 [label="Enter function test_6" style="filled" fillcolor=red]; + 201 [label="Enter function test_6" style="filled" fillcolor=red]; subgraph cluster_49 { color=blue - 203 [label="Enter block"]; - 204 [label="Variable declaration: lval x: R|kotlin/Any|"]; - 205 [label="Access variable R|/a|"]; - 206 [label="Assignment: R|/x|"]; - 207 [label="Access variable R|/x|"]; - 208 [label="Smart cast: R|/x|"]; - 209 [label="Access variable R|/A.s|"]; - 210 [label="Exit block"]; + 202 [label="Enter block"]; + 203 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 204 [label="Access variable R|/a|"]; + 205 [label="Assignment: R|/x|"]; + 206 [label="Access variable R|/x|"]; + 207 [label="Smart cast: R|/x|"]; + 208 [label="Access variable R|/A.s|"]; + 209 [label="Exit block"]; } - 211 [label="Exit function test_6" style="filled" fillcolor=red]; + 210 [label="Exit function test_6" style="filled" fillcolor=red]; } + 201 -> {202}; 202 -> {203}; 203 -> {204}; 204 -> {205}; @@ -579,198 +578,198 @@ digraph boundSmartcastsInBranches_kt { 207 -> {208}; 208 -> {209}; 209 -> {210}; - 210 -> {211}; subgraph cluster_50 { color=red - 212 [label="Enter function test_7" style="filled" fillcolor=red]; + 211 [label="Enter function test_7" style="filled" fillcolor=red]; subgraph cluster_51 { color=blue - 213 [label="Enter block"]; - 214 [label="Const: Null(null)"]; - 215 [label="Variable declaration: lval z: R|kotlin/String?|"]; - 216 [label="Access variable R|/z|"]; - 217 [label="Variable declaration: lvar y: R|kotlin/String?|"]; - 218 [label="Access variable R|/y|"]; - 219 [label="Variable declaration: lval x: R|kotlin/String?|"]; + 212 [label="Enter block"]; + 213 [label="Const: Null(null)"]; + 214 [label="Variable declaration: lval z: R|kotlin/String?|"]; + 215 [label="Access variable R|/z|"]; + 216 [label="Variable declaration: lvar y: R|kotlin/String?|"]; + 217 [label="Access variable R|/y|"]; + 218 [label="Variable declaration: lval x: R|kotlin/String?|"]; subgraph cluster_52 { color=blue - 220 [label="Enter when"]; + 219 [label="Enter when"]; subgraph cluster_53 { color=blue - 221 [label="Enter when branch condition "]; - 222 [label="Access variable R|/x|"]; - 223 [label="Const: Null(null)"]; - 224 [label="Equality operator !="]; - 225 [label="Exit when branch condition"]; + 220 [label="Enter when branch condition "]; + 221 [label="Access variable R|/x|"]; + 222 [label="Const: Null(null)"]; + 223 [label="Equality operator !="]; + 224 [label="Exit when branch condition"]; } - 226 [label="Synthetic else branch"]; - 227 [label="Enter when branch result"]; + 225 [label="Synthetic else branch"]; + 226 [label="Enter when branch result"]; subgraph cluster_54 { color=blue - 228 [label="Enter block"]; - 229 [label="Access variable R|/x|"]; - 230 [label="Smart cast: R|/x|"]; - 231 [label="Access variable R|kotlin/String.length|"]; - 232 [label="Access variable R|/y|"]; - 233 [label="Access variable R|kotlin/String.length#|"]; - 234 [label="Access variable R|/z|"]; - 235 [label="Access variable R|kotlin/String.length#|"]; - 236 [label="Exit block"]; + 227 [label="Enter block"]; + 228 [label="Access variable R|/x|"]; + 229 [label="Smart cast: R|/x|"]; + 230 [label="Access variable R|kotlin/String.length|"]; + 231 [label="Access variable R|/y|"]; + 232 [label="Access variable R|kotlin/String.length#|"]; + 233 [label="Access variable R|/z|"]; + 234 [label="Access variable R|kotlin/String.length#|"]; + 235 [label="Exit block"]; } - 237 [label="Exit when branch result"]; - 238 [label="Exit when"]; + 236 [label="Exit when branch result"]; + 237 [label="Exit when"]; } subgraph cluster_55 { color=blue - 239 [label="Enter when"]; + 238 [label="Enter when"]; subgraph cluster_56 { color=blue - 240 [label="Enter when branch condition "]; - 241 [label="Access variable R|/y|"]; - 242 [label="Const: Null(null)"]; - 243 [label="Equality operator !="]; - 244 [label="Exit when branch condition"]; + 239 [label="Enter when branch condition "]; + 240 [label="Access variable R|/y|"]; + 241 [label="Const: Null(null)"]; + 242 [label="Equality operator !="]; + 243 [label="Exit when branch condition"]; } - 245 [label="Synthetic else branch"]; - 246 [label="Enter when branch result"]; + 244 [label="Synthetic else branch"]; + 245 [label="Enter when branch result"]; subgraph cluster_57 { color=blue - 247 [label="Enter block"]; - 248 [label="Access variable R|/x|"]; - 249 [label="Access variable R|kotlin/String.length#|"]; - 250 [label="Access variable R|/y|"]; - 251 [label="Smart cast: R|/y|"]; - 252 [label="Access variable R|kotlin/String.length|"]; - 253 [label="Access variable R|/z|"]; - 254 [label="Access variable R|kotlin/String.length#|"]; - 255 [label="Exit block"]; + 246 [label="Enter block"]; + 247 [label="Access variable R|/x|"]; + 248 [label="Access variable R|kotlin/String.length#|"]; + 249 [label="Access variable R|/y|"]; + 250 [label="Smart cast: R|/y|"]; + 251 [label="Access variable R|kotlin/String.length|"]; + 252 [label="Access variable R|/z|"]; + 253 [label="Access variable R|kotlin/String.length#|"]; + 254 [label="Exit block"]; } - 256 [label="Exit when branch result"]; - 257 [label="Exit when"]; + 255 [label="Exit when branch result"]; + 256 [label="Exit when"]; } subgraph cluster_58 { color=blue - 258 [label="Enter when"]; + 257 [label="Enter when"]; subgraph cluster_59 { color=blue - 259 [label="Enter when branch condition "]; - 260 [label="Access variable R|/z|"]; - 261 [label="Const: Null(null)"]; - 262 [label="Equality operator !="]; - 263 [label="Exit when branch condition"]; + 258 [label="Enter when branch condition "]; + 259 [label="Access variable R|/z|"]; + 260 [label="Const: Null(null)"]; + 261 [label="Equality operator !="]; + 262 [label="Exit when branch condition"]; } - 264 [label="Synthetic else branch"]; - 265 [label="Enter when branch result"]; + 263 [label="Synthetic else branch"]; + 264 [label="Enter when branch result"]; subgraph cluster_60 { color=blue - 266 [label="Enter block"]; - 267 [label="Access variable R|/x|"]; - 268 [label="Access variable R|kotlin/String.length#|"]; - 269 [label="Access variable R|/y|"]; - 270 [label="Access variable R|kotlin/String.length#|"]; - 271 [label="Access variable R|/z|"]; - 272 [label="Smart cast: R|/z|"]; - 273 [label="Access variable R|kotlin/String.length|"]; - 274 [label="Exit block"]; + 265 [label="Enter block"]; + 266 [label="Access variable R|/x|"]; + 267 [label="Access variable R|kotlin/String.length#|"]; + 268 [label="Access variable R|/y|"]; + 269 [label="Access variable R|kotlin/String.length#|"]; + 270 [label="Access variable R|/z|"]; + 271 [label="Smart cast: R|/z|"]; + 272 [label="Access variable R|kotlin/String.length|"]; + 273 [label="Exit block"]; } - 275 [label="Exit when branch result"]; - 276 [label="Exit when"]; + 274 [label="Exit when branch result"]; + 275 [label="Exit when"]; } - 277 [label="Const: Null(null)"]; - 278 [label="Assignment: R|/y|"]; + 276 [label="Const: Null(null)"]; + 277 [label="Assignment: R|/y|"]; subgraph cluster_61 { color=blue - 279 [label="Enter when"]; + 278 [label="Enter when"]; subgraph cluster_62 { color=blue - 280 [label="Enter when branch condition "]; - 281 [label="Access variable R|/x|"]; - 282 [label="Const: Null(null)"]; - 283 [label="Equality operator !="]; - 284 [label="Exit when branch condition"]; + 279 [label="Enter when branch condition "]; + 280 [label="Access variable R|/x|"]; + 281 [label="Const: Null(null)"]; + 282 [label="Equality operator !="]; + 283 [label="Exit when branch condition"]; } - 285 [label="Synthetic else branch"]; - 286 [label="Enter when branch result"]; + 284 [label="Synthetic else branch"]; + 285 [label="Enter when branch result"]; subgraph cluster_63 { color=blue - 287 [label="Enter block"]; - 288 [label="Access variable R|/x|"]; - 289 [label="Smart cast: R|/x|"]; - 290 [label="Access variable R|kotlin/String.length|"]; - 291 [label="Access variable R|/y|"]; - 292 [label="Smart cast: R|/y|"]; - 293 [label="Access variable R|kotlin/String.length#|"]; - 294 [label="Access variable R|/z|"]; - 295 [label="Access variable R|kotlin/String.length#|"]; - 296 [label="Exit block"]; + 286 [label="Enter block"]; + 287 [label="Access variable R|/x|"]; + 288 [label="Smart cast: R|/x|"]; + 289 [label="Access variable R|kotlin/String.length|"]; + 290 [label="Access variable R|/y|"]; + 291 [label="Smart cast: R|/y|"]; + 292 [label="Access variable R|kotlin/String.length#|"]; + 293 [label="Access variable R|/z|"]; + 294 [label="Access variable R|kotlin/String.length#|"]; + 295 [label="Exit block"]; } - 297 [label="Exit when branch result"]; - 298 [label="Exit when"]; + 296 [label="Exit when branch result"]; + 297 [label="Exit when"]; } subgraph cluster_64 { color=blue - 299 [label="Enter when"]; + 298 [label="Enter when"]; subgraph cluster_65 { color=blue - 300 [label="Enter when branch condition "]; - 301 [label="Access variable R|/y|"]; - 302 [label="Smart cast: R|/y|"]; - 303 [label="Const: Null(null)"]; - 304 [label="Equality operator !="]; - 305 [label="Exit when branch condition"]; + 299 [label="Enter when branch condition "]; + 300 [label="Access variable R|/y|"]; + 301 [label="Smart cast: R|/y|"]; + 302 [label="Const: Null(null)"]; + 303 [label="Equality operator !="]; + 304 [label="Exit when branch condition"]; } - 306 [label="Synthetic else branch"]; - 307 [label="Enter when branch result"]; + 305 [label="Synthetic else branch"]; + 306 [label="Enter when branch result"]; subgraph cluster_66 { color=blue - 308 [label="Enter block"]; - 309 [label="Access variable R|/x|"]; - 310 [label="Access variable R|kotlin/String.length#|"]; - 311 [label="Access variable R|/y|"]; - 312 [label="Smart cast: R|/y|"]; - 313 [label="Stub" style="filled" fillcolor=gray]; - 314 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; - 315 [label="Access variable R|/z|" style="filled" fillcolor=gray]; - 316 [label="Access variable R|kotlin/String.length#|" style="filled" fillcolor=gray]; - 317 [label="Exit block" style="filled" fillcolor=gray]; + 307 [label="Enter block"]; + 308 [label="Access variable R|/x|"]; + 309 [label="Access variable R|kotlin/String.length#|"]; + 310 [label="Access variable R|/y|"]; + 311 [label="Smart cast: R|/y|"]; + 312 [label="Stub" style="filled" fillcolor=gray]; + 313 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; + 314 [label="Access variable R|/z|" style="filled" fillcolor=gray]; + 315 [label="Access variable R|kotlin/String.length#|" style="filled" fillcolor=gray]; + 316 [label="Exit block" style="filled" fillcolor=gray]; } - 318 [label="Exit when branch result" style="filled" fillcolor=gray]; - 319 [label="Exit when"]; + 317 [label="Exit when branch result" style="filled" fillcolor=gray]; + 318 [label="Exit when"]; } subgraph cluster_67 { color=blue - 320 [label="Enter when"]; + 319 [label="Enter when"]; subgraph cluster_68 { color=blue - 321 [label="Enter when branch condition "]; - 322 [label="Access variable R|/z|"]; - 323 [label="Const: Null(null)"]; - 324 [label="Equality operator !="]; - 325 [label="Exit when branch condition"]; + 320 [label="Enter when branch condition "]; + 321 [label="Access variable R|/z|"]; + 322 [label="Const: Null(null)"]; + 323 [label="Equality operator !="]; + 324 [label="Exit when branch condition"]; } - 326 [label="Synthetic else branch"]; - 327 [label="Enter when branch result"]; + 325 [label="Synthetic else branch"]; + 326 [label="Enter when branch result"]; subgraph cluster_69 { color=blue - 328 [label="Enter block"]; - 329 [label="Access variable R|/x|"]; - 330 [label="Access variable R|kotlin/String.length#|"]; - 331 [label="Access variable R|/y|"]; - 332 [label="Smart cast: R|/y|"]; - 333 [label="Access variable R|kotlin/String.length#|"]; - 334 [label="Access variable R|/z|"]; - 335 [label="Smart cast: R|/z|"]; - 336 [label="Access variable R|kotlin/String.length|"]; - 337 [label="Exit block"]; + 327 [label="Enter block"]; + 328 [label="Access variable R|/x|"]; + 329 [label="Access variable R|kotlin/String.length#|"]; + 330 [label="Access variable R|/y|"]; + 331 [label="Smart cast: R|/y|"]; + 332 [label="Access variable R|kotlin/String.length#|"]; + 333 [label="Access variable R|/z|"]; + 334 [label="Smart cast: R|/z|"]; + 335 [label="Access variable R|kotlin/String.length|"]; + 336 [label="Exit block"]; } - 338 [label="Exit when branch result"]; - 339 [label="Exit when"]; + 337 [label="Exit when branch result"]; + 338 [label="Exit when"]; } - 340 [label="Exit block"]; + 339 [label="Exit block"]; } - 341 [label="Exit function test_7" style="filled" fillcolor=red]; + 340 [label="Exit function test_7" style="filled" fillcolor=red]; } + 211 -> {212}; 212 -> {213}; 213 -> {214}; 214 -> {215}; @@ -783,9 +782,9 @@ digraph boundSmartcastsInBranches_kt { 221 -> {222}; 222 -> {223}; 223 -> {224}; - 224 -> {225}; - 225 -> {226 227}; - 226 -> {238}; + 224 -> {225 226}; + 225 -> {237}; + 226 -> {227}; 227 -> {228}; 228 -> {229}; 229 -> {230}; @@ -802,9 +801,9 @@ digraph boundSmartcastsInBranches_kt { 240 -> {241}; 241 -> {242}; 242 -> {243}; - 243 -> {244}; - 244 -> {245 246}; - 245 -> {257}; + 243 -> {244 245}; + 244 -> {256}; + 245 -> {246}; 246 -> {247}; 247 -> {248}; 248 -> {249}; @@ -821,9 +820,9 @@ digraph boundSmartcastsInBranches_kt { 259 -> {260}; 260 -> {261}; 261 -> {262}; - 262 -> {263}; - 263 -> {264 265}; - 264 -> {276}; + 262 -> {263 264}; + 263 -> {275}; + 264 -> {265}; 265 -> {266}; 266 -> {267}; 267 -> {268}; @@ -842,9 +841,9 @@ digraph boundSmartcastsInBranches_kt { 280 -> {281}; 281 -> {282}; 282 -> {283}; - 283 -> {284}; - 284 -> {285 286}; - 285 -> {298}; + 283 -> {284 285}; + 284 -> {297}; + 285 -> {286}; 286 -> {287}; 287 -> {288}; 288 -> {289}; @@ -863,29 +862,29 @@ digraph boundSmartcastsInBranches_kt { 301 -> {302}; 302 -> {303}; 303 -> {304}; - 304 -> {305}; - 305 -> {306 307}; - 306 -> {319}; + 304 -> {305 306}; + 305 -> {318}; + 306 -> {307}; 307 -> {308}; 308 -> {309}; 309 -> {310}; 310 -> {311}; - 311 -> {312}; + 311 -> {312} [style=dotted]; 312 -> {313} [style=dotted]; 313 -> {314} [style=dotted]; 314 -> {315} [style=dotted]; 315 -> {316} [style=dotted]; 316 -> {317} [style=dotted]; 317 -> {318} [style=dotted]; - 318 -> {319} [style=dotted]; + 318 -> {319}; 319 -> {320}; 320 -> {321}; 321 -> {322}; 322 -> {323}; 323 -> {324}; - 324 -> {325}; - 325 -> {326 327}; - 326 -> {339}; + 324 -> {325 326}; + 325 -> {338}; + 326 -> {327}; 327 -> {328}; 328 -> {329}; 329 -> {330}; @@ -899,206 +898,206 @@ digraph boundSmartcastsInBranches_kt { 337 -> {338}; 338 -> {339}; 339 -> {340}; - 340 -> {341}; subgraph cluster_70 { color=red - 342 [label="Enter function test_8" style="filled" fillcolor=red]; + 341 [label="Enter function test_8" style="filled" fillcolor=red]; subgraph cluster_71 { color=blue - 343 [label="Enter block"]; - 344 [label="Const: Null(null)"]; - 345 [label="Variable declaration: lval z: R|kotlin/String?|"]; - 346 [label="Access variable R|/z|"]; - 347 [label="Variable declaration: lvar y: R|kotlin/String?|"]; - 348 [label="Access variable R|/y|"]; - 349 [label="Variable declaration: lval x: R|kotlin/String?|"]; + 342 [label="Enter block"]; + 343 [label="Const: Null(null)"]; + 344 [label="Variable declaration: lval z: R|kotlin/String?|"]; + 345 [label="Access variable R|/z|"]; + 346 [label="Variable declaration: lvar y: R|kotlin/String?|"]; + 347 [label="Access variable R|/y|"]; + 348 [label="Variable declaration: lval x: R|kotlin/String?|"]; subgraph cluster_72 { color=blue - 350 [label="Enter when"]; + 349 [label="Enter when"]; subgraph cluster_73 { color=blue - 351 [label="Enter when branch condition "]; - 352 [label="Access variable R|/x|"]; - 353 [label="Const: Null(null)"]; - 354 [label="Equality operator !="]; - 355 [label="Exit when branch condition"]; + 350 [label="Enter when branch condition "]; + 351 [label="Access variable R|/x|"]; + 352 [label="Const: Null(null)"]; + 353 [label="Equality operator !="]; + 354 [label="Exit when branch condition"]; } - 356 [label="Synthetic else branch"]; - 357 [label="Enter when branch result"]; + 355 [label="Synthetic else branch"]; + 356 [label="Enter when branch result"]; subgraph cluster_74 { color=blue - 358 [label="Enter block"]; - 359 [label="Access variable R|/x|"]; - 360 [label="Smart cast: R|/x|"]; - 361 [label="Access variable R|kotlin/String.length|"]; - 362 [label="Access variable R|/y|"]; - 363 [label="Smart cast: R|/y|"]; - 364 [label="Access variable R|kotlin/String.length|"]; - 365 [label="Access variable R|/z|"]; - 366 [label="Smart cast: R|/z|"]; - 367 [label="Access variable R|kotlin/String.length|"]; - 368 [label="Exit block"]; + 357 [label="Enter block"]; + 358 [label="Access variable R|/x|"]; + 359 [label="Smart cast: R|/x|"]; + 360 [label="Access variable R|kotlin/String.length|"]; + 361 [label="Access variable R|/y|"]; + 362 [label="Smart cast: R|/y|"]; + 363 [label="Access variable R|kotlin/String.length|"]; + 364 [label="Access variable R|/z|"]; + 365 [label="Smart cast: R|/z|"]; + 366 [label="Access variable R|kotlin/String.length|"]; + 367 [label="Exit block"]; } - 369 [label="Exit when branch result"]; - 370 [label="Exit when"]; + 368 [label="Exit when branch result"]; + 369 [label="Exit when"]; } subgraph cluster_75 { color=blue - 371 [label="Enter when"]; + 370 [label="Enter when"]; subgraph cluster_76 { color=blue - 372 [label="Enter when branch condition "]; - 373 [label="Access variable R|/y|"]; - 374 [label="Const: Null(null)"]; - 375 [label="Equality operator !="]; - 376 [label="Exit when branch condition"]; + 371 [label="Enter when branch condition "]; + 372 [label="Access variable R|/y|"]; + 373 [label="Const: Null(null)"]; + 374 [label="Equality operator !="]; + 375 [label="Exit when branch condition"]; } - 377 [label="Synthetic else branch"]; - 378 [label="Enter when branch result"]; + 376 [label="Synthetic else branch"]; + 377 [label="Enter when branch result"]; subgraph cluster_77 { color=blue - 379 [label="Enter block"]; - 380 [label="Access variable R|/x|"]; - 381 [label="Smart cast: R|/x|"]; - 382 [label="Access variable R|kotlin/String.length|"]; - 383 [label="Access variable R|/y|"]; - 384 [label="Smart cast: R|/y|"]; - 385 [label="Access variable R|kotlin/String.length|"]; - 386 [label="Access variable R|/z|"]; - 387 [label="Smart cast: R|/z|"]; - 388 [label="Access variable R|kotlin/String.length|"]; - 389 [label="Exit block"]; + 378 [label="Enter block"]; + 379 [label="Access variable R|/x|"]; + 380 [label="Smart cast: R|/x|"]; + 381 [label="Access variable R|kotlin/String.length|"]; + 382 [label="Access variable R|/y|"]; + 383 [label="Smart cast: R|/y|"]; + 384 [label="Access variable R|kotlin/String.length|"]; + 385 [label="Access variable R|/z|"]; + 386 [label="Smart cast: R|/z|"]; + 387 [label="Access variable R|kotlin/String.length|"]; + 388 [label="Exit block"]; } - 390 [label="Exit when branch result"]; - 391 [label="Exit when"]; + 389 [label="Exit when branch result"]; + 390 [label="Exit when"]; } subgraph cluster_78 { color=blue - 392 [label="Enter when"]; + 391 [label="Enter when"]; subgraph cluster_79 { color=blue - 393 [label="Enter when branch condition "]; - 394 [label="Access variable R|/z|"]; - 395 [label="Const: Null(null)"]; - 396 [label="Equality operator !="]; - 397 [label="Exit when branch condition"]; + 392 [label="Enter when branch condition "]; + 393 [label="Access variable R|/z|"]; + 394 [label="Const: Null(null)"]; + 395 [label="Equality operator !="]; + 396 [label="Exit when branch condition"]; } - 398 [label="Synthetic else branch"]; - 399 [label="Enter when branch result"]; + 397 [label="Synthetic else branch"]; + 398 [label="Enter when branch result"]; subgraph cluster_80 { color=blue - 400 [label="Enter block"]; - 401 [label="Access variable R|/x|"]; - 402 [label="Smart cast: R|/x|"]; - 403 [label="Access variable R|kotlin/String.length|"]; - 404 [label="Access variable R|/y|"]; - 405 [label="Smart cast: R|/y|"]; - 406 [label="Access variable R|kotlin/String.length|"]; - 407 [label="Access variable R|/z|"]; - 408 [label="Smart cast: R|/z|"]; - 409 [label="Access variable R|kotlin/String.length|"]; - 410 [label="Exit block"]; + 399 [label="Enter block"]; + 400 [label="Access variable R|/x|"]; + 401 [label="Smart cast: R|/x|"]; + 402 [label="Access variable R|kotlin/String.length|"]; + 403 [label="Access variable R|/y|"]; + 404 [label="Smart cast: R|/y|"]; + 405 [label="Access variable R|kotlin/String.length|"]; + 406 [label="Access variable R|/z|"]; + 407 [label="Smart cast: R|/z|"]; + 408 [label="Access variable R|kotlin/String.length|"]; + 409 [label="Exit block"]; } - 411 [label="Exit when branch result"]; - 412 [label="Exit when"]; + 410 [label="Exit when branch result"]; + 411 [label="Exit when"]; } - 413 [label="Const: Null(null)"]; - 414 [label="Assignment: R|/y|"]; + 412 [label="Const: Null(null)"]; + 413 [label="Assignment: R|/y|"]; subgraph cluster_81 { color=blue - 415 [label="Enter when"]; + 414 [label="Enter when"]; subgraph cluster_82 { color=blue - 416 [label="Enter when branch condition "]; - 417 [label="Access variable R|/x|"]; - 418 [label="Const: Null(null)"]; - 419 [label="Equality operator !="]; - 420 [label="Exit when branch condition"]; + 415 [label="Enter when branch condition "]; + 416 [label="Access variable R|/x|"]; + 417 [label="Const: Null(null)"]; + 418 [label="Equality operator !="]; + 419 [label="Exit when branch condition"]; } - 421 [label="Synthetic else branch"]; - 422 [label="Enter when branch result"]; + 420 [label="Synthetic else branch"]; + 421 [label="Enter when branch result"]; subgraph cluster_83 { color=blue - 423 [label="Enter block"]; - 424 [label="Access variable R|/x|"]; - 425 [label="Smart cast: R|/x|"]; - 426 [label="Access variable R|kotlin/String.length|"]; - 427 [label="Access variable R|/y|"]; - 428 [label="Smart cast: R|/y|"]; - 429 [label="Access variable R|kotlin/String.length#|"]; - 430 [label="Access variable R|/z|"]; - 431 [label="Smart cast: R|/z|"]; - 432 [label="Access variable R|kotlin/String.length|"]; - 433 [label="Exit block"]; + 422 [label="Enter block"]; + 423 [label="Access variable R|/x|"]; + 424 [label="Smart cast: R|/x|"]; + 425 [label="Access variable R|kotlin/String.length|"]; + 426 [label="Access variable R|/y|"]; + 427 [label="Smart cast: R|/y|"]; + 428 [label="Access variable R|kotlin/String.length#|"]; + 429 [label="Access variable R|/z|"]; + 430 [label="Smart cast: R|/z|"]; + 431 [label="Access variable R|kotlin/String.length|"]; + 432 [label="Exit block"]; } - 434 [label="Exit when branch result"]; - 435 [label="Exit when"]; + 433 [label="Exit when branch result"]; + 434 [label="Exit when"]; } subgraph cluster_84 { color=blue - 436 [label="Enter when"]; + 435 [label="Enter when"]; subgraph cluster_85 { color=blue - 437 [label="Enter when branch condition "]; - 438 [label="Access variable R|/y|"]; - 439 [label="Smart cast: R|/y|"]; - 440 [label="Const: Null(null)"]; - 441 [label="Equality operator !="]; - 442 [label="Exit when branch condition"]; + 436 [label="Enter when branch condition "]; + 437 [label="Access variable R|/y|"]; + 438 [label="Smart cast: R|/y|"]; + 439 [label="Const: Null(null)"]; + 440 [label="Equality operator !="]; + 441 [label="Exit when branch condition"]; } - 443 [label="Synthetic else branch"]; - 444 [label="Enter when branch result"]; + 442 [label="Synthetic else branch"]; + 443 [label="Enter when branch result"]; subgraph cluster_86 { color=blue - 445 [label="Enter block"]; - 446 [label="Access variable R|/x|"]; - 447 [label="Access variable R|kotlin/String.length#|"]; - 448 [label="Access variable R|/y|"]; - 449 [label="Smart cast: R|/y|"]; - 450 [label="Stub" style="filled" fillcolor=gray]; - 451 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; - 452 [label="Access variable R|/z|" style="filled" fillcolor=gray]; - 453 [label="Access variable R|kotlin/String.length#|" style="filled" fillcolor=gray]; - 454 [label="Exit block" style="filled" fillcolor=gray]; + 444 [label="Enter block"]; + 445 [label="Access variable R|/x|"]; + 446 [label="Access variable R|kotlin/String.length#|"]; + 447 [label="Access variable R|/y|"]; + 448 [label="Smart cast: R|/y|"]; + 449 [label="Stub" style="filled" fillcolor=gray]; + 450 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; + 451 [label="Access variable R|/z|" style="filled" fillcolor=gray]; + 452 [label="Access variable R|kotlin/String.length#|" style="filled" fillcolor=gray]; + 453 [label="Exit block" style="filled" fillcolor=gray]; } - 455 [label="Exit when branch result" style="filled" fillcolor=gray]; - 456 [label="Exit when"]; + 454 [label="Exit when branch result" style="filled" fillcolor=gray]; + 455 [label="Exit when"]; } subgraph cluster_87 { color=blue - 457 [label="Enter when"]; + 456 [label="Enter when"]; subgraph cluster_88 { color=blue - 458 [label="Enter when branch condition "]; - 459 [label="Access variable R|/z|"]; - 460 [label="Const: Null(null)"]; - 461 [label="Equality operator !="]; - 462 [label="Exit when branch condition"]; + 457 [label="Enter when branch condition "]; + 458 [label="Access variable R|/z|"]; + 459 [label="Const: Null(null)"]; + 460 [label="Equality operator !="]; + 461 [label="Exit when branch condition"]; } - 463 [label="Synthetic else branch"]; - 464 [label="Enter when branch result"]; + 462 [label="Synthetic else branch"]; + 463 [label="Enter when branch result"]; subgraph cluster_89 { color=blue - 465 [label="Enter block"]; - 466 [label="Access variable R|/x|"]; - 467 [label="Smart cast: R|/x|"]; - 468 [label="Access variable R|kotlin/String.length|"]; - 469 [label="Access variable R|/y|"]; - 470 [label="Smart cast: R|/y|"]; - 471 [label="Access variable R|kotlin/String.length#|"]; - 472 [label="Access variable R|/z|"]; - 473 [label="Smart cast: R|/z|"]; - 474 [label="Access variable R|kotlin/String.length|"]; - 475 [label="Exit block"]; + 464 [label="Enter block"]; + 465 [label="Access variable R|/x|"]; + 466 [label="Smart cast: R|/x|"]; + 467 [label="Access variable R|kotlin/String.length|"]; + 468 [label="Access variable R|/y|"]; + 469 [label="Smart cast: R|/y|"]; + 470 [label="Access variable R|kotlin/String.length#|"]; + 471 [label="Access variable R|/z|"]; + 472 [label="Smart cast: R|/z|"]; + 473 [label="Access variable R|kotlin/String.length|"]; + 474 [label="Exit block"]; } - 476 [label="Exit when branch result"]; - 477 [label="Exit when"]; + 475 [label="Exit when branch result"]; + 476 [label="Exit when"]; } - 478 [label="Exit block"]; + 477 [label="Exit block"]; } - 479 [label="Exit function test_8" style="filled" fillcolor=red]; + 478 [label="Exit function test_8" style="filled" fillcolor=red]; } + 341 -> {342}; 342 -> {343}; 343 -> {344}; 344 -> {345}; @@ -1111,9 +1110,9 @@ digraph boundSmartcastsInBranches_kt { 351 -> {352}; 352 -> {353}; 353 -> {354}; - 354 -> {355}; - 355 -> {356 357}; - 356 -> {370}; + 354 -> {355 356}; + 355 -> {369}; + 356 -> {357}; 357 -> {358}; 358 -> {359}; 359 -> {360}; @@ -1132,9 +1131,9 @@ digraph boundSmartcastsInBranches_kt { 372 -> {373}; 373 -> {374}; 374 -> {375}; - 375 -> {376}; - 376 -> {377 378}; - 377 -> {391}; + 375 -> {376 377}; + 376 -> {390}; + 377 -> {378}; 378 -> {379}; 379 -> {380}; 380 -> {381}; @@ -1153,9 +1152,9 @@ digraph boundSmartcastsInBranches_kt { 393 -> {394}; 394 -> {395}; 395 -> {396}; - 396 -> {397}; - 397 -> {398 399}; - 398 -> {412}; + 396 -> {397 398}; + 397 -> {411}; + 398 -> {399}; 399 -> {400}; 400 -> {401}; 401 -> {402}; @@ -1176,9 +1175,9 @@ digraph boundSmartcastsInBranches_kt { 416 -> {417}; 417 -> {418}; 418 -> {419}; - 419 -> {420}; - 420 -> {421 422}; - 421 -> {435}; + 419 -> {420 421}; + 420 -> {434}; + 421 -> {422}; 422 -> {423}; 423 -> {424}; 424 -> {425}; @@ -1198,29 +1197,29 @@ digraph boundSmartcastsInBranches_kt { 438 -> {439}; 439 -> {440}; 440 -> {441}; - 441 -> {442}; - 442 -> {443 444}; - 443 -> {456}; + 441 -> {442 443}; + 442 -> {455}; + 443 -> {444}; 444 -> {445}; 445 -> {446}; 446 -> {447}; 447 -> {448}; - 448 -> {449}; + 448 -> {449} [style=dotted]; 449 -> {450} [style=dotted]; 450 -> {451} [style=dotted]; 451 -> {452} [style=dotted]; 452 -> {453} [style=dotted]; 453 -> {454} [style=dotted]; 454 -> {455} [style=dotted]; - 455 -> {456} [style=dotted]; + 455 -> {456}; 456 -> {457}; 457 -> {458}; 458 -> {459}; 459 -> {460}; 460 -> {461}; - 461 -> {462}; - 462 -> {463 464}; - 463 -> {477}; + 461 -> {462 463}; + 462 -> {476}; + 463 -> {464}; 464 -> {465}; 465 -> {466}; 466 -> {467}; @@ -1235,85 +1234,85 @@ digraph boundSmartcastsInBranches_kt { 475 -> {476}; 476 -> {477}; 477 -> {478}; - 478 -> {479}; subgraph cluster_90 { color=red - 480 [label="Enter function test_9" style="filled" fillcolor=red]; + 479 [label="Enter function test_9" style="filled" fillcolor=red]; subgraph cluster_91 { color=blue - 481 [label="Enter block"]; - 482 [label="Const: Null(null)"]; - 483 [label="Variable declaration: lvar a: R|kotlin/String?|"]; - 484 [label="Variable declaration: lval b: R|kotlin/String?|"]; + 480 [label="Enter block"]; + 481 [label="Const: Null(null)"]; + 482 [label="Variable declaration: lvar a: R|kotlin/String?|"]; + 483 [label="Variable declaration: lval b: R|kotlin/String?|"]; subgraph cluster_92 { color=blue - 485 [label="Enter when"]; + 484 [label="Enter when"]; subgraph cluster_93 { color=blue - 486 [label="Enter when branch condition "]; - 487 [label="Access variable R|/a|"]; - 488 [label="Const: Null(null)"]; - 489 [label="Equality operator !="]; - 490 [label="Exit when branch condition"]; + 485 [label="Enter when branch condition "]; + 486 [label="Access variable R|/a|"]; + 487 [label="Const: Null(null)"]; + 488 [label="Equality operator !="]; + 489 [label="Exit when branch condition"]; } subgraph cluster_94 { color=blue - 491 [label="Enter when branch condition else"]; - 492 [label="Exit when branch condition"]; + 490 [label="Enter when branch condition else"]; + 491 [label="Exit when branch condition"]; } - 493 [label="Enter when branch result"]; + 492 [label="Enter when branch result"]; subgraph cluster_95 { color=blue - 494 [label="Enter block"]; - 495 [label="Access variable R|/a|"]; - 496 [label="Smart cast: R|/a|"]; - 497 [label="Assignment: R|/b|"]; - 498 [label="Exit block"]; + 493 [label="Enter block"]; + 494 [label="Access variable R|/a|"]; + 495 [label="Smart cast: R|/a|"]; + 496 [label="Assignment: R|/b|"]; + 497 [label="Exit block"]; } - 499 [label="Exit when branch result"]; - 500 [label="Enter when branch result"]; + 498 [label="Exit when branch result"]; + 499 [label="Enter when branch result"]; subgraph cluster_96 { color=blue - 501 [label="Enter block"]; - 502 [label="Access variable R|/a|"]; - 503 [label="Smart cast: R|/a|"]; - 504 [label="Assignment: R|/b|"]; - 505 [label="Exit block"]; + 500 [label="Enter block"]; + 501 [label="Access variable R|/a|"]; + 502 [label="Smart cast: R|/a|"]; + 503 [label="Assignment: R|/b|"]; + 504 [label="Exit block"]; } - 506 [label="Exit when branch result"]; - 507 [label="Exit when"]; + 505 [label="Exit when branch result"]; + 506 [label="Exit when"]; } - 508 [label="Access variable R|/b|"]; - 509 [label="Access variable R|kotlin/String.length#|"]; + 507 [label="Access variable R|/b|"]; + 508 [label="Access variable R|kotlin/String.length#|"]; subgraph cluster_97 { color=blue - 510 [label="Enter when"]; + 509 [label="Enter when"]; subgraph cluster_98 { color=blue - 511 [label="Enter when branch condition "]; - 512 [label="Access variable R|/a|"]; - 513 [label="Const: Null(null)"]; - 514 [label="Equality operator !="]; - 515 [label="Exit when branch condition"]; + 510 [label="Enter when branch condition "]; + 511 [label="Access variable R|/a|"]; + 512 [label="Const: Null(null)"]; + 513 [label="Equality operator !="]; + 514 [label="Exit when branch condition"]; } - 516 [label="Synthetic else branch"]; - 517 [label="Enter when branch result"]; + 515 [label="Synthetic else branch"]; + 516 [label="Enter when branch result"]; subgraph cluster_99 { color=blue - 518 [label="Enter block"]; - 519 [label="Access variable R|/b|"]; - 520 [label="Smart cast: R|/b|"]; - 521 [label="Access variable R|kotlin/String.length|"]; - 522 [label="Exit block"]; + 517 [label="Enter block"]; + 518 [label="Access variable R|/b|"]; + 519 [label="Smart cast: R|/b|"]; + 520 [label="Access variable R|kotlin/String.length|"]; + 521 [label="Exit block"]; } - 523 [label="Exit when branch result"]; - 524 [label="Exit when"]; + 522 [label="Exit when branch result"]; + 523 [label="Exit when"]; } - 525 [label="Exit block"]; + 524 [label="Exit block"]; } - 526 [label="Exit function test_9" style="filled" fillcolor=red]; + 525 [label="Exit function test_9" style="filled" fillcolor=red]; } + 479 -> {480}; 480 -> {481}; 481 -> {482}; 482 -> {483}; @@ -1323,8 +1322,8 @@ digraph boundSmartcastsInBranches_kt { 486 -> {487}; 487 -> {488}; 488 -> {489}; - 489 -> {490}; - 490 -> {491 500}; + 489 -> {490 499}; + 490 -> {491}; 491 -> {492}; 492 -> {493}; 493 -> {494}; @@ -1332,8 +1331,8 @@ digraph boundSmartcastsInBranches_kt { 495 -> {496}; 496 -> {497}; 497 -> {498}; - 498 -> {499}; - 499 -> {507}; + 498 -> {506}; + 499 -> {500}; 500 -> {501}; 501 -> {502}; 502 -> {503}; @@ -1348,9 +1347,9 @@ digraph boundSmartcastsInBranches_kt { 511 -> {512}; 512 -> {513}; 513 -> {514}; - 514 -> {515}; - 515 -> {516 517}; - 516 -> {524}; + 514 -> {515 516}; + 515 -> {523}; + 516 -> {517}; 517 -> {518}; 518 -> {519}; 519 -> {520}; @@ -1359,6 +1358,5 @@ digraph boundSmartcastsInBranches_kt { 522 -> {523}; 523 -> {524}; 524 -> {525}; - 525 -> {526}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot index f840b54cc8c..fa276050b73 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot @@ -23,101 +23,99 @@ digraph functionCallBound_kt { subgraph cluster_2 { color=red 5 [label="Enter class Sub" style="filled" fillcolor=red]; - 6 [label="Part of class initialization"]; subgraph cluster_3 { color=blue - 7 [label="Enter property" style="filled" fillcolor=red]; - 8 [label="Access variable R|/data|"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Access variable R|/data|"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } - 10 [label="Exit class Sub" style="filled" fillcolor=red]; + 9 [label="Exit class Sub" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue - 11 [label="Enter function " style="filled" fillcolor=red]; - 12 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 13 [label="Exit function " style="filled" fillcolor=red]; + 10 [label="Enter function " style="filled" fillcolor=red]; + 11 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 12 [label="Exit function " style="filled" fillcolor=red]; } 5 -> {6} [color=green]; - 6 -> {7} [color=green]; - 6 -> {10} [style=dotted]; - 6 -> {7} [style=dashed]; + 5 -> {9} [style=dotted]; + 5 -> {6} [style=dashed]; + 6 -> {7}; 7 -> {8}; - 8 -> {9}; + 8 -> {9} [color=green]; 9 -> {10} [color=green]; - 10 -> {11} [color=green]; - 10 -> {11} [style=dashed]; + 9 -> {10} [style=dashed]; + 10 -> {11}; 11 -> {12}; - 12 -> {13}; subgraph cluster_5 { color=red - 14 [label="Enter function isOk" style="filled" fillcolor=red]; + 13 [label="Enter function isOk" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 15 [label="Enter block"]; - 16 [label="Const: Boolean(true)"]; - 17 [label="Jump: ^isOk Boolean(true)"]; - 18 [label="Stub" style="filled" fillcolor=gray]; - 19 [label="Exit block" style="filled" fillcolor=gray]; + 14 [label="Enter block"]; + 15 [label="Const: Boolean(true)"]; + 16 [label="Jump: ^isOk Boolean(true)"]; + 17 [label="Stub" style="filled" fillcolor=gray]; + 18 [label="Exit block" style="filled" fillcolor=gray]; } - 20 [label="Exit function isOk" style="filled" fillcolor=red]; + 19 [label="Exit function isOk" style="filled" fillcolor=red]; } + 13 -> {14}; 14 -> {15}; 15 -> {16}; - 16 -> {17}; - 17 -> {20}; + 16 -> {19}; + 16 -> {17} [style=dotted]; 17 -> {18} [style=dotted]; 18 -> {19} [style=dotted]; - 19 -> {20} [style=dotted]; subgraph cluster_7 { color=red - 21 [label="Enter function check" style="filled" fillcolor=red]; + 20 [label="Enter function check" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 22 [label="Enter block"]; + 21 [label="Enter block"]; subgraph cluster_9 { color=blue - 23 [label="Enter when"]; + 22 [label="Enter when"]; subgraph cluster_10 { color=blue - 24 [label="Enter when branch condition "]; - 25 [label="Access variable R|/base|"]; - 26 [label="Type operator: (R|/base| as? R|Sub|)"]; - 27 [label="Enter safe call"]; - 28 [label="Function call: $subj$.R|/isOk|()" style="filled" fillcolor=yellow]; - 29 [label="Exit safe call"]; - 30 [label="Const: Boolean(true)"]; - 31 [label="Equality operator =="]; - 32 [label="Exit when branch condition"]; + 23 [label="Enter when branch condition "]; + 24 [label="Access variable R|/base|"]; + 25 [label="Type operator: (R|/base| as? R|Sub|)"]; + 26 [label="Enter safe call"]; + 27 [label="Function call: $subj$.R|/isOk|()" style="filled" fillcolor=yellow]; + 28 [label="Exit safe call"]; + 29 [label="Const: Boolean(true)"]; + 30 [label="Equality operator =="]; + 31 [label="Exit when branch condition"]; } subgraph cluster_11 { color=blue - 33 [label="Enter when branch condition else"]; - 34 [label="Exit when branch condition"]; + 32 [label="Enter when branch condition else"]; + 33 [label="Exit when branch condition"]; } - 35 [label="Enter when branch result"]; + 34 [label="Enter when branch result"]; subgraph cluster_12 { color=blue - 36 [label="Enter block"]; - 37 [label="Access variable R|/base|"]; - 38 [label="Exit block"]; + 35 [label="Enter block"]; + 36 [label="Access variable R|/base|"]; + 37 [label="Exit block"]; } - 39 [label="Exit when branch result"]; - 40 [label="Enter when branch result"]; + 38 [label="Exit when branch result"]; + 39 [label="Enter when branch result"]; subgraph cluster_13 { color=blue - 41 [label="Enter block"]; - 42 [label="Access variable R|/base|"]; - 43 [label="Smart cast: R|/base|"]; - 44 [label="Access variable R|/Sub.data|"]; - 45 [label="Exit block"]; + 40 [label="Enter block"]; + 41 [label="Access variable R|/base|"]; + 42 [label="Smart cast: R|/base|"]; + 43 [label="Access variable R|/Sub.data|"]; + 44 [label="Exit block"]; } - 46 [label="Exit when branch result"]; - 47 [label="Exit when"]; + 45 [label="Exit when branch result"]; + 46 [label="Exit when"]; } - 48 [label="Jump: ^check when () { + 47 [label="Jump: ^check when () { ==((R|/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> { R|/base|.R|/Sub.data| } @@ -126,30 +124,31 @@ digraph functionCallBound_kt { } } "]; - 49 [label="Stub" style="filled" fillcolor=gray]; - 50 [label="Exit block" style="filled" fillcolor=gray]; + 48 [label="Stub" style="filled" fillcolor=gray]; + 49 [label="Exit block" style="filled" fillcolor=gray]; } - 51 [label="Exit function check" style="filled" fillcolor=red]; + 50 [label="Exit function check" style="filled" fillcolor=red]; } + 20 -> {21}; 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; - 26 -> {27 29}; + 25 -> {26 28}; + 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33 40}; + 31 -> {32 39}; + 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; - 38 -> {39}; - 39 -> {47}; + 38 -> {46}; + 39 -> {40}; 40 -> {41}; 41 -> {42}; 42 -> {43}; @@ -157,10 +156,9 @@ digraph functionCallBound_kt { 44 -> {45}; 45 -> {46}; 46 -> {47}; - 47 -> {48}; - 48 -> {51}; + 47 -> {50}; + 47 -> {48} [style=dotted]; 48 -> {49} [style=dotted]; 49 -> {50} [style=dotted]; - 50 -> {51} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot index b3c271c521e..f3f9d695d68 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot @@ -23,191 +23,190 @@ digraph lambdaInWhenBranch_kt { subgraph cluster_2 { color=red 5 [label="Enter class SubClass1" style="filled" fillcolor=red]; - 6 [label="Part of class initialization"]; subgraph cluster_3 { color=blue - 7 [label="Enter property" style="filled" fillcolor=red]; - 8 [label="Access variable R|/t|"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Access variable R|/t|"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } - 10 [label="Exit class SubClass1" style="filled" fillcolor=red]; + 9 [label="Exit class SubClass1" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue - 11 [label="Enter function copy" style="filled" fillcolor=red]; - 12 [label="Enter default value of t"]; + 10 [label="Enter function copy" style="filled" fillcolor=red]; + 11 [label="Enter default value of t"]; subgraph cluster_5 { color=blue - 13 [label="Enter default value of t" style="filled" fillcolor=red]; - 14 [label="Access variable R|/SubClass1.t|"]; - 15 [label="Exit default value of t" style="filled" fillcolor=red]; + 12 [label="Enter default value of t" style="filled" fillcolor=red]; + 13 [label="Access variable R|/SubClass1.t|"]; + 14 [label="Exit default value of t" style="filled" fillcolor=red]; } - 16 [label="Exit default value of t"]; - 17 [label="Exit function copy" style="filled" fillcolor=red]; + 15 [label="Exit default value of t"]; + 16 [label="Exit function copy" style="filled" fillcolor=red]; } subgraph cluster_6 { color=blue - 18 [label="Enter function component1" style="filled" fillcolor=red]; - 19 [label="Exit function component1" style="filled" fillcolor=red]; + 17 [label="Enter function component1" style="filled" fillcolor=red]; + 18 [label="Exit function component1" style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 20 [label="Enter function " style="filled" fillcolor=red]; - 21 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 22 [label="Exit function " style="filled" fillcolor=red]; + 19 [label="Enter function " style="filled" fillcolor=red]; + 20 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 21 [label="Exit function " style="filled" fillcolor=red]; } 5 -> {6} [color=green]; - 6 -> {7} [color=green]; - 6 -> {10} [style=dotted]; - 6 -> {7} [style=dashed]; + 5 -> {9} [style=dotted]; + 5 -> {6} [style=dashed]; + 6 -> {7}; 7 -> {8}; - 8 -> {9}; - 9 -> {10} [color=green]; - 10 -> {11 18 20} [color=green]; - 10 -> {11 18 20} [style=dashed]; - 11 -> {12}; - 12 -> {13 16}; - 12 -> {13} [style=dashed]; + 8 -> {9} [color=green]; + 9 -> {10 17 19} [color=green]; + 9 -> {10 17 19} [style=dashed]; + 10 -> {11}; + 11 -> {12 15}; + 11 -> {12} [style=dashed]; + 12 -> {13}; 13 -> {14}; 14 -> {15}; 15 -> {16}; - 16 -> {17}; - 18 -> {19}; + 17 -> {18}; + 19 -> {20}; 20 -> {21}; - 21 -> {22}; subgraph cluster_8 { color=red - 23 [label="Enter class SubClass2" style="filled" fillcolor=red]; - 24 [label="Exit class SubClass2" style="filled" fillcolor=red]; + 22 [label="Enter class SubClass2" style="filled" fillcolor=red]; + 23 [label="Exit class SubClass2" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 25 [label="Enter function copy" style="filled" fillcolor=red]; - 26 [label="Exit function copy" style="filled" fillcolor=red]; + 24 [label="Enter function copy" style="filled" fillcolor=red]; + 25 [label="Exit function copy" style="filled" fillcolor=red]; } subgraph cluster_10 { color=blue - 27 [label="Enter function " style="filled" fillcolor=red]; - 28 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 29 [label="Exit function " style="filled" fillcolor=red]; + 26 [label="Enter function " style="filled" fillcolor=red]; + 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 28 [label="Exit function " style="filled" fillcolor=red]; } - 23 -> {24} [color=green]; - 24 -> {25 27} [color=green]; - 24 -> {25 27} [style=dashed]; - 25 -> {26}; + 22 -> {23} [color=green]; + 23 -> {24 26} [color=green]; + 23 -> {24 26} [style=dashed]; + 24 -> {25}; + 26 -> {27}; 27 -> {28}; - 28 -> {29}; subgraph cluster_11 { color=red - 30 [label="Enter function foo" style="filled" fillcolor=red]; + 29 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue - 31 [label="Enter block"]; + 30 [label="Enter block"]; subgraph cluster_13 { color=blue - 32 [label="Enter when"]; - 33 [label="Access variable R|/p|"]; + 31 [label="Enter when"]; + 32 [label="Access variable R|/p|"]; subgraph cluster_14 { color=blue - 34 [label="Enter when branch condition "]; - 35 [label="Exit $subj"]; - 36 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 37 [label="Exit when branch condition"]; + 33 [label="Enter when branch condition "]; + 34 [label="Exit $subj"]; + 35 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 36 [label="Exit when branch condition"]; } subgraph cluster_15 { color=blue - 38 [label="Enter when branch condition "]; - 39 [label="Exit $subj"]; - 40 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 41 [label="Exit when branch condition"]; + 37 [label="Enter when branch condition "]; + 38 [label="Exit $subj"]; + 39 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 40 [label="Exit when branch condition"]; } - 42 [label="Enter when branch result"]; + 41 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 43 [label="Enter block"]; - 44 [label="Const: String()"]; - 45 [label="Exit block"]; + 42 [label="Enter block"]; + 43 [label="Const: String()"]; + 44 [label="Exit block"]; } - 46 [label="Exit when branch result"]; - 47 [label="Enter when branch result"]; + 45 [label="Exit when branch result"]; + 46 [label="Enter when branch result"]; subgraph cluster_17 { color=blue - 48 [label="Enter block"]; - 49 [label="Const: String()"]; - 50 [label="Postponed enter to lambda"]; + 47 [label="Enter block"]; + 48 [label="Const: String()"]; + 49 [label="Postponed enter to lambda"]; subgraph cluster_18 { color=blue - 51 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 50 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_19 { color=blue - 52 [label="Enter block"]; - 53 [label="Access variable R|/it|"]; - 54 [label="Exit block"]; + 51 [label="Enter block"]; + 52 [label="Access variable R|/it|"]; + 53 [label="Exit block"]; } - 55 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 54 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 56 [label="Postponed exit from lambda"]; - 57 [label="Function call: String().R|kotlin/let|(...)" style="filled" fillcolor=yellow]; - 58 [label="Exit block"]; + 55 [label="Postponed exit from lambda"]; + 56 [label="Function call: String().R|kotlin/let|(...)" style="filled" fillcolor=yellow]; + 57 [label="Exit block"]; } - 59 [label="Exit when branch result"]; - 60 [label="Exit when"]; + 58 [label="Exit when branch result"]; + 59 [label="Exit when"]; } - 61 [label="Access variable R|/p|"]; - 62 [label="Access variable #"]; + 60 [label="Access variable R|/p|"]; + 61 [label="Access variable #"]; subgraph cluster_20 { color=blue - 63 [label="Enter when"]; - 64 [label="Access variable R|/p|"]; + 62 [label="Enter when"]; + 63 [label="Access variable R|/p|"]; subgraph cluster_21 { color=blue - 65 [label="Enter when branch condition "]; - 66 [label="Exit $subj"]; - 67 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 68 [label="Exit when branch condition"]; + 64 [label="Enter when branch condition "]; + 65 [label="Exit $subj"]; + 66 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 67 [label="Exit when branch condition"]; } subgraph cluster_22 { color=blue - 69 [label="Enter when branch condition "]; - 70 [label="Exit $subj"]; - 71 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 72 [label="Exit when branch condition"]; + 68 [label="Enter when branch condition "]; + 69 [label="Exit $subj"]; + 70 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 71 [label="Exit when branch condition"]; } - 73 [label="Enter when branch result"]; + 72 [label="Enter when branch result"]; subgraph cluster_23 { color=blue - 74 [label="Enter block"]; - 75 [label="Const: String(2)"]; - 76 [label="Exit block"]; + 73 [label="Enter block"]; + 74 [label="Const: String(2)"]; + 75 [label="Exit block"]; } - 77 [label="Exit when branch result"]; - 78 [label="Enter when branch result"]; + 76 [label="Exit when branch result"]; + 77 [label="Enter when branch result"]; subgraph cluster_24 { color=blue - 79 [label="Enter block"]; - 80 [label="Access variable R|/p|"]; - 81 [label="Smart cast: R|/p|"]; - 82 [label="Access variable R|/SubClass1.t|"]; - 83 [label="Exit block"]; + 78 [label="Enter block"]; + 79 [label="Access variable R|/p|"]; + 80 [label="Smart cast: R|/p|"]; + 81 [label="Access variable R|/SubClass1.t|"]; + 82 [label="Exit block"]; } - 84 [label="Exit when branch result"]; - 85 [label="Exit when"]; + 83 [label="Exit when branch result"]; + 84 [label="Exit when"]; } - 86 [label="Access variable R|kotlin/String.length|"]; - 87 [label="Exit block"]; + 85 [label="Access variable R|kotlin/String.length|"]; + 86 [label="Exit block"]; } - 88 [label="Exit function foo" style="filled" fillcolor=red]; + 87 [label="Exit function foo" style="filled" fillcolor=red]; } + 29 -> {30}; 30 -> {31}; 31 -> {32}; 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; - 36 -> {37}; - 37 -> {38 47}; + 36 -> {37 46}; + 37 -> {38}; 38 -> {39}; 39 -> {40}; 40 -> {41}; @@ -215,21 +214,21 @@ digraph lambdaInWhenBranch_kt { 42 -> {43}; 43 -> {44}; 44 -> {45}; - 45 -> {46}; - 46 -> {60}; + 45 -> {59}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; - 49 -> {50}; - 50 -> {51 57}; - 50 -> {56} [style=dotted]; - 50 -> {51} [style=dashed]; + 49 -> {50 56}; + 49 -> {55} [style=dotted]; + 49 -> {50} [style=dashed]; + 50 -> {51}; 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; - 55 -> {56}; - 56 -> {57} [color=green]; - 56 -> {60} [color=red]; + 55 -> {56} [color=green]; + 55 -> {59} [color=red]; + 56 -> {57}; 57 -> {58}; 58 -> {59}; 59 -> {60}; @@ -240,8 +239,8 @@ digraph lambdaInWhenBranch_kt { 64 -> {65}; 65 -> {66}; 66 -> {67}; - 67 -> {68}; - 68 -> {69 78}; + 67 -> {68 77}; + 68 -> {69}; 69 -> {70}; 70 -> {71}; 71 -> {72}; @@ -249,8 +248,8 @@ digraph lambdaInWhenBranch_kt { 73 -> {74}; 74 -> {75}; 75 -> {76}; - 76 -> {77}; - 77 -> {85}; + 76 -> {84}; + 77 -> {78}; 78 -> {79}; 79 -> {80}; 80 -> {81}; @@ -260,6 +259,5 @@ digraph lambdaInWhenBranch_kt { 84 -> {85}; 85 -> {86}; 86 -> {87}; - 87 -> {88}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot index 4ef1686b997..1650aa963b6 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot @@ -57,227 +57,225 @@ digraph nullability_kt { subgraph cluster_7 { color=red 14 [label="Enter class QImpl" style="filled" fillcolor=red]; - 15 [label="Part of class initialization"]; subgraph cluster_8 { color=blue - 16 [label="Enter property" style="filled" fillcolor=red]; - 17 [label="Access variable R|/data|"]; - 18 [label="Exit property" style="filled" fillcolor=red]; + 15 [label="Enter property" style="filled" fillcolor=red]; + 16 [label="Access variable R|/data|"]; + 17 [label="Exit property" style="filled" fillcolor=red]; } - 19 [label="Exit class QImpl" style="filled" fillcolor=red]; + 18 [label="Exit class QImpl" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 20 [label="Enter function fdata" style="filled" fillcolor=red]; + 19 [label="Enter function fdata" style="filled" fillcolor=red]; subgraph cluster_10 { color=blue - 21 [label="Enter block"]; - 22 [label="Const: Null(null)"]; - 23 [label="Jump: ^fdata Null(null)"]; - 24 [label="Stub" style="filled" fillcolor=gray]; - 25 [label="Exit block" style="filled" fillcolor=gray]; + 20 [label="Enter block"]; + 21 [label="Const: Null(null)"]; + 22 [label="Jump: ^fdata Null(null)"]; + 23 [label="Stub" style="filled" fillcolor=gray]; + 24 [label="Exit block" style="filled" fillcolor=gray]; } - 26 [label="Exit function fdata" style="filled" fillcolor=red]; + 25 [label="Exit function fdata" style="filled" fillcolor=red]; } subgraph cluster_11 { color=blue - 27 [label="Enter function " style="filled" fillcolor=red]; - 28 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 29 [label="Exit function " style="filled" fillcolor=red]; + 26 [label="Enter function " style="filled" fillcolor=red]; + 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 28 [label="Exit function " style="filled" fillcolor=red]; } 14 -> {15} [color=green]; - 15 -> {16} [color=green]; - 15 -> {19} [style=dotted]; - 15 -> {16} [style=dashed]; + 14 -> {18} [style=dotted]; + 14 -> {15} [style=dashed]; + 15 -> {16}; 16 -> {17}; - 17 -> {18}; - 18 -> {19} [color=green]; - 19 -> {20 27} [color=green]; - 19 -> {20 27} [style=dashed]; + 17 -> {18} [color=green]; + 18 -> {19 26} [color=green]; + 18 -> {19 26} [style=dashed]; + 19 -> {20}; 20 -> {21}; 21 -> {22}; - 22 -> {23}; - 23 -> {26}; + 22 -> {25}; + 22 -> {23} [style=dotted]; 23 -> {24} [style=dotted]; 24 -> {25} [style=dotted]; - 25 -> {26} [style=dotted]; + 26 -> {27}; 27 -> {28}; - 28 -> {29}; subgraph cluster_12 { color=red - 30 [label="Enter class QImplMutable" style="filled" fillcolor=red]; - 31 [label="Part of class initialization"]; + 29 [label="Enter class QImplMutable" style="filled" fillcolor=red]; subgraph cluster_13 { color=blue - 32 [label="Enter property" style="filled" fillcolor=red]; - 33 [label="Access variable R|/data|"]; - 34 [label="Exit property" style="filled" fillcolor=red]; + 30 [label="Enter property" style="filled" fillcolor=red]; + 31 [label="Access variable R|/data|"]; + 32 [label="Exit property" style="filled" fillcolor=red]; } - 35 [label="Exit class QImplMutable" style="filled" fillcolor=red]; + 33 [label="Exit class QImplMutable" style="filled" fillcolor=red]; } subgraph cluster_14 { color=blue - 36 [label="Enter function fdata" style="filled" fillcolor=red]; + 34 [label="Enter function fdata" style="filled" fillcolor=red]; subgraph cluster_15 { color=blue - 37 [label="Enter block"]; - 38 [label="Const: Null(null)"]; - 39 [label="Jump: ^fdata Null(null)"]; - 40 [label="Stub" style="filled" fillcolor=gray]; - 41 [label="Exit block" style="filled" fillcolor=gray]; + 35 [label="Enter block"]; + 36 [label="Const: Null(null)"]; + 37 [label="Jump: ^fdata Null(null)"]; + 38 [label="Stub" style="filled" fillcolor=gray]; + 39 [label="Exit block" style="filled" fillcolor=gray]; } - 42 [label="Exit function fdata" style="filled" fillcolor=red]; + 40 [label="Exit function fdata" style="filled" fillcolor=red]; } subgraph cluster_16 { color=blue - 43 [label="Enter function " style="filled" fillcolor=red]; - 44 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 45 [label="Exit function " style="filled" fillcolor=red]; + 41 [label="Enter function " style="filled" fillcolor=red]; + 42 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 43 [label="Exit function " style="filled" fillcolor=red]; } - 30 -> {31} [color=green]; - 31 -> {32} [color=green]; - 31 -> {35} [style=dotted]; - 31 -> {32} [style=dashed]; - 32 -> {33}; - 33 -> {34}; - 34 -> {35} [color=green]; - 35 -> {36 43} [color=green]; - 35 -> {36 43} [style=dashed]; + 29 -> {30} [color=green]; + 29 -> {33} [style=dotted]; + 29 -> {30} [style=dashed]; + 30 -> {31}; + 31 -> {32}; + 32 -> {33} [color=green]; + 33 -> {34 41} [color=green]; + 33 -> {34 41} [style=dashed]; + 34 -> {35}; + 35 -> {36}; 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {42}; + 37 -> {40}; + 37 -> {38} [style=dotted]; + 38 -> {39} [style=dotted]; 39 -> {40} [style=dotted]; - 40 -> {41} [style=dotted]; - 41 -> {42} [style=dotted]; - 43 -> {44}; - 44 -> {45}; + 41 -> {42}; + 42 -> {43}; subgraph cluster_17 { color=red - 46 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; - 47 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; + 44 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; + 45 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; } subgraph cluster_18 { color=blue - 48 [label="Enter function fdata" style="filled" fillcolor=red]; + 46 [label="Enter function fdata" style="filled" fillcolor=red]; subgraph cluster_19 { color=blue - 49 [label="Enter block"]; - 50 [label="Const: Null(null)"]; - 51 [label="Jump: ^fdata Null(null)"]; - 52 [label="Stub" style="filled" fillcolor=gray]; - 53 [label="Exit block" style="filled" fillcolor=gray]; + 47 [label="Enter block"]; + 48 [label="Const: Null(null)"]; + 49 [label="Jump: ^fdata Null(null)"]; + 50 [label="Stub" style="filled" fillcolor=gray]; + 51 [label="Exit block" style="filled" fillcolor=gray]; } - 54 [label="Exit function fdata" style="filled" fillcolor=red]; + 52 [label="Exit function fdata" style="filled" fillcolor=red]; } subgraph cluster_20 { color=blue - 55 [label="Enter function getter" style="filled" fillcolor=red]; + 53 [label="Enter function getter" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 56 [label="Enter block"]; - 57 [label="Const: Null(null)"]; - 58 [label="Jump: ^ Null(null)"]; - 59 [label="Stub" style="filled" fillcolor=gray]; - 60 [label="Exit block" style="filled" fillcolor=gray]; + 54 [label="Enter block"]; + 55 [label="Const: Null(null)"]; + 56 [label="Jump: ^ Null(null)"]; + 57 [label="Stub" style="filled" fillcolor=gray]; + 58 [label="Exit block" style="filled" fillcolor=gray]; } - 61 [label="Exit function getter" style="filled" fillcolor=red]; + 59 [label="Exit function getter" style="filled" fillcolor=red]; } subgraph cluster_22 { color=blue - 62 [label="Enter function " style="filled" fillcolor=red]; - 63 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 64 [label="Exit function " style="filled" fillcolor=red]; + 60 [label="Enter function " style="filled" fillcolor=red]; + 61 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 62 [label="Exit function " style="filled" fillcolor=red]; } - 46 -> {47} [color=green]; - 47 -> {48 55 62} [color=green]; - 47 -> {48 55 62} [style=dashed]; + 44 -> {45} [color=green]; + 45 -> {46 53 60} [color=green]; + 45 -> {46 53 60} [style=dashed]; + 46 -> {47}; + 47 -> {48}; 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {54}; + 49 -> {52}; + 49 -> {50} [style=dotted]; + 50 -> {51} [style=dotted]; 51 -> {52} [style=dotted]; - 52 -> {53} [style=dotted]; - 53 -> {54} [style=dotted]; + 53 -> {54}; + 54 -> {55}; 55 -> {56}; - 56 -> {57}; - 57 -> {58}; - 58 -> {61}; + 56 -> {59}; + 56 -> {57} [style=dotted]; + 57 -> {58} [style=dotted]; 58 -> {59} [style=dotted]; - 59 -> {60} [style=dotted]; - 60 -> {61} [style=dotted]; - 62 -> {63}; - 63 -> {64}; + 60 -> {61}; + 61 -> {62}; subgraph cluster_23 { color=red - 65 [label="Enter function test_1" style="filled" fillcolor=red]; + 63 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_24 { color=blue - 66 [label="Enter block"]; + 64 [label="Enter block"]; subgraph cluster_25 { color=blue - 67 [label="Enter when"]; + 65 [label="Enter when"]; subgraph cluster_26 { color=blue - 68 [label="Enter when branch condition "]; - 69 [label="Access variable R|/x|"]; - 70 [label="Const: Null(null)"]; - 71 [label="Equality operator !="]; - 72 [label="Exit when branch condition"]; + 66 [label="Enter when branch condition "]; + 67 [label="Access variable R|/x|"]; + 68 [label="Const: Null(null)"]; + 69 [label="Equality operator !="]; + 70 [label="Exit when branch condition"]; } subgraph cluster_27 { color=blue - 73 [label="Enter when branch condition else"]; - 74 [label="Exit when branch condition"]; + 71 [label="Enter when branch condition else"]; + 72 [label="Exit when branch condition"]; } - 75 [label="Enter when branch result"]; + 73 [label="Enter when branch result"]; subgraph cluster_28 { color=blue - 76 [label="Enter block"]; - 77 [label="Access variable R|/x|"]; - 78 [label="Smart cast: R|/x|"]; - 79 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; - 80 [label="Exit block"]; + 74 [label="Enter block"]; + 75 [label="Access variable R|/x|"]; + 76 [label="Smart cast: R|/x|"]; + 77 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; + 78 [label="Exit block"]; } - 81 [label="Exit when branch result"]; - 82 [label="Enter when branch result"]; + 79 [label="Exit when branch result"]; + 80 [label="Enter when branch result"]; subgraph cluster_29 { color=blue - 83 [label="Enter block"]; - 84 [label="Access variable R|/x|"]; - 85 [label="Smart cast: R|/x|"]; - 86 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 87 [label="Exit block"]; + 81 [label="Enter block"]; + 82 [label="Access variable R|/x|"]; + 83 [label="Smart cast: R|/x|"]; + 84 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 85 [label="Exit block"]; } - 88 [label="Exit when branch result"]; - 89 [label="Exit when"]; + 86 [label="Exit when branch result"]; + 87 [label="Exit when"]; } - 90 [label="Access variable R|/x|"]; - 91 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; - 92 [label="Exit block"]; + 88 [label="Access variable R|/x|"]; + 89 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; + 90 [label="Exit block"]; } - 93 [label="Exit function test_1" style="filled" fillcolor=red]; + 91 [label="Exit function test_1" style="filled" fillcolor=red]; } + 63 -> {64}; + 64 -> {65}; 65 -> {66}; 66 -> {67}; 67 -> {68}; 68 -> {69}; 69 -> {70}; - 70 -> {71}; + 70 -> {71 80}; 71 -> {72}; - 72 -> {73 82}; + 72 -> {73}; 73 -> {74}; 74 -> {75}; 75 -> {76}; 76 -> {77}; 77 -> {78}; 78 -> {79}; - 79 -> {80}; + 79 -> {87}; 80 -> {81}; - 81 -> {89}; + 81 -> {82}; 82 -> {83}; 83 -> {84}; 84 -> {85}; @@ -287,76 +285,76 @@ digraph nullability_kt { 88 -> {89}; 89 -> {90}; 90 -> {91}; - 91 -> {92}; - 92 -> {93}; subgraph cluster_30 { color=red - 94 [label="Enter function test_2" style="filled" fillcolor=red]; + 92 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_31 { color=blue - 95 [label="Enter block"]; + 93 [label="Enter block"]; subgraph cluster_32 { color=blue - 96 [label="Enter when"]; + 94 [label="Enter when"]; subgraph cluster_33 { color=blue - 97 [label="Enter when branch condition "]; - 98 [label="Access variable R|/x|"]; - 99 [label="Const: Null(null)"]; - 100 [label="Equality operator =="]; - 101 [label="Exit when branch condition"]; + 95 [label="Enter when branch condition "]; + 96 [label="Access variable R|/x|"]; + 97 [label="Const: Null(null)"]; + 98 [label="Equality operator =="]; + 99 [label="Exit when branch condition"]; } subgraph cluster_34 { color=blue - 102 [label="Enter when branch condition else"]; - 103 [label="Exit when branch condition"]; + 100 [label="Enter when branch condition else"]; + 101 [label="Exit when branch condition"]; } - 104 [label="Enter when branch result"]; + 102 [label="Enter when branch result"]; subgraph cluster_35 { color=blue - 105 [label="Enter block"]; - 106 [label="Access variable R|/x|"]; - 107 [label="Smart cast: R|/x|"]; - 108 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 109 [label="Exit block"]; + 103 [label="Enter block"]; + 104 [label="Access variable R|/x|"]; + 105 [label="Smart cast: R|/x|"]; + 106 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 107 [label="Exit block"]; } - 110 [label="Exit when branch result"]; - 111 [label="Enter when branch result"]; + 108 [label="Exit when branch result"]; + 109 [label="Enter when branch result"]; subgraph cluster_36 { color=blue - 112 [label="Enter block"]; - 113 [label="Access variable R|/x|"]; - 114 [label="Smart cast: R|/x|"]; - 115 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; - 116 [label="Exit block"]; + 110 [label="Enter block"]; + 111 [label="Access variable R|/x|"]; + 112 [label="Smart cast: R|/x|"]; + 113 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; + 114 [label="Exit block"]; } - 117 [label="Exit when branch result"]; - 118 [label="Exit when"]; + 115 [label="Exit when branch result"]; + 116 [label="Exit when"]; } - 119 [label="Access variable R|/x|"]; - 120 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; - 121 [label="Exit block"]; + 117 [label="Access variable R|/x|"]; + 118 [label="Function call: R|/x|.R|/A.foo#|()" style="filled" fillcolor=yellow]; + 119 [label="Exit block"]; } - 122 [label="Exit function test_2" style="filled" fillcolor=red]; + 120 [label="Exit function test_2" style="filled" fillcolor=red]; } + 92 -> {93}; + 93 -> {94}; 94 -> {95}; 95 -> {96}; 96 -> {97}; 97 -> {98}; 98 -> {99}; - 99 -> {100}; + 99 -> {100 109}; 100 -> {101}; - 101 -> {102 111}; + 101 -> {102}; 102 -> {103}; 103 -> {104}; 104 -> {105}; 105 -> {106}; 106 -> {107}; 107 -> {108}; - 108 -> {109}; + 108 -> {116}; 109 -> {110}; - 110 -> {118}; + 110 -> {111}; 111 -> {112}; 112 -> {113}; 113 -> {114}; @@ -366,181 +364,181 @@ digraph nullability_kt { 117 -> {118}; 118 -> {119}; 119 -> {120}; - 120 -> {121}; - 121 -> {122}; subgraph cluster_37 { color=red - 123 [label="Enter function test_3" style="filled" fillcolor=red]; + 121 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_38 { color=blue - 124 [label="Enter block"]; - 125 [label="Access variable R|/x|"]; - 126 [label="Exit lhs of ?:"]; - 127 [label="Enter rhs of ?:"]; - 128 [label="Jump: ^test_3 Unit"]; - 129 [label="Stub" style="filled" fillcolor=gray]; - 130 [label="Lhs of ?: is not null"]; - 131 [label="Exit ?:"]; - 132 [label="Access variable R|/x|"]; - 133 [label="Smart cast: R|/x|"]; - 134 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 135 [label="Exit block"]; + 122 [label="Enter block"]; + 123 [label="Access variable R|/x|"]; + 124 [label="Exit lhs of ?:"]; + 125 [label="Enter rhs of ?:"]; + 126 [label="Jump: ^test_3 Unit"]; + 127 [label="Stub" style="filled" fillcolor=gray]; + 128 [label="Lhs of ?: is not null"]; + 129 [label="Exit ?:"]; + 130 [label="Access variable R|/x|"]; + 131 [label="Smart cast: R|/x|"]; + 132 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 133 [label="Exit block"]; } - 136 [label="Exit function test_3" style="filled" fillcolor=red]; + 134 [label="Exit function test_3" style="filled" fillcolor=red]; } + 121 -> {122}; + 122 -> {123}; 123 -> {124}; - 124 -> {125}; + 124 -> {125 128}; 125 -> {126}; - 126 -> {127 130}; - 127 -> {128}; - 128 -> {136}; - 128 -> {129} [style=dotted]; - 129 -> {131} [style=dotted]; + 126 -> {134}; + 126 -> {127} [style=dotted]; + 127 -> {129} [style=dotted]; + 128 -> {129}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; 132 -> {133}; 133 -> {134}; - 134 -> {135}; - 135 -> {136}; subgraph cluster_39 { color=red - 137 [label="Enter function test_4" style="filled" fillcolor=red]; + 135 [label="Enter function test_4" style="filled" fillcolor=red]; subgraph cluster_40 { color=blue - 138 [label="Enter block"]; + 136 [label="Enter block"]; subgraph cluster_41 { color=blue - 139 [label="Enter when"]; + 137 [label="Enter when"]; subgraph cluster_42 { color=blue - 140 [label="Enter when branch condition "]; - 141 [label="Access variable R|/x|"]; - 142 [label="Enter safe call"]; - 143 [label="Function call: $subj$.R|/A.getA|()" style="filled" fillcolor=yellow]; - 144 [label="Exit safe call"]; - 145 [label="Const: Null(null)"]; - 146 [label="Equality operator =="]; - 147 [label="Exit when branch condition"]; + 138 [label="Enter when branch condition "]; + 139 [label="Access variable R|/x|"]; + 140 [label="Enter safe call"]; + 141 [label="Function call: $subj$.R|/A.getA|()" style="filled" fillcolor=yellow]; + 142 [label="Exit safe call"]; + 143 [label="Const: Null(null)"]; + 144 [label="Equality operator =="]; + 145 [label="Exit when branch condition"]; } - 148 [label="Synthetic else branch"]; - 149 [label="Enter when branch result"]; + 146 [label="Synthetic else branch"]; + 147 [label="Enter when branch result"]; subgraph cluster_43 { color=blue - 150 [label="Enter block"]; - 151 [label="Jump: ^test_4 Unit"]; - 152 [label="Stub" style="filled" fillcolor=gray]; - 153 [label="Exit block" style="filled" fillcolor=gray]; + 148 [label="Enter block"]; + 149 [label="Jump: ^test_4 Unit"]; + 150 [label="Stub" style="filled" fillcolor=gray]; + 151 [label="Exit block" style="filled" fillcolor=gray]; } - 154 [label="Exit when branch result" style="filled" fillcolor=gray]; - 155 [label="Exit when"]; + 152 [label="Exit when branch result" style="filled" fillcolor=gray]; + 153 [label="Exit when"]; } - 156 [label="Access variable R|/x|"]; - 157 [label="Smart cast: R|/x|"]; - 158 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 159 [label="Exit block"]; + 154 [label="Access variable R|/x|"]; + 155 [label="Smart cast: R|/x|"]; + 156 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 157 [label="Exit block"]; } - 160 [label="Exit function test_4" style="filled" fillcolor=red]; + 158 [label="Exit function test_4" style="filled" fillcolor=red]; } + 135 -> {136}; + 136 -> {137}; 137 -> {138}; 138 -> {139}; - 139 -> {140}; + 139 -> {140 142}; 140 -> {141}; - 141 -> {142 144}; + 141 -> {142}; 142 -> {143}; 143 -> {144}; 144 -> {145}; - 145 -> {146}; - 146 -> {147}; - 147 -> {148 149}; - 148 -> {155}; - 149 -> {150}; - 150 -> {151}; - 151 -> {160}; + 145 -> {146 147}; + 146 -> {153}; + 147 -> {148}; + 148 -> {149}; + 149 -> {158}; + 149 -> {150} [style=dotted]; + 150 -> {151} [style=dotted]; 151 -> {152} [style=dotted]; 152 -> {153} [style=dotted]; - 153 -> {154} [style=dotted]; - 154 -> {155} [style=dotted]; + 153 -> {154}; + 154 -> {155}; 155 -> {156}; 156 -> {157}; 157 -> {158}; - 158 -> {159}; - 159 -> {160}; subgraph cluster_44 { color=red - 161 [label="Enter function test_5" style="filled" fillcolor=red]; + 159 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_45 { color=blue - 162 [label="Enter block"]; + 160 [label="Enter block"]; subgraph cluster_46 { color=blue - 163 [label="Enter when"]; + 161 [label="Enter when"]; subgraph cluster_47 { color=blue - 164 [label="Enter when branch condition "]; - 165 [label="Access variable R|/q|"]; + 162 [label="Enter when branch condition "]; + 163 [label="Access variable R|/q|"]; + 164 [label="Enter safe call"]; + 165 [label="Access variable R|/Q.data|"]; 166 [label="Enter safe call"]; - 167 [label="Access variable R|/Q.data|"]; + 167 [label="Access variable R|/MyData.s|"]; 168 [label="Enter safe call"]; - 169 [label="Access variable R|/MyData.s|"]; - 170 [label="Enter safe call"]; - 171 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 169 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 170 [label="Exit safe call"]; + 171 [label="Exit safe call"]; 172 [label="Exit safe call"]; - 173 [label="Exit safe call"]; - 174 [label="Exit safe call"]; - 175 [label="Const: Null(null)"]; - 176 [label="Equality operator !="]; - 177 [label="Exit when branch condition"]; + 173 [label="Const: Null(null)"]; + 174 [label="Equality operator !="]; + 175 [label="Exit when branch condition"]; } - 178 [label="Synthetic else branch"]; - 179 [label="Enter when branch result"]; + 176 [label="Synthetic else branch"]; + 177 [label="Enter when branch result"]; subgraph cluster_48 { color=blue - 180 [label="Enter block"]; - 181 [label="Access variable R|/q|"]; - 182 [label="Smart cast: R|/q|"]; - 183 [label="Access variable R|/Q.data|"]; - 184 [label="Smart cast: R|/q|.R|/Q.data|"]; - 185 [label="Access variable R|/q|"]; - 186 [label="Smart cast: R|/q|"]; - 187 [label="Access variable R|/Q.data|"]; - 188 [label="Smart cast: R|/q|.R|/Q.data|"]; - 189 [label="Access variable R|/MyData.s#|"]; - 190 [label="Access variable R|/q|"]; - 191 [label="Smart cast: R|/q|"]; - 192 [label="Access variable R|/Q.data|"]; - 193 [label="Smart cast: R|/q|.R|/Q.data|"]; - 194 [label="Access variable R|/MyData.s#|"]; - 195 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 196 [label="Exit block"]; + 178 [label="Enter block"]; + 179 [label="Access variable R|/q|"]; + 180 [label="Smart cast: R|/q|"]; + 181 [label="Access variable R|/Q.data|"]; + 182 [label="Smart cast: R|/q|.R|/Q.data|"]; + 183 [label="Access variable R|/q|"]; + 184 [label="Smart cast: R|/q|"]; + 185 [label="Access variable R|/Q.data|"]; + 186 [label="Smart cast: R|/q|.R|/Q.data|"]; + 187 [label="Access variable R|/MyData.s#|"]; + 188 [label="Access variable R|/q|"]; + 189 [label="Smart cast: R|/q|"]; + 190 [label="Access variable R|/Q.data|"]; + 191 [label="Smart cast: R|/q|.R|/Q.data|"]; + 192 [label="Access variable R|/MyData.s#|"]; + 193 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 194 [label="Exit block"]; } - 197 [label="Exit when branch result"]; - 198 [label="Exit when"]; + 195 [label="Exit when branch result"]; + 196 [label="Exit when"]; } - 199 [label="Exit block"]; + 197 [label="Exit block"]; } - 200 [label="Exit function test_5" style="filled" fillcolor=red]; + 198 [label="Exit function test_5" style="filled" fillcolor=red]; } + 159 -> {160}; + 160 -> {161}; 161 -> {162}; 162 -> {163}; - 163 -> {164}; + 163 -> {164 170}; 164 -> {165}; - 165 -> {166 172}; + 165 -> {166 170}; 166 -> {167}; - 167 -> {168 172}; + 167 -> {168 171}; 168 -> {169}; - 169 -> {170 173}; + 169 -> {172}; 170 -> {171}; - 171 -> {174}; + 171 -> {172}; 172 -> {173}; 173 -> {174}; 174 -> {175}; - 175 -> {176}; - 176 -> {177}; - 177 -> {178 179}; - 178 -> {198}; + 175 -> {176 177}; + 176 -> {196}; + 177 -> {178}; + 178 -> {179}; 179 -> {180}; 180 -> {181}; 181 -> {182}; @@ -560,68 +558,68 @@ digraph nullability_kt { 195 -> {196}; 196 -> {197}; 197 -> {198}; - 198 -> {199}; - 199 -> {200}; subgraph cluster_49 { color=red - 201 [label="Enter function test_6" style="filled" fillcolor=red]; + 199 [label="Enter function test_6" style="filled" fillcolor=red]; subgraph cluster_50 { color=blue - 202 [label="Enter block"]; - 203 [label="Access variable R|/q|"]; + 200 [label="Enter block"]; + 201 [label="Access variable R|/q|"]; + 202 [label="Enter safe call"]; + 203 [label="Access variable R|/Q.data|"]; 204 [label="Enter safe call"]; - 205 [label="Access variable R|/Q.data|"]; + 205 [label="Access variable R|/MyData.s|"]; 206 [label="Enter safe call"]; - 207 [label="Access variable R|/MyData.s|"]; - 208 [label="Enter safe call"]; - 209 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 210 [label="Exit safe call"]; - 211 [label="Exit lhs of ?:"]; - 212 [label="Lhs of ?: is not null"]; - 213 [label="Exit safe call"]; - 214 [label="Exit safe call"]; - 215 [label="Enter rhs of ?:"]; - 216 [label="Jump: ^test_6 Unit"]; - 217 [label="Stub" style="filled" fillcolor=gray]; - 218 [label="Exit ?:"]; - 219 [label="Access variable R|/q|"]; - 220 [label="Smart cast: R|/q|"]; - 221 [label="Access variable R|/Q.data|"]; - 222 [label="Smart cast: R|/q|.R|/Q.data|"]; - 223 [label="Access variable R|/q|"]; - 224 [label="Smart cast: R|/q|"]; - 225 [label="Access variable R|/Q.data|"]; - 226 [label="Smart cast: R|/q|.R|/Q.data|"]; - 227 [label="Access variable R|/MyData.s#|"]; - 228 [label="Access variable R|/q|"]; - 229 [label="Smart cast: R|/q|"]; - 230 [label="Access variable R|/Q.data|"]; - 231 [label="Smart cast: R|/q|.R|/Q.data|"]; - 232 [label="Access variable R|/MyData.s#|"]; - 233 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 234 [label="Exit block"]; + 207 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 208 [label="Exit safe call"]; + 209 [label="Exit lhs of ?:"]; + 210 [label="Lhs of ?: is not null"]; + 211 [label="Exit safe call"]; + 212 [label="Exit safe call"]; + 213 [label="Enter rhs of ?:"]; + 214 [label="Jump: ^test_6 Unit"]; + 215 [label="Stub" style="filled" fillcolor=gray]; + 216 [label="Exit ?:"]; + 217 [label="Access variable R|/q|"]; + 218 [label="Smart cast: R|/q|"]; + 219 [label="Access variable R|/Q.data|"]; + 220 [label="Smart cast: R|/q|.R|/Q.data|"]; + 221 [label="Access variable R|/q|"]; + 222 [label="Smart cast: R|/q|"]; + 223 [label="Access variable R|/Q.data|"]; + 224 [label="Smart cast: R|/q|.R|/Q.data|"]; + 225 [label="Access variable R|/MyData.s#|"]; + 226 [label="Access variable R|/q|"]; + 227 [label="Smart cast: R|/q|"]; + 228 [label="Access variable R|/Q.data|"]; + 229 [label="Smart cast: R|/q|.R|/Q.data|"]; + 230 [label="Access variable R|/MyData.s#|"]; + 231 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 232 [label="Exit block"]; } - 235 [label="Exit function test_6" style="filled" fillcolor=red]; + 233 [label="Exit function test_6" style="filled" fillcolor=red]; } - 201 -> {202}; + 199 -> {200}; + 200 -> {201}; + 201 -> {202 211}; 202 -> {203}; - 203 -> {204 213}; + 203 -> {204 211}; 204 -> {205}; - 205 -> {206 213}; + 205 -> {206 212}; 206 -> {207}; - 207 -> {208 214}; + 207 -> {208}; 208 -> {209}; - 209 -> {210}; - 210 -> {211}; - 211 -> {212 215}; - 212 -> {218}; + 209 -> {210 213}; + 210 -> {216}; + 211 -> {212}; + 212 -> {213}; 213 -> {214}; - 214 -> {215}; - 215 -> {216}; - 216 -> {235}; - 216 -> {217} [style=dotted]; - 217 -> {218} [style=dotted]; + 214 -> {233}; + 214 -> {215} [style=dotted]; + 215 -> {216} [style=dotted]; + 216 -> {217}; + 217 -> {218}; 218 -> {219}; 219 -> {220}; 220 -> {221}; @@ -637,79 +635,79 @@ digraph nullability_kt { 230 -> {231}; 231 -> {232}; 232 -> {233}; - 233 -> {234}; - 234 -> {235}; subgraph cluster_51 { color=red - 236 [label="Enter function test_7" style="filled" fillcolor=red]; + 234 [label="Enter function test_7" style="filled" fillcolor=red]; subgraph cluster_52 { color=blue - 237 [label="Enter block"]; + 235 [label="Enter block"]; subgraph cluster_53 { color=blue - 238 [label="Enter when"]; + 236 [label="Enter when"]; subgraph cluster_54 { color=blue - 239 [label="Enter when branch condition "]; - 240 [label="Access variable R|/q|"]; + 237 [label="Enter when branch condition "]; + 238 [label="Access variable R|/q|"]; + 239 [label="Enter safe call"]; + 240 [label="Function call: $subj$.R|/Q.fdata|()" style="filled" fillcolor=yellow]; 241 [label="Enter safe call"]; - 242 [label="Function call: $subj$.R|/Q.fdata|()" style="filled" fillcolor=yellow]; + 242 [label="Function call: $subj$.R|/MyData.fs|()" style="filled" fillcolor=yellow]; 243 [label="Enter safe call"]; - 244 [label="Function call: $subj$.R|/MyData.fs|()" style="filled" fillcolor=yellow]; - 245 [label="Enter safe call"]; - 246 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 244 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 245 [label="Exit safe call"]; + 246 [label="Exit safe call"]; 247 [label="Exit safe call"]; - 248 [label="Exit safe call"]; - 249 [label="Exit safe call"]; - 250 [label="Const: Null(null)"]; - 251 [label="Equality operator !="]; - 252 [label="Exit when branch condition"]; + 248 [label="Const: Null(null)"]; + 249 [label="Equality operator !="]; + 250 [label="Exit when branch condition"]; } - 253 [label="Synthetic else branch"]; - 254 [label="Enter when branch result"]; + 251 [label="Synthetic else branch"]; + 252 [label="Enter when branch result"]; subgraph cluster_55 { color=blue - 255 [label="Enter block"]; - 256 [label="Access variable R|/q|"]; - 257 [label="Smart cast: R|/q|"]; - 258 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; - 259 [label="Access variable R|/q|"]; - 260 [label="Smart cast: R|/q|"]; - 261 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; - 262 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|()" style="filled" fillcolor=yellow]; - 263 [label="Access variable R|/q|"]; - 264 [label="Smart cast: R|/q|"]; - 265 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; - 266 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|()" style="filled" fillcolor=yellow]; - 267 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|().R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 268 [label="Exit block"]; + 253 [label="Enter block"]; + 254 [label="Access variable R|/q|"]; + 255 [label="Smart cast: R|/q|"]; + 256 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; + 257 [label="Access variable R|/q|"]; + 258 [label="Smart cast: R|/q|"]; + 259 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; + 260 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|()" style="filled" fillcolor=yellow]; + 261 [label="Access variable R|/q|"]; + 262 [label="Smart cast: R|/q|"]; + 263 [label="Function call: R|/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow]; + 264 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|()" style="filled" fillcolor=yellow]; + 265 [label="Function call: R|/q|.R|/Q.fdata|().R|/MyData.fs#|().R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 266 [label="Exit block"]; } - 269 [label="Exit when branch result"]; - 270 [label="Exit when"]; + 267 [label="Exit when branch result"]; + 268 [label="Exit when"]; } - 271 [label="Exit block"]; + 269 [label="Exit block"]; } - 272 [label="Exit function test_7" style="filled" fillcolor=red]; + 270 [label="Exit function test_7" style="filled" fillcolor=red]; } + 234 -> {235}; + 235 -> {236}; 236 -> {237}; 237 -> {238}; - 238 -> {239}; + 238 -> {239 245}; 239 -> {240}; - 240 -> {241 247}; + 240 -> {241 245}; 241 -> {242}; - 242 -> {243 247}; + 242 -> {243 246}; 243 -> {244}; - 244 -> {245 248}; + 244 -> {247}; 245 -> {246}; - 246 -> {249}; + 246 -> {247}; 247 -> {248}; 248 -> {249}; 249 -> {250}; - 250 -> {251}; - 251 -> {252}; - 252 -> {253 254}; - 253 -> {270}; + 250 -> {251 252}; + 251 -> {268}; + 252 -> {253}; + 253 -> {254}; 254 -> {255}; 255 -> {256}; 256 -> {257}; @@ -726,52 +724,52 @@ digraph nullability_kt { 267 -> {268}; 268 -> {269}; 269 -> {270}; - 270 -> {271}; - 271 -> {272}; subgraph cluster_56 { color=red - 273 [label="Enter function test_8" style="filled" fillcolor=red]; + 271 [label="Enter function test_8" style="filled" fillcolor=red]; subgraph cluster_57 { color=blue - 274 [label="Enter block"]; + 272 [label="Enter block"]; subgraph cluster_58 { color=blue - 275 [label="Enter when"]; + 273 [label="Enter when"]; subgraph cluster_59 { color=blue - 276 [label="Enter when branch condition "]; - 277 [label="Access variable R|/b|"]; - 278 [label="Const: Boolean(true)"]; - 279 [label="Equality operator =="]; - 280 [label="Exit when branch condition"]; + 274 [label="Enter when branch condition "]; + 275 [label="Access variable R|/b|"]; + 276 [label="Const: Boolean(true)"]; + 277 [label="Equality operator =="]; + 278 [label="Exit when branch condition"]; } - 281 [label="Synthetic else branch"]; - 282 [label="Enter when branch result"]; + 279 [label="Synthetic else branch"]; + 280 [label="Enter when branch result"]; subgraph cluster_60 { color=blue - 283 [label="Enter block"]; - 284 [label="Access variable R|/b|"]; - 285 [label="Smart cast: R|/b|"]; - 286 [label="Function call: R|/b|.R|kotlin/Boolean.not|()" style="filled" fillcolor=yellow]; - 287 [label="Exit block"]; + 281 [label="Enter block"]; + 282 [label="Access variable R|/b|"]; + 283 [label="Smart cast: R|/b|"]; + 284 [label="Function call: R|/b|.R|kotlin/Boolean.not|()" style="filled" fillcolor=yellow]; + 285 [label="Exit block"]; } - 288 [label="Exit when branch result"]; - 289 [label="Exit when"]; + 286 [label="Exit when branch result"]; + 287 [label="Exit when"]; } - 290 [label="Exit block"]; + 288 [label="Exit block"]; } - 291 [label="Exit function test_8" style="filled" fillcolor=red]; + 289 [label="Exit function test_8" style="filled" fillcolor=red]; } + 271 -> {272}; + 272 -> {273}; 273 -> {274}; 274 -> {275}; 275 -> {276}; 276 -> {277}; 277 -> {278}; - 278 -> {279}; - 279 -> {280}; - 280 -> {281 282}; - 281 -> {289}; + 278 -> {279 280}; + 279 -> {287}; + 280 -> {281}; + 281 -> {282}; 282 -> {283}; 283 -> {284}; 284 -> {285}; @@ -779,132 +777,132 @@ digraph nullability_kt { 286 -> {287}; 287 -> {288}; 288 -> {289}; - 289 -> {290}; - 290 -> {291}; subgraph cluster_61 { color=red - 292 [label="Enter function test_9" style="filled" fillcolor=red]; + 290 [label="Enter function test_9" style="filled" fillcolor=red]; subgraph cluster_62 { color=blue - 293 [label="Enter block"]; + 291 [label="Enter block"]; subgraph cluster_63 { color=blue - 294 [label="Enter when"]; + 292 [label="Enter when"]; subgraph cluster_64 { color=blue - 295 [label="Enter when branch condition "]; - 296 [label="Access variable R|/a|"]; - 297 [label="Access variable R|/b|"]; - 298 [label="Equality operator =="]; - 299 [label="Exit when branch condition"]; + 293 [label="Enter when branch condition "]; + 294 [label="Access variable R|/a|"]; + 295 [label="Access variable R|/b|"]; + 296 [label="Equality operator =="]; + 297 [label="Exit when branch condition"]; } - 300 [label="Synthetic else branch"]; - 301 [label="Enter when branch result"]; + 298 [label="Synthetic else branch"]; + 299 [label="Enter when branch result"]; subgraph cluster_65 { color=blue - 302 [label="Enter block"]; - 303 [label="Access variable R|/b|"]; - 304 [label="Smart cast: R|/b|"]; - 305 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 306 [label="Exit block"]; + 300 [label="Enter block"]; + 301 [label="Access variable R|/b|"]; + 302 [label="Smart cast: R|/b|"]; + 303 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 304 [label="Exit block"]; } - 307 [label="Exit when branch result"]; - 308 [label="Exit when"]; + 305 [label="Exit when branch result"]; + 306 [label="Exit when"]; } - 309 [label="Access variable R|/b|"]; - 310 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 307 [label="Access variable R|/b|"]; + 308 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_66 { color=blue - 311 [label="Enter when"]; + 309 [label="Enter when"]; subgraph cluster_67 { color=blue - 312 [label="Enter when branch condition "]; - 313 [label="Access variable R|/a|"]; - 314 [label="Access variable R|/b|"]; - 315 [label="Equality operator ==="]; - 316 [label="Exit when branch condition"]; + 310 [label="Enter when branch condition "]; + 311 [label="Access variable R|/a|"]; + 312 [label="Access variable R|/b|"]; + 313 [label="Equality operator ==="]; + 314 [label="Exit when branch condition"]; } - 317 [label="Synthetic else branch"]; - 318 [label="Enter when branch result"]; + 315 [label="Synthetic else branch"]; + 316 [label="Enter when branch result"]; subgraph cluster_68 { color=blue - 319 [label="Enter block"]; - 320 [label="Access variable R|/b|"]; - 321 [label="Smart cast: R|/b|"]; - 322 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 323 [label="Exit block"]; + 317 [label="Enter block"]; + 318 [label="Access variable R|/b|"]; + 319 [label="Smart cast: R|/b|"]; + 320 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 321 [label="Exit block"]; } - 324 [label="Exit when branch result"]; - 325 [label="Exit when"]; + 322 [label="Exit when branch result"]; + 323 [label="Exit when"]; } - 326 [label="Access variable R|/b|"]; - 327 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 324 [label="Access variable R|/b|"]; + 325 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_69 { color=blue - 328 [label="Enter when"]; + 326 [label="Enter when"]; subgraph cluster_70 { color=blue - 329 [label="Enter when branch condition "]; - 330 [label="Access variable R|/b|"]; - 331 [label="Access variable R|/a|"]; - 332 [label="Equality operator =="]; - 333 [label="Exit when branch condition"]; + 327 [label="Enter when branch condition "]; + 328 [label="Access variable R|/b|"]; + 329 [label="Access variable R|/a|"]; + 330 [label="Equality operator =="]; + 331 [label="Exit when branch condition"]; } - 334 [label="Synthetic else branch"]; - 335 [label="Enter when branch result"]; + 332 [label="Synthetic else branch"]; + 333 [label="Enter when branch result"]; subgraph cluster_71 { color=blue - 336 [label="Enter block"]; - 337 [label="Access variable R|/b|"]; - 338 [label="Smart cast: R|/b|"]; - 339 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 340 [label="Exit block"]; + 334 [label="Enter block"]; + 335 [label="Access variable R|/b|"]; + 336 [label="Smart cast: R|/b|"]; + 337 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 338 [label="Exit block"]; } - 341 [label="Exit when branch result"]; - 342 [label="Exit when"]; + 339 [label="Exit when branch result"]; + 340 [label="Exit when"]; } - 343 [label="Access variable R|/b|"]; - 344 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 341 [label="Access variable R|/b|"]; + 342 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_72 { color=blue - 345 [label="Enter when"]; + 343 [label="Enter when"]; subgraph cluster_73 { color=blue - 346 [label="Enter when branch condition "]; - 347 [label="Access variable R|/b|"]; - 348 [label="Access variable R|/a|"]; - 349 [label="Equality operator ==="]; - 350 [label="Exit when branch condition"]; + 344 [label="Enter when branch condition "]; + 345 [label="Access variable R|/b|"]; + 346 [label="Access variable R|/a|"]; + 347 [label="Equality operator ==="]; + 348 [label="Exit when branch condition"]; } - 351 [label="Synthetic else branch"]; - 352 [label="Enter when branch result"]; + 349 [label="Synthetic else branch"]; + 350 [label="Enter when branch result"]; subgraph cluster_74 { color=blue - 353 [label="Enter block"]; - 354 [label="Access variable R|/b|"]; - 355 [label="Smart cast: R|/b|"]; - 356 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 357 [label="Exit block"]; + 351 [label="Enter block"]; + 352 [label="Access variable R|/b|"]; + 353 [label="Smart cast: R|/b|"]; + 354 [label="Function call: R|/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 355 [label="Exit block"]; } - 358 [label="Exit when branch result"]; - 359 [label="Exit when"]; + 356 [label="Exit when branch result"]; + 357 [label="Exit when"]; } - 360 [label="Access variable R|/b|"]; - 361 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 362 [label="Exit block"]; + 358 [label="Access variable R|/b|"]; + 359 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 360 [label="Exit block"]; } - 363 [label="Exit function test_9" style="filled" fillcolor=red]; + 361 [label="Exit function test_9" style="filled" fillcolor=red]; } + 290 -> {291}; + 291 -> {292}; 292 -> {293}; 293 -> {294}; 294 -> {295}; 295 -> {296}; 296 -> {297}; - 297 -> {298}; - 298 -> {299}; - 299 -> {300 301}; - 300 -> {308}; + 297 -> {298 299}; + 298 -> {306}; + 299 -> {300}; + 300 -> {301}; 301 -> {302}; 302 -> {303}; 303 -> {304}; @@ -918,10 +916,10 @@ digraph nullability_kt { 311 -> {312}; 312 -> {313}; 313 -> {314}; - 314 -> {315}; - 315 -> {316}; - 316 -> {317 318}; - 317 -> {325}; + 314 -> {315 316}; + 315 -> {323}; + 316 -> {317}; + 317 -> {318}; 318 -> {319}; 319 -> {320}; 320 -> {321}; @@ -935,10 +933,10 @@ digraph nullability_kt { 328 -> {329}; 329 -> {330}; 330 -> {331}; - 331 -> {332}; - 332 -> {333}; - 333 -> {334 335}; - 334 -> {342}; + 331 -> {332 333}; + 332 -> {340}; + 333 -> {334}; + 334 -> {335}; 335 -> {336}; 336 -> {337}; 337 -> {338}; @@ -952,10 +950,10 @@ digraph nullability_kt { 345 -> {346}; 346 -> {347}; 347 -> {348}; - 348 -> {349}; - 349 -> {350}; - 350 -> {351 352}; - 351 -> {359}; + 348 -> {349 350}; + 349 -> {357}; + 350 -> {351}; + 351 -> {352}; 352 -> {353}; 353 -> {354}; 354 -> {355}; @@ -965,128 +963,128 @@ digraph nullability_kt { 358 -> {359}; 359 -> {360}; 360 -> {361}; - 361 -> {362}; - 362 -> {363}; subgraph cluster_75 { color=red - 364 [label="Enter function test_10" style="filled" fillcolor=red]; + 362 [label="Enter function test_10" style="filled" fillcolor=red]; subgraph cluster_76 { color=blue - 365 [label="Enter block"]; + 363 [label="Enter block"]; subgraph cluster_77 { color=blue - 366 [label="Enter when"]; + 364 [label="Enter when"]; subgraph cluster_78 { color=blue - 367 [label="Enter when branch condition "]; - 368 [label="Access variable R|/a|"]; - 369 [label="Access variable R|/b|"]; - 370 [label="Equality operator =="]; - 371 [label="Exit when branch condition"]; + 365 [label="Enter when branch condition "]; + 366 [label="Access variable R|/a|"]; + 367 [label="Access variable R|/b|"]; + 368 [label="Equality operator =="]; + 369 [label="Exit when branch condition"]; } - 372 [label="Synthetic else branch"]; - 373 [label="Enter when branch result"]; + 370 [label="Synthetic else branch"]; + 371 [label="Enter when branch result"]; subgraph cluster_79 { color=blue - 374 [label="Enter block"]; - 375 [label="Access variable R|/b|"]; - 376 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 377 [label="Exit block"]; + 372 [label="Enter block"]; + 373 [label="Access variable R|/b|"]; + 374 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 375 [label="Exit block"]; } - 378 [label="Exit when branch result"]; - 379 [label="Exit when"]; + 376 [label="Exit when branch result"]; + 377 [label="Exit when"]; } - 380 [label="Access variable R|/b|"]; - 381 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 378 [label="Access variable R|/b|"]; + 379 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_80 { color=blue - 382 [label="Enter when"]; + 380 [label="Enter when"]; subgraph cluster_81 { color=blue - 383 [label="Enter when branch condition "]; - 384 [label="Access variable R|/a|"]; - 385 [label="Access variable R|/b|"]; - 386 [label="Equality operator ==="]; - 387 [label="Exit when branch condition"]; + 381 [label="Enter when branch condition "]; + 382 [label="Access variable R|/a|"]; + 383 [label="Access variable R|/b|"]; + 384 [label="Equality operator ==="]; + 385 [label="Exit when branch condition"]; } - 388 [label="Synthetic else branch"]; - 389 [label="Enter when branch result"]; + 386 [label="Synthetic else branch"]; + 387 [label="Enter when branch result"]; subgraph cluster_82 { color=blue - 390 [label="Enter block"]; - 391 [label="Access variable R|/b|"]; - 392 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 393 [label="Exit block"]; + 388 [label="Enter block"]; + 389 [label="Access variable R|/b|"]; + 390 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 391 [label="Exit block"]; } - 394 [label="Exit when branch result"]; - 395 [label="Exit when"]; + 392 [label="Exit when branch result"]; + 393 [label="Exit when"]; } - 396 [label="Access variable R|/b|"]; - 397 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 394 [label="Access variable R|/b|"]; + 395 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_83 { color=blue - 398 [label="Enter when"]; + 396 [label="Enter when"]; subgraph cluster_84 { color=blue - 399 [label="Enter when branch condition "]; - 400 [label="Access variable R|/b|"]; - 401 [label="Access variable R|/a|"]; - 402 [label="Equality operator =="]; - 403 [label="Exit when branch condition"]; + 397 [label="Enter when branch condition "]; + 398 [label="Access variable R|/b|"]; + 399 [label="Access variable R|/a|"]; + 400 [label="Equality operator =="]; + 401 [label="Exit when branch condition"]; } - 404 [label="Synthetic else branch"]; - 405 [label="Enter when branch result"]; + 402 [label="Synthetic else branch"]; + 403 [label="Enter when branch result"]; subgraph cluster_85 { color=blue - 406 [label="Enter block"]; - 407 [label="Access variable R|/b|"]; - 408 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 409 [label="Exit block"]; + 404 [label="Enter block"]; + 405 [label="Access variable R|/b|"]; + 406 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 407 [label="Exit block"]; } - 410 [label="Exit when branch result"]; - 411 [label="Exit when"]; + 408 [label="Exit when branch result"]; + 409 [label="Exit when"]; } - 412 [label="Access variable R|/b|"]; - 413 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 410 [label="Access variable R|/b|"]; + 411 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; subgraph cluster_86 { color=blue - 414 [label="Enter when"]; + 412 [label="Enter when"]; subgraph cluster_87 { color=blue - 415 [label="Enter when branch condition "]; - 416 [label="Access variable R|/b|"]; - 417 [label="Access variable R|/a|"]; - 418 [label="Equality operator ==="]; - 419 [label="Exit when branch condition"]; + 413 [label="Enter when branch condition "]; + 414 [label="Access variable R|/b|"]; + 415 [label="Access variable R|/a|"]; + 416 [label="Equality operator ==="]; + 417 [label="Exit when branch condition"]; } - 420 [label="Synthetic else branch"]; - 421 [label="Enter when branch result"]; + 418 [label="Synthetic else branch"]; + 419 [label="Enter when branch result"]; subgraph cluster_88 { color=blue - 422 [label="Enter block"]; - 423 [label="Access variable R|/b|"]; - 424 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 425 [label="Exit block"]; + 420 [label="Enter block"]; + 421 [label="Access variable R|/b|"]; + 422 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 423 [label="Exit block"]; } - 426 [label="Exit when branch result"]; - 427 [label="Exit when"]; + 424 [label="Exit when branch result"]; + 425 [label="Exit when"]; } - 428 [label="Access variable R|/b|"]; - 429 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; - 430 [label="Exit block"]; + 426 [label="Access variable R|/b|"]; + 427 [label="Function call: R|/b|.R|kotlin/Int.inc#|()" style="filled" fillcolor=yellow]; + 428 [label="Exit block"]; } - 431 [label="Exit function test_10" style="filled" fillcolor=red]; + 429 [label="Exit function test_10" style="filled" fillcolor=red]; } + 362 -> {363}; + 363 -> {364}; 364 -> {365}; 365 -> {366}; 366 -> {367}; 367 -> {368}; 368 -> {369}; - 369 -> {370}; - 370 -> {371}; - 371 -> {372 373}; - 372 -> {379}; + 369 -> {370 371}; + 370 -> {377}; + 371 -> {372}; + 372 -> {373}; 373 -> {374}; 374 -> {375}; 375 -> {376}; @@ -1099,10 +1097,10 @@ digraph nullability_kt { 382 -> {383}; 383 -> {384}; 384 -> {385}; - 385 -> {386}; - 386 -> {387}; - 387 -> {388 389}; - 388 -> {395}; + 385 -> {386 387}; + 386 -> {393}; + 387 -> {388}; + 388 -> {389}; 389 -> {390}; 390 -> {391}; 391 -> {392}; @@ -1115,10 +1113,10 @@ digraph nullability_kt { 398 -> {399}; 399 -> {400}; 400 -> {401}; - 401 -> {402}; - 402 -> {403}; - 403 -> {404 405}; - 404 -> {411}; + 401 -> {402 403}; + 402 -> {409}; + 403 -> {404}; + 404 -> {405}; 405 -> {406}; 406 -> {407}; 407 -> {408}; @@ -1131,10 +1129,10 @@ digraph nullability_kt { 414 -> {415}; 415 -> {416}; 416 -> {417}; - 417 -> {418}; - 418 -> {419}; - 419 -> {420 421}; - 420 -> {427}; + 417 -> {418 419}; + 418 -> {425}; + 419 -> {420}; + 420 -> {421}; 421 -> {422}; 422 -> {423}; 423 -> {424}; @@ -1143,122 +1141,122 @@ digraph nullability_kt { 426 -> {427}; 427 -> {428}; 428 -> {429}; - 429 -> {430}; - 430 -> {431}; subgraph cluster_89 { color=red - 432 [label="Enter function test_11" style="filled" fillcolor=red]; + 430 [label="Enter function test_11" style="filled" fillcolor=red]; subgraph cluster_90 { color=blue - 433 [label="Enter block"]; + 431 [label="Enter block"]; subgraph cluster_91 { color=blue - 434 [label="Enter when"]; + 432 [label="Enter when"]; subgraph cluster_92 { color=blue - 435 [label="Enter when branch condition "]; - 436 [label="Access variable R|/q|"]; + 433 [label="Enter when branch condition "]; + 434 [label="Access variable R|/q|"]; + 435 [label="Enter safe call"]; + 436 [label="Access variable R|/QImpl.data|"]; 437 [label="Enter safe call"]; - 438 [label="Access variable R|/QImpl.data|"]; + 438 [label="Access variable R|/MyData.s|"]; 439 [label="Enter safe call"]; - 440 [label="Access variable R|/MyData.s|"]; - 441 [label="Enter safe call"]; - 442 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 440 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 441 [label="Exit safe call"]; + 442 [label="Exit safe call"]; 443 [label="Exit safe call"]; - 444 [label="Exit safe call"]; - 445 [label="Exit safe call"]; - 446 [label="Const: Null(null)"]; - 447 [label="Equality operator !="]; - 448 [label="Exit when branch condition"]; + 444 [label="Const: Null(null)"]; + 445 [label="Equality operator !="]; + 446 [label="Exit when branch condition"]; } - 449 [label="Synthetic else branch"]; - 450 [label="Enter when branch result"]; + 447 [label="Synthetic else branch"]; + 448 [label="Enter when branch result"]; subgraph cluster_93 { color=blue - 451 [label="Enter block"]; - 452 [label="Access variable R|/q|"]; - 453 [label="Smart cast: R|/q|"]; - 454 [label="Access variable R|/QImpl.data|"]; - 455 [label="Smart cast: R|/q|.R|/QImpl.data|"]; - 456 [label="Access variable R|/q|"]; - 457 [label="Smart cast: R|/q|"]; - 458 [label="Access variable R|/QImpl.data|"]; - 459 [label="Smart cast: R|/q|.R|/QImpl.data|"]; - 460 [label="Access variable R|/MyData.s|"]; - 461 [label="Access variable R|/q|"]; - 462 [label="Smart cast: R|/q|"]; - 463 [label="Access variable R|/QImpl.data|"]; - 464 [label="Smart cast: R|/q|.R|/QImpl.data|"]; - 465 [label="Access variable R|/MyData.s|"]; - 466 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 449 [label="Enter block"]; + 450 [label="Access variable R|/q|"]; + 451 [label="Smart cast: R|/q|"]; + 452 [label="Access variable R|/QImpl.data|"]; + 453 [label="Smart cast: R|/q|.R|/QImpl.data|"]; + 454 [label="Access variable R|/q|"]; + 455 [label="Smart cast: R|/q|"]; + 456 [label="Access variable R|/QImpl.data|"]; + 457 [label="Smart cast: R|/q|.R|/QImpl.data|"]; + 458 [label="Access variable R|/MyData.s|"]; + 459 [label="Access variable R|/q|"]; + 460 [label="Smart cast: R|/q|"]; + 461 [label="Access variable R|/QImpl.data|"]; + 462 [label="Smart cast: R|/q|.R|/QImpl.data|"]; + 463 [label="Access variable R|/MyData.s|"]; + 464 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 465 [label="Access variable R|/q2|"]; + 466 [label="Access variable R|/QImpl.data|"]; 467 [label="Access variable R|/q2|"]; 468 [label="Access variable R|/QImpl.data|"]; - 469 [label="Access variable R|/q2|"]; - 470 [label="Access variable R|/QImpl.data|"]; - 471 [label="Access variable R|/MyData.s#|"]; - 472 [label="Access variable R|/q2|"]; - 473 [label="Access variable R|/QImpl.data|"]; - 474 [label="Access variable R|/MyData.s#|"]; - 475 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 469 [label="Access variable R|/MyData.s#|"]; + 470 [label="Access variable R|/q2|"]; + 471 [label="Access variable R|/QImpl.data|"]; + 472 [label="Access variable R|/MyData.s#|"]; + 473 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; subgraph cluster_94 { color=blue - 476 [label="Enter when"]; + 474 [label="Enter when"]; subgraph cluster_95 { color=blue - 477 [label="Enter when branch condition "]; - 478 [label="Access variable R|/q2|"]; - 479 [label="Access variable R|/QImpl.data|"]; - 480 [label="Const: Null(null)"]; - 481 [label="Equality operator !="]; - 482 [label="Exit when branch condition"]; + 475 [label="Enter when branch condition "]; + 476 [label="Access variable R|/q2|"]; + 477 [label="Access variable R|/QImpl.data|"]; + 478 [label="Const: Null(null)"]; + 479 [label="Equality operator !="]; + 480 [label="Exit when branch condition"]; } - 483 [label="Synthetic else branch"]; - 484 [label="Enter when branch result"]; + 481 [label="Synthetic else branch"]; + 482 [label="Enter when branch result"]; subgraph cluster_96 { color=blue - 485 [label="Enter block"]; - 486 [label="Access variable R|/q2|"]; - 487 [label="Access variable R|/QImpl.data|"]; - 488 [label="Smart cast: R|/q2|.R|/QImpl.data|"]; - 489 [label="Access variable R|/MyData.s|"]; - 490 [label="Access variable R|/q2|"]; - 491 [label="Access variable R|/QImpl.data|"]; - 492 [label="Smart cast: R|/q2|.R|/QImpl.data|"]; - 493 [label="Access variable R|/MyData.s|"]; - 494 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 495 [label="Exit block"]; + 483 [label="Enter block"]; + 484 [label="Access variable R|/q2|"]; + 485 [label="Access variable R|/QImpl.data|"]; + 486 [label="Smart cast: R|/q2|.R|/QImpl.data|"]; + 487 [label="Access variable R|/MyData.s|"]; + 488 [label="Access variable R|/q2|"]; + 489 [label="Access variable R|/QImpl.data|"]; + 490 [label="Smart cast: R|/q2|.R|/QImpl.data|"]; + 491 [label="Access variable R|/MyData.s|"]; + 492 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 493 [label="Exit block"]; } - 496 [label="Exit when branch result"]; - 497 [label="Exit when"]; + 494 [label="Exit when branch result"]; + 495 [label="Exit when"]; } - 498 [label="Exit block"]; + 496 [label="Exit block"]; } - 499 [label="Exit when branch result"]; - 500 [label="Exit when"]; + 497 [label="Exit when branch result"]; + 498 [label="Exit when"]; } - 501 [label="Exit block"]; + 499 [label="Exit block"]; } - 502 [label="Exit function test_11" style="filled" fillcolor=red]; + 500 [label="Exit function test_11" style="filled" fillcolor=red]; } + 430 -> {431}; + 431 -> {432}; 432 -> {433}; 433 -> {434}; - 434 -> {435}; + 434 -> {435 441}; 435 -> {436}; - 436 -> {437 443}; + 436 -> {437 441}; 437 -> {438}; - 438 -> {439 443}; + 438 -> {439 442}; 439 -> {440}; - 440 -> {441 444}; + 440 -> {443}; 441 -> {442}; - 442 -> {445}; + 442 -> {443}; 443 -> {444}; 444 -> {445}; 445 -> {446}; - 446 -> {447}; - 447 -> {448}; - 448 -> {449 450}; - 449 -> {500}; + 446 -> {447 448}; + 447 -> {498}; + 448 -> {449}; + 449 -> {450}; 450 -> {451}; 451 -> {452}; 452 -> {453}; @@ -1289,10 +1287,10 @@ digraph nullability_kt { 477 -> {478}; 478 -> {479}; 479 -> {480}; - 480 -> {481}; - 481 -> {482}; - 482 -> {483 484}; - 483 -> {497}; + 480 -> {481 482}; + 481 -> {495}; + 482 -> {483}; + 483 -> {484}; 484 -> {485}; 485 -> {486}; 486 -> {487}; @@ -1309,82 +1307,82 @@ digraph nullability_kt { 497 -> {498}; 498 -> {499}; 499 -> {500}; - 500 -> {501}; - 501 -> {502}; subgraph cluster_97 { color=red - 503 [label="Enter function test_12" style="filled" fillcolor=red]; + 501 [label="Enter function test_12" style="filled" fillcolor=red]; subgraph cluster_98 { color=blue - 504 [label="Enter block"]; + 502 [label="Enter block"]; subgraph cluster_99 { color=blue - 505 [label="Enter when"]; + 503 [label="Enter when"]; subgraph cluster_100 { color=blue - 506 [label="Enter when branch condition "]; - 507 [label="Access variable R|/q|"]; + 504 [label="Enter when branch condition "]; + 505 [label="Access variable R|/q|"]; + 506 [label="Enter safe call"]; + 507 [label="Access variable R|/QImplWithCustomGetter.data|"]; 508 [label="Enter safe call"]; - 509 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 509 [label="Access variable R|/MyData.s|"]; 510 [label="Enter safe call"]; - 511 [label="Access variable R|/MyData.s|"]; - 512 [label="Enter safe call"]; - 513 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 511 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 512 [label="Exit safe call"]; + 513 [label="Exit safe call"]; 514 [label="Exit safe call"]; - 515 [label="Exit safe call"]; - 516 [label="Exit safe call"]; - 517 [label="Const: Null(null)"]; - 518 [label="Equality operator !="]; - 519 [label="Exit when branch condition"]; + 515 [label="Const: Null(null)"]; + 516 [label="Equality operator !="]; + 517 [label="Exit when branch condition"]; } - 520 [label="Synthetic else branch"]; - 521 [label="Enter when branch result"]; + 518 [label="Synthetic else branch"]; + 519 [label="Enter when branch result"]; subgraph cluster_101 { color=blue - 522 [label="Enter block"]; - 523 [label="Access variable R|/q|"]; - 524 [label="Smart cast: R|/q|"]; - 525 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 526 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; - 527 [label="Access variable R|/q|"]; - 528 [label="Smart cast: R|/q|"]; - 529 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 530 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; - 531 [label="Access variable R|/MyData.s#|"]; - 532 [label="Access variable R|/q|"]; - 533 [label="Smart cast: R|/q|"]; - 534 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 535 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; - 536 [label="Access variable R|/MyData.s#|"]; - 537 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 538 [label="Exit block"]; + 520 [label="Enter block"]; + 521 [label="Access variable R|/q|"]; + 522 [label="Smart cast: R|/q|"]; + 523 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 524 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; + 525 [label="Access variable R|/q|"]; + 526 [label="Smart cast: R|/q|"]; + 527 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 528 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; + 529 [label="Access variable R|/MyData.s#|"]; + 530 [label="Access variable R|/q|"]; + 531 [label="Smart cast: R|/q|"]; + 532 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 533 [label="Smart cast: R|/q|.R|/QImplWithCustomGetter.data|"]; + 534 [label="Access variable R|/MyData.s#|"]; + 535 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 536 [label="Exit block"]; } - 539 [label="Exit when branch result"]; - 540 [label="Exit when"]; + 537 [label="Exit when branch result"]; + 538 [label="Exit when"]; } - 541 [label="Exit block"]; + 539 [label="Exit block"]; } - 542 [label="Exit function test_12" style="filled" fillcolor=red]; + 540 [label="Exit function test_12" style="filled" fillcolor=red]; } + 501 -> {502}; + 502 -> {503}; 503 -> {504}; 504 -> {505}; - 505 -> {506}; + 505 -> {506 512}; 506 -> {507}; - 507 -> {508 514}; + 507 -> {508 512}; 508 -> {509}; - 509 -> {510 514}; + 509 -> {510 513}; 510 -> {511}; - 511 -> {512 515}; + 511 -> {514}; 512 -> {513}; - 513 -> {516}; + 513 -> {514}; 514 -> {515}; 515 -> {516}; 516 -> {517}; - 517 -> {518}; - 518 -> {519}; - 519 -> {520 521}; - 520 -> {540}; + 517 -> {518 519}; + 518 -> {538}; + 519 -> {520}; + 520 -> {521}; 521 -> {522}; 522 -> {523}; 523 -> {524}; @@ -1404,82 +1402,82 @@ digraph nullability_kt { 537 -> {538}; 538 -> {539}; 539 -> {540}; - 540 -> {541}; - 541 -> {542}; subgraph cluster_102 { color=red - 543 [label="Enter function test_13" style="filled" fillcolor=red]; + 541 [label="Enter function test_13" style="filled" fillcolor=red]; subgraph cluster_103 { color=blue - 544 [label="Enter block"]; + 542 [label="Enter block"]; subgraph cluster_104 { color=blue - 545 [label="Enter when"]; + 543 [label="Enter when"]; subgraph cluster_105 { color=blue - 546 [label="Enter when branch condition "]; - 547 [label="Access variable R|/q|"]; + 544 [label="Enter when branch condition "]; + 545 [label="Access variable R|/q|"]; + 546 [label="Enter safe call"]; + 547 [label="Access variable R|/QImplMutable.data|"]; 548 [label="Enter safe call"]; - 549 [label="Access variable R|/QImplMutable.data|"]; + 549 [label="Access variable R|/MyData.s|"]; 550 [label="Enter safe call"]; - 551 [label="Access variable R|/MyData.s|"]; - 552 [label="Enter safe call"]; - 553 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 551 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 552 [label="Exit safe call"]; + 553 [label="Exit safe call"]; 554 [label="Exit safe call"]; - 555 [label="Exit safe call"]; - 556 [label="Exit safe call"]; - 557 [label="Const: Null(null)"]; - 558 [label="Equality operator !="]; - 559 [label="Exit when branch condition"]; + 555 [label="Const: Null(null)"]; + 556 [label="Equality operator !="]; + 557 [label="Exit when branch condition"]; } - 560 [label="Synthetic else branch"]; - 561 [label="Enter when branch result"]; + 558 [label="Synthetic else branch"]; + 559 [label="Enter when branch result"]; subgraph cluster_106 { color=blue - 562 [label="Enter block"]; - 563 [label="Access variable R|/q|"]; - 564 [label="Smart cast: R|/q|"]; - 565 [label="Access variable R|/QImplMutable.data|"]; - 566 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; - 567 [label="Access variable R|/q|"]; - 568 [label="Smart cast: R|/q|"]; - 569 [label="Access variable R|/QImplMutable.data|"]; - 570 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; - 571 [label="Access variable R|/MyData.s#|"]; - 572 [label="Access variable R|/q|"]; - 573 [label="Smart cast: R|/q|"]; - 574 [label="Access variable R|/QImplMutable.data|"]; - 575 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; - 576 [label="Access variable R|/MyData.s#|"]; - 577 [label="Function call: R|/q|.R|/QImplMutable.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; - 578 [label="Exit block"]; + 560 [label="Enter block"]; + 561 [label="Access variable R|/q|"]; + 562 [label="Smart cast: R|/q|"]; + 563 [label="Access variable R|/QImplMutable.data|"]; + 564 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; + 565 [label="Access variable R|/q|"]; + 566 [label="Smart cast: R|/q|"]; + 567 [label="Access variable R|/QImplMutable.data|"]; + 568 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; + 569 [label="Access variable R|/MyData.s#|"]; + 570 [label="Access variable R|/q|"]; + 571 [label="Smart cast: R|/q|"]; + 572 [label="Access variable R|/QImplMutable.data|"]; + 573 [label="Smart cast: R|/q|.R|/QImplMutable.data|"]; + 574 [label="Access variable R|/MyData.s#|"]; + 575 [label="Function call: R|/q|.R|/QImplMutable.data|.R|/MyData.s#|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow]; + 576 [label="Exit block"]; } - 579 [label="Exit when branch result"]; - 580 [label="Exit when"]; + 577 [label="Exit when branch result"]; + 578 [label="Exit when"]; } - 581 [label="Exit block"]; + 579 [label="Exit block"]; } - 582 [label="Exit function test_13" style="filled" fillcolor=red]; + 580 [label="Exit function test_13" style="filled" fillcolor=red]; } + 541 -> {542}; + 542 -> {543}; 543 -> {544}; 544 -> {545}; - 545 -> {546}; + 545 -> {546 552}; 546 -> {547}; - 547 -> {548 554}; + 547 -> {548 552}; 548 -> {549}; - 549 -> {550 554}; + 549 -> {550 553}; 550 -> {551}; - 551 -> {552 555}; + 551 -> {554}; 552 -> {553}; - 553 -> {556}; + 553 -> {554}; 554 -> {555}; 555 -> {556}; 556 -> {557}; - 557 -> {558}; - 558 -> {559}; - 559 -> {560 561}; - 560 -> {580}; + 557 -> {558 559}; + 558 -> {578}; + 559 -> {560}; + 560 -> {561}; 561 -> {562}; 562 -> {563}; 563 -> {564}; @@ -1499,55 +1497,55 @@ digraph nullability_kt { 577 -> {578}; 578 -> {579}; 579 -> {580}; - 580 -> {581}; - 581 -> {582}; subgraph cluster_107 { color=red - 583 [label="Enter function test_14" style="filled" fillcolor=red]; + 581 [label="Enter function test_14" style="filled" fillcolor=red]; subgraph cluster_108 { color=blue - 584 [label="Enter block"]; + 582 [label="Enter block"]; subgraph cluster_109 { color=blue - 585 [label="Enter when"]; + 583 [label="Enter when"]; subgraph cluster_110 { color=blue - 586 [label="Enter when branch condition "]; - 587 [label="Access variable R|/q|"]; - 588 [label="Access variable R|/Q.data|"]; - 589 [label="Const: Null(null)"]; - 590 [label="Equality operator =="]; - 591 [label="Exit when branch condition"]; + 584 [label="Enter when branch condition "]; + 585 [label="Access variable R|/q|"]; + 586 [label="Access variable R|/Q.data|"]; + 587 [label="Const: Null(null)"]; + 588 [label="Equality operator =="]; + 589 [label="Exit when branch condition"]; } - 592 [label="Synthetic else branch"]; - 593 [label="Enter when branch result"]; + 590 [label="Synthetic else branch"]; + 591 [label="Enter when branch result"]; subgraph cluster_111 { color=blue - 594 [label="Enter block"]; - 595 [label="Access variable R|/q|"]; - 596 [label="Access variable R|/Q.data|"]; - 597 [label="Smart cast: R|/q|.R|/Q.data|"]; - 598 [label="Access variable R|/MyData.s#|"]; - 599 [label="Exit block"]; + 592 [label="Enter block"]; + 593 [label="Access variable R|/q|"]; + 594 [label="Access variable R|/Q.data|"]; + 595 [label="Smart cast: R|/q|.R|/Q.data|"]; + 596 [label="Access variable R|/MyData.s#|"]; + 597 [label="Exit block"]; } - 600 [label="Exit when branch result"]; - 601 [label="Exit when"]; + 598 [label="Exit when branch result"]; + 599 [label="Exit when"]; } - 602 [label="Exit block"]; + 600 [label="Exit block"]; } - 603 [label="Exit function test_14" style="filled" fillcolor=red]; + 601 [label="Exit function test_14" style="filled" fillcolor=red]; } + 581 -> {582}; + 582 -> {583}; 583 -> {584}; 584 -> {585}; 585 -> {586}; 586 -> {587}; 587 -> {588}; 588 -> {589}; - 589 -> {590}; - 590 -> {591}; - 591 -> {592 593}; - 592 -> {601}; + 589 -> {590 591}; + 590 -> {599}; + 591 -> {592}; + 592 -> {593}; 593 -> {594}; 594 -> {595}; 595 -> {596}; @@ -1556,7 +1554,5 @@ digraph nullability_kt { 598 -> {599}; 599 -> {600}; 600 -> {601}; - 601 -> {602}; - 602 -> {603}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot index d5e986edaa7..cfd5292c418 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot @@ -6,108 +6,107 @@ digraph assignSafeCall_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Const: Int(1)"]; - 4 [label="Exit property" style="filled" fillcolor=red]; + 1 [label="Enter property" style="filled" fillcolor=red]; + 2 [label="Const: Int(1)"]; + 3 [label="Exit property" style="filled" fillcolor=red]; } - 5 [label="Exit class A" style="filled" fillcolor=red]; + 4 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_2 { color=blue - 6 [label="Enter function bar" style="filled" fillcolor=red]; + 5 [label="Enter function bar" style="filled" fillcolor=red]; subgraph cluster_3 { color=blue - 7 [label="Enter block"]; - 8 [label="Exit block"]; + 6 [label="Enter block"]; + 7 [label="Exit block"]; } - 9 [label="Exit function bar" style="filled" fillcolor=red]; + 8 [label="Exit function bar" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue - 10 [label="Enter function foo" style="filled" fillcolor=red]; + 9 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue - 11 [label="Enter block"]; - 12 [label="Const: Int(1)"]; - 13 [label="Jump: ^foo Int(1)"]; - 14 [label="Stub" style="filled" fillcolor=gray]; - 15 [label="Exit block" style="filled" fillcolor=gray]; + 10 [label="Enter block"]; + 11 [label="Const: Int(1)"]; + 12 [label="Jump: ^foo Int(1)"]; + 13 [label="Stub" style="filled" fillcolor=gray]; + 14 [label="Exit block" style="filled" fillcolor=gray]; } - 16 [label="Exit function foo" style="filled" fillcolor=red]; + 15 [label="Exit function foo" style="filled" fillcolor=red]; } subgraph cluster_6 { color=blue - 17 [label="Enter function " style="filled" fillcolor=red]; - 18 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 19 [label="Exit function " style="filled" fillcolor=red]; + 16 [label="Enter function " style="filled" fillcolor=red]; + 17 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 18 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {5} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {4} [style=dotted]; + 0 -> {1} [style=dashed]; + 1 -> {2}; 2 -> {3}; - 3 -> {4}; - 4 -> {5} [color=green]; - 5 -> {6 10 17} [color=green]; - 5 -> {6 10 17} [style=dashed]; + 3 -> {4} [color=green]; + 4 -> {5 9 16} [color=green]; + 4 -> {5 9 16} [style=dashed]; + 5 -> {6}; 6 -> {7}; 7 -> {8}; - 8 -> {9}; + 9 -> {10}; 10 -> {11}; 11 -> {12}; - 12 -> {13}; - 13 -> {16}; + 12 -> {15}; + 12 -> {13} [style=dotted]; 13 -> {14} [style=dotted]; 14 -> {15} [style=dotted]; - 15 -> {16} [style=dotted]; + 16 -> {17}; 17 -> {18}; - 18 -> {19}; subgraph cluster_7 { color=red - 20 [label="Enter function test_1" style="filled" fillcolor=red]; + 19 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 21 [label="Enter block"]; - 22 [label="Access variable R|/a|"]; - 23 [label="Enter safe call"]; - 24 [label="Access variable R|/A.x|"]; - 25 [label="Exit safe call"]; - 26 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 20 [label="Enter block"]; + 21 [label="Access variable R|/a|"]; + 22 [label="Enter safe call"]; + 23 [label="Access variable R|/A.x|"]; + 24 [label="Exit safe call"]; + 25 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_9 { color=blue - 27 [label="Enter when"]; + 26 [label="Enter when"]; subgraph cluster_10 { color=blue - 28 [label="Enter when branch condition "]; - 29 [label="Access variable R|/x|"]; - 30 [label="Const: Null(null)"]; - 31 [label="Equality operator !="]; - 32 [label="Exit when branch condition"]; + 27 [label="Enter when branch condition "]; + 28 [label="Access variable R|/x|"]; + 29 [label="Const: Null(null)"]; + 30 [label="Equality operator !="]; + 31 [label="Exit when branch condition"]; } - 33 [label="Synthetic else branch"]; - 34 [label="Enter when branch result"]; + 32 [label="Synthetic else branch"]; + 33 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 35 [label="Enter block"]; - 36 [label="Access variable R|/a|"]; - 37 [label="Smart cast: R|/a|"]; - 38 [label="Function call: R|/a|.R|/A.bar|()" style="filled" fillcolor=yellow]; - 39 [label="Exit block"]; + 34 [label="Enter block"]; + 35 [label="Access variable R|/a|"]; + 36 [label="Smart cast: R|/a|"]; + 37 [label="Function call: R|/a|.R|/A.bar|()" style="filled" fillcolor=yellow]; + 38 [label="Exit block"]; } - 40 [label="Exit when branch result"]; - 41 [label="Exit when"]; + 39 [label="Exit when branch result"]; + 40 [label="Exit when"]; } - 42 [label="Exit block"]; + 41 [label="Exit block"]; } - 43 [label="Exit function test_1" style="filled" fillcolor=red]; + 42 [label="Exit function test_1" style="filled" fillcolor=red]; } + 19 -> {20}; 20 -> {21}; - 21 -> {22}; - 22 -> {23 25}; + 21 -> {22 24}; + 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; @@ -116,9 +115,9 @@ digraph assignSafeCall_kt { 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33 34}; - 33 -> {41}; + 31 -> {32 33}; + 32 -> {40}; + 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; @@ -127,50 +126,50 @@ digraph assignSafeCall_kt { 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; subgraph cluster_12 { color=red - 44 [label="Enter function test_2" style="filled" fillcolor=red]; + 43 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_13 { color=blue - 45 [label="Enter block"]; - 46 [label="Access variable R|/a|"]; - 47 [label="Enter safe call"]; - 48 [label="Function call: $subj$.R|/A.foo|()" style="filled" fillcolor=yellow]; - 49 [label="Exit safe call"]; - 50 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 44 [label="Enter block"]; + 45 [label="Access variable R|/a|"]; + 46 [label="Enter safe call"]; + 47 [label="Function call: $subj$.R|/A.foo|()" style="filled" fillcolor=yellow]; + 48 [label="Exit safe call"]; + 49 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_14 { color=blue - 51 [label="Enter when"]; + 50 [label="Enter when"]; subgraph cluster_15 { color=blue - 52 [label="Enter when branch condition "]; - 53 [label="Access variable R|/x|"]; - 54 [label="Const: Null(null)"]; - 55 [label="Equality operator !="]; - 56 [label="Exit when branch condition"]; + 51 [label="Enter when branch condition "]; + 52 [label="Access variable R|/x|"]; + 53 [label="Const: Null(null)"]; + 54 [label="Equality operator !="]; + 55 [label="Exit when branch condition"]; } - 57 [label="Synthetic else branch"]; - 58 [label="Enter when branch result"]; + 56 [label="Synthetic else branch"]; + 57 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 59 [label="Enter block"]; - 60 [label="Access variable R|/a|"]; - 61 [label="Smart cast: R|/a|"]; - 62 [label="Function call: R|/a|.R|/A.bar|()" style="filled" fillcolor=yellow]; - 63 [label="Exit block"]; + 58 [label="Enter block"]; + 59 [label="Access variable R|/a|"]; + 60 [label="Smart cast: R|/a|"]; + 61 [label="Function call: R|/a|.R|/A.bar|()" style="filled" fillcolor=yellow]; + 62 [label="Exit block"]; } - 64 [label="Exit when branch result"]; - 65 [label="Exit when"]; + 63 [label="Exit when branch result"]; + 64 [label="Exit when"]; } - 66 [label="Exit block"]; + 65 [label="Exit block"]; } - 67 [label="Exit function test_2" style="filled" fillcolor=red]; + 66 [label="Exit function test_2" style="filled" fillcolor=red]; } + 43 -> {44}; 44 -> {45}; - 45 -> {46}; - 46 -> {47 49}; + 45 -> {46 48}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; 49 -> {50}; @@ -179,9 +178,9 @@ digraph assignSafeCall_kt { 52 -> {53}; 53 -> {54}; 54 -> {55}; - 55 -> {56}; - 56 -> {57 58}; - 57 -> {65}; + 55 -> {56 57}; + 56 -> {64}; + 57 -> {58}; 58 -> {59}; 59 -> {60}; 60 -> {61}; @@ -190,41 +189,41 @@ digraph assignSafeCall_kt { 63 -> {64}; 64 -> {65}; 65 -> {66}; - 66 -> {67}; subgraph cluster_17 { color=red - 68 [label="Enter function test_3" style="filled" fillcolor=red]; + 67 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_18 { color=blue - 69 [label="Enter block"]; - 70 [label="Access variable R|/x|"]; - 71 [label="Type operator: (R|/x| as? R|A|)"]; - 72 [label="Exit lhs of ?:"]; - 73 [label="Enter rhs of ?:"]; - 74 [label="Jump: ^test_3 Unit"]; - 75 [label="Stub" style="filled" fillcolor=gray]; - 76 [label="Lhs of ?: is not null"]; - 77 [label="Exit ?:"]; - 78 [label="Variable declaration: lval a: R|A|"]; - 79 [label="Access variable R|/a|"]; - 80 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 81 [label="Access variable R|/x|"]; - 82 [label="Smart cast: R|/x|"]; - 83 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; - 84 [label="Exit block"]; + 68 [label="Enter block"]; + 69 [label="Access variable R|/x|"]; + 70 [label="Type operator: (R|/x| as? R|A|)"]; + 71 [label="Exit lhs of ?:"]; + 72 [label="Enter rhs of ?:"]; + 73 [label="Jump: ^test_3 Unit"]; + 74 [label="Stub" style="filled" fillcolor=gray]; + 75 [label="Lhs of ?: is not null"]; + 76 [label="Exit ?:"]; + 77 [label="Variable declaration: lval a: R|A|"]; + 78 [label="Access variable R|/a|"]; + 79 [label="Function call: R|/a|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 80 [label="Access variable R|/x|"]; + 81 [label="Smart cast: R|/x|"]; + 82 [label="Function call: R|/x|.R|/A.foo|()" style="filled" fillcolor=yellow]; + 83 [label="Exit block"]; } - 85 [label="Exit function test_3" style="filled" fillcolor=red]; + 84 [label="Exit function test_3" style="filled" fillcolor=red]; } + 67 -> {68}; 68 -> {69}; 69 -> {70}; 70 -> {71}; - 71 -> {72}; - 72 -> {73 76}; - 73 -> {74}; - 74 -> {85}; - 74 -> {75} [style=dotted]; - 75 -> {77} [style=dotted]; + 71 -> {72 75}; + 72 -> {73}; + 73 -> {84}; + 73 -> {74} [style=dotted]; + 74 -> {76} [style=dotted]; + 75 -> {76}; 76 -> {77}; 77 -> {78}; 78 -> {79}; @@ -233,71 +232,71 @@ digraph assignSafeCall_kt { 81 -> {82}; 82 -> {83}; 83 -> {84}; - 84 -> {85}; subgraph cluster_19 { color=red - 86 [label="Enter class B" style="filled" fillcolor=red]; - 87 [label="Exit class B" style="filled" fillcolor=red]; + 85 [label="Enter class B" style="filled" fillcolor=red]; + 86 [label="Exit class B" style="filled" fillcolor=red]; } subgraph cluster_20 { color=blue - 88 [label="Enter function bar" style="filled" fillcolor=red]; - 89 [label="Exit function bar" style="filled" fillcolor=red]; + 87 [label="Enter function bar" style="filled" fillcolor=red]; + 88 [label="Exit function bar" style="filled" fillcolor=red]; } subgraph cluster_21 { color=blue - 90 [label="Enter function foo" style="filled" fillcolor=red]; - 91 [label="Exit function foo" style="filled" fillcolor=red]; + 89 [label="Enter function foo" style="filled" fillcolor=red]; + 90 [label="Exit function foo" style="filled" fillcolor=red]; } - 86 -> {87} [color=green]; - 87 -> {88 90} [color=green]; - 87 -> {88 90} [style=dashed]; - 88 -> {89}; - 90 -> {91}; + 85 -> {86} [color=green]; + 86 -> {87 89} [color=green]; + 86 -> {87 89} [style=dashed]; + 87 -> {88}; + 89 -> {90}; subgraph cluster_22 { color=red - 92 [label="Enter function test_1" style="filled" fillcolor=red]; + 91 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_23 { color=blue - 93 [label="Enter block"]; - 94 [label="Access variable R|/a|"]; - 95 [label="Enter safe call"]; - 96 [label="Access variable R|/B.x|"]; - 97 [label="Exit safe call"]; - 98 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 92 [label="Enter block"]; + 93 [label="Access variable R|/a|"]; + 94 [label="Enter safe call"]; + 95 [label="Access variable R|/B.x|"]; + 96 [label="Exit safe call"]; + 97 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_24 { color=blue - 99 [label="Enter when"]; + 98 [label="Enter when"]; subgraph cluster_25 { color=blue - 100 [label="Enter when branch condition "]; - 101 [label="Access variable R|/x|"]; - 102 [label="Const: Null(null)"]; - 103 [label="Equality operator !="]; - 104 [label="Exit when branch condition"]; + 99 [label="Enter when branch condition "]; + 100 [label="Access variable R|/x|"]; + 101 [label="Const: Null(null)"]; + 102 [label="Equality operator !="]; + 103 [label="Exit when branch condition"]; } - 105 [label="Synthetic else branch"]; - 106 [label="Enter when branch result"]; + 104 [label="Synthetic else branch"]; + 105 [label="Enter when branch result"]; subgraph cluster_26 { color=blue - 107 [label="Enter block"]; - 108 [label="Access variable R|/a|"]; - 109 [label="Smart cast: R|/a|"]; - 110 [label="Function call: R|/a|.R|/B.bar|()" style="filled" fillcolor=yellow]; - 111 [label="Exit block"]; + 106 [label="Enter block"]; + 107 [label="Access variable R|/a|"]; + 108 [label="Smart cast: R|/a|"]; + 109 [label="Function call: R|/a|.R|/B.bar|()" style="filled" fillcolor=yellow]; + 110 [label="Exit block"]; } - 112 [label="Exit when branch result"]; - 113 [label="Exit when"]; + 111 [label="Exit when branch result"]; + 112 [label="Exit when"]; } - 114 [label="Exit block"]; + 113 [label="Exit block"]; } - 115 [label="Exit function test_1" style="filled" fillcolor=red]; + 114 [label="Exit function test_1" style="filled" fillcolor=red]; } + 91 -> {92}; 92 -> {93}; - 93 -> {94}; - 94 -> {95 97}; + 93 -> {94 96}; + 94 -> {95}; 95 -> {96}; 96 -> {97}; 97 -> {98}; @@ -306,9 +305,9 @@ digraph assignSafeCall_kt { 100 -> {101}; 101 -> {102}; 102 -> {103}; - 103 -> {104}; - 104 -> {105 106}; - 105 -> {113}; + 103 -> {104 105}; + 104 -> {112}; + 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; @@ -317,50 +316,50 @@ digraph assignSafeCall_kt { 111 -> {112}; 112 -> {113}; 113 -> {114}; - 114 -> {115}; subgraph cluster_27 { color=red - 116 [label="Enter function test_2" style="filled" fillcolor=red]; + 115 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_28 { color=blue - 117 [label="Enter block"]; - 118 [label="Access variable R|/a|"]; - 119 [label="Enter safe call"]; - 120 [label="Function call: $subj$.R|/B.foo|()" style="filled" fillcolor=yellow]; - 121 [label="Exit safe call"]; - 122 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 116 [label="Enter block"]; + 117 [label="Access variable R|/a|"]; + 118 [label="Enter safe call"]; + 119 [label="Function call: $subj$.R|/B.foo|()" style="filled" fillcolor=yellow]; + 120 [label="Exit safe call"]; + 121 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_29 { color=blue - 123 [label="Enter when"]; + 122 [label="Enter when"]; subgraph cluster_30 { color=blue - 124 [label="Enter when branch condition "]; - 125 [label="Access variable R|/x|"]; - 126 [label="Const: Null(null)"]; - 127 [label="Equality operator !="]; - 128 [label="Exit when branch condition"]; + 123 [label="Enter when branch condition "]; + 124 [label="Access variable R|/x|"]; + 125 [label="Const: Null(null)"]; + 126 [label="Equality operator !="]; + 127 [label="Exit when branch condition"]; } - 129 [label="Synthetic else branch"]; - 130 [label="Enter when branch result"]; + 128 [label="Synthetic else branch"]; + 129 [label="Enter when branch result"]; subgraph cluster_31 { color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/a|"]; - 133 [label="Smart cast: R|/a|"]; - 134 [label="Function call: R|/a|.R|/B.bar|()" style="filled" fillcolor=yellow]; - 135 [label="Exit block"]; + 130 [label="Enter block"]; + 131 [label="Access variable R|/a|"]; + 132 [label="Smart cast: R|/a|"]; + 133 [label="Function call: R|/a|.R|/B.bar|()" style="filled" fillcolor=yellow]; + 134 [label="Exit block"]; } - 136 [label="Exit when branch result"]; - 137 [label="Exit when"]; + 135 [label="Exit when branch result"]; + 136 [label="Exit when"]; } - 138 [label="Exit block"]; + 137 [label="Exit block"]; } - 139 [label="Exit function test_2" style="filled" fillcolor=red]; + 138 [label="Exit function test_2" style="filled" fillcolor=red]; } + 115 -> {116}; 116 -> {117}; - 117 -> {118}; - 118 -> {119 121}; + 117 -> {118 120}; + 118 -> {119}; 119 -> {120}; 120 -> {121}; 121 -> {122}; @@ -369,9 +368,9 @@ digraph assignSafeCall_kt { 124 -> {125}; 125 -> {126}; 126 -> {127}; - 127 -> {128}; - 128 -> {129 130}; - 129 -> {137}; + 127 -> {128 129}; + 128 -> {136}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; 132 -> {133}; @@ -380,41 +379,41 @@ digraph assignSafeCall_kt { 135 -> {136}; 136 -> {137}; 137 -> {138}; - 138 -> {139}; subgraph cluster_32 { color=red - 140 [label="Enter function test_3" style="filled" fillcolor=red]; + 139 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_33 { color=blue - 141 [label="Enter block"]; - 142 [label="Access variable R|/x|"]; - 143 [label="Type operator: (R|/x| as? R|B|)"]; - 144 [label="Exit lhs of ?:"]; - 145 [label="Enter rhs of ?:"]; - 146 [label="Jump: ^test_3 Unit"]; - 147 [label="Stub" style="filled" fillcolor=gray]; - 148 [label="Lhs of ?: is not null"]; - 149 [label="Exit ?:"]; - 150 [label="Variable declaration: lval a: R|B|"]; - 151 [label="Access variable R|/a|"]; - 152 [label="Function call: R|/a|.R|/B.foo|()" style="filled" fillcolor=yellow]; - 153 [label="Access variable R|/x|"]; - 154 [label="Smart cast: R|/x|"]; - 155 [label="Function call: R|/x|.R|/B.foo|()" style="filled" fillcolor=yellow]; - 156 [label="Exit block"]; + 140 [label="Enter block"]; + 141 [label="Access variable R|/x|"]; + 142 [label="Type operator: (R|/x| as? R|B|)"]; + 143 [label="Exit lhs of ?:"]; + 144 [label="Enter rhs of ?:"]; + 145 [label="Jump: ^test_3 Unit"]; + 146 [label="Stub" style="filled" fillcolor=gray]; + 147 [label="Lhs of ?: is not null"]; + 148 [label="Exit ?:"]; + 149 [label="Variable declaration: lval a: R|B|"]; + 150 [label="Access variable R|/a|"]; + 151 [label="Function call: R|/a|.R|/B.foo|()" style="filled" fillcolor=yellow]; + 152 [label="Access variable R|/x|"]; + 153 [label="Smart cast: R|/x|"]; + 154 [label="Function call: R|/x|.R|/B.foo|()" style="filled" fillcolor=yellow]; + 155 [label="Exit block"]; } - 157 [label="Exit function test_3" style="filled" fillcolor=red]; + 156 [label="Exit function test_3" style="filled" fillcolor=red]; } + 139 -> {140}; 140 -> {141}; 141 -> {142}; 142 -> {143}; - 143 -> {144}; - 144 -> {145 148}; - 145 -> {146}; - 146 -> {157}; - 146 -> {147} [style=dotted]; - 147 -> {149} [style=dotted]; + 143 -> {144 147}; + 144 -> {145}; + 145 -> {156}; + 145 -> {146} [style=dotted]; + 146 -> {148} [style=dotted]; + 147 -> {148}; 148 -> {149}; 149 -> {150}; 150 -> {151}; @@ -423,6 +422,5 @@ digraph assignSafeCall_kt { 153 -> {154}; 154 -> {155}; 155 -> {156}; - 156 -> {157}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot index 7d052a73390..fcc19e38c3b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot @@ -50,34 +50,33 @@ digraph smartCastInInit_kt { subgraph cluster_5 { color=red 14 [label="Enter class Main" style="filled" fillcolor=red]; - 15 [label="Part of class initialization"]; subgraph cluster_6 { color=blue - 16 [label="Enter init block" style="filled" fillcolor=red]; + 15 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 17 [label="Enter block"]; - 18 [label="Function call: R|/s|()" style="filled" fillcolor=yellow]; - 19 [label="Assignment: R|/Main.x|"]; - 20 [label="Access variable R|/Main.x|"]; - 21 [label="Smart cast: this@R|/Main|.R|/Main.x|"]; - 22 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()" style="filled" fillcolor=yellow]; - 23 [label="Exit block"]; + 16 [label="Enter block"]; + 17 [label="Function call: R|/s|()" style="filled" fillcolor=yellow]; + 18 [label="Assignment: R|/Main.x|"]; + 19 [label="Access variable R|/Main.x|"]; + 20 [label="Smart cast: this@R|/Main|.R|/Main.x|"]; + 21 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()" style="filled" fillcolor=yellow]; + 22 [label="Exit block"]; } - 24 [label="Exit init block" style="filled" fillcolor=red]; + 23 [label="Exit init block" style="filled" fillcolor=red]; } - 25 [label="Exit class Main" style="filled" fillcolor=red]; + 24 [label="Exit class Main" style="filled" fillcolor=red]; } subgraph cluster_8 { color=blue - 26 [label="Enter function " style="filled" fillcolor=red]; - 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 28 [label="Exit function " style="filled" fillcolor=red]; + 25 [label="Enter function " style="filled" fillcolor=red]; + 26 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 27 [label="Exit function " style="filled" fillcolor=red]; } 14 -> {15} [color=green]; - 15 -> {16} [color=green]; - 15 -> {25} [style=dotted]; - 15 -> {16} [style=dashed]; + 14 -> {24} [style=dotted]; + 14 -> {15} [style=dashed]; + 15 -> {16}; 16 -> {17}; 17 -> {18}; 18 -> {19}; @@ -85,11 +84,10 @@ digraph smartCastInInit_kt { 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {24}; + 23 -> {24} [color=green]; 24 -> {25} [color=green]; - 25 -> {26} [color=green]; - 25 -> {26} [style=dashed]; + 24 -> {25} [style=dashed]; + 25 -> {26}; 26 -> {27}; - 27 -> {28}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot index 4f2bbba9099..fa0bc5ee2ba 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot @@ -6,133 +6,123 @@ digraph smartcastInByClause_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Access variable R|/path|"]; - 4 [label="Exit property" style="filled" fillcolor=red]; + 1 [label="Enter property" style="filled" fillcolor=red]; + 2 [label="Access variable R|/path|"]; + 3 [label="Exit property" style="filled" fillcolor=red]; } - 5 [label="Part of class initialization"]; subgraph cluster_2 { color=blue - 6 [label="Enter property" style="filled" fillcolor=red]; - 7 [label="Access variable R|/index|"]; - 8 [label="Exit property" style="filled" fillcolor=red]; + 4 [label="Enter property" style="filled" fillcolor=red]; + 5 [label="Access variable R|/index|"]; + 6 [label="Exit property" style="filled" fillcolor=red]; } - 9 [label="Exit class A" style="filled" fillcolor=red]; + 7 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_3 { color=blue - 10 [label="Enter function " style="filled" fillcolor=red]; - 11 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 12 [label="Exit function " style="filled" fillcolor=red]; + 8 [label="Enter function " style="filled" fillcolor=red]; + 9 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 10 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {5} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {7} [style=dotted]; + 0 -> {1 4} [style=dashed]; + 1 -> {2}; 2 -> {3}; - 3 -> {4}; - 4 -> {5} [color=green]; - 5 -> {6} [color=green]; - 5 -> {9} [style=dotted]; - 5 -> {6} [style=dashed]; - 6 -> {7}; - 7 -> {8}; - 8 -> {9} [color=green]; - 9 -> {10} [color=green]; - 9 -> {10} [style=dashed]; - 10 -> {11}; - 11 -> {12}; + 3 -> {4} [color=green]; + 4 -> {5}; + 5 -> {6}; + 6 -> {7} [color=green]; + 7 -> {8} [color=green]; + 7 -> {8} [style=dashed]; + 8 -> {9}; + 9 -> {10}; subgraph cluster_4 { color=red - 13 [label="Enter class Base" style="filled" fillcolor=red]; - 14 [label="Exit class Base" style="filled" fillcolor=red]; + 11 [label="Enter class Base" style="filled" fillcolor=red]; + 12 [label="Exit class Base" style="filled" fillcolor=red]; } - 13 -> {14} [color=green]; + 11 -> {12} [color=green]; subgraph cluster_5 { color=red - 15 [label="Enter class Derived" style="filled" fillcolor=red]; - 16 [label="Part of class initialization"]; + 13 [label="Enter class Derived" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 17 [label="Enter property" style="filled" fillcolor=red]; - 18 [label="Access variable R|/index|"]; - 19 [label="Exit property" style="filled" fillcolor=red]; + 14 [label="Enter property" style="filled" fillcolor=red]; + 15 [label="Access variable R|/index|"]; + 16 [label="Exit property" style="filled" fillcolor=red]; } - 20 [label="Exit class Derived" style="filled" fillcolor=red]; + 17 [label="Exit class Derived" style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 23 [label="Exit function " style="filled" fillcolor=red]; + 18 [label="Enter function " style="filled" fillcolor=red]; + 19 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 20 [label="Exit function " style="filled" fillcolor=red]; } - 15 -> {16} [color=green]; + 13 -> {14} [color=green]; + 13 -> {17} [style=dotted]; + 13 -> {14} [style=dashed]; + 14 -> {15}; + 15 -> {16}; 16 -> {17} [color=green]; - 16 -> {20} [style=dotted]; - 16 -> {17} [style=dashed]; - 17 -> {18}; + 17 -> {18} [color=green]; + 17 -> {18} [style=dashed]; 18 -> {19}; - 19 -> {20} [color=green]; - 20 -> {21} [color=green]; - 20 -> {21} [style=dashed]; - 21 -> {22}; - 22 -> {23}; + 19 -> {20}; subgraph cluster_8 { color=red - 24 [label="Enter function test" style="filled" fillcolor=red]; + 21 [label="Enter function test" style="filled" fillcolor=red]; subgraph cluster_9 { color=blue - 25 [label="Enter block"]; - 26 [label="Access variable R|/a|"]; - 27 [label="Enter safe call"]; - 28 [label="Access variable R|/A.path|"]; - 29 [label="Exit safe call"]; - 30 [label="Exit lhs of ?:"]; - 31 [label="Enter rhs of ?:"]; - 32 [label="Const: Null(null)"]; - 33 [label="Jump: ^test Null(null)"]; - 34 [label="Stub" style="filled" fillcolor=gray]; - 35 [label="Lhs of ?: is not null"]; - 36 [label="Exit ?:"]; - 37 [label="Variable declaration: lval path: R|kotlin/String|"]; - 38 [label="Access variable R|/a|"]; - 39 [label="Smart cast: R|/a|"]; - 40 [label="Access variable R|/A.index|"]; - 41 [label="Function call: R|/takeInt|(...)" style="filled" fillcolor=yellow]; - 42 [label="Enter anonymous object"]; + 22 [label="Enter block"]; + 23 [label="Access variable R|/a|"]; + 24 [label="Enter safe call"]; + 25 [label="Access variable R|/A.path|"]; + 26 [label="Exit safe call"]; + 27 [label="Exit lhs of ?:"]; + 28 [label="Enter rhs of ?:"]; + 29 [label="Const: Null(null)"]; + 30 [label="Jump: ^test Null(null)"]; + 31 [label="Stub" style="filled" fillcolor=gray]; + 32 [label="Lhs of ?: is not null"]; + 33 [label="Exit ?:"]; + 34 [label="Variable declaration: lval path: R|kotlin/String|"]; + 35 [label="Access variable R|/a|"]; + 36 [label="Smart cast: R|/a|"]; + 37 [label="Access variable R|/A.index|"]; + 38 [label="Function call: R|/takeInt|(...)" style="filled" fillcolor=yellow]; + 39 [label="Enter anonymous object"]; subgraph cluster_10 { color=blue - 43 [label="Enter class " style="filled" fillcolor=red]; - 44 [label="Part of class initialization"]; + 40 [label="Enter class " style="filled" fillcolor=red]; subgraph cluster_11 { color=blue - 45 [label="Enter field" style="filled" fillcolor=red]; - 46 [label="Access variable R|/a|"]; - 47 [label="Smart cast: R|/a|"]; - 48 [label="Access variable R|/A.index|"]; - 49 [label="Function call: R|/Derived.Derived|(...)" style="filled" fillcolor=yellow]; - 50 [label="Exit field" style="filled" fillcolor=red]; + 41 [label="Enter field" style="filled" fillcolor=red]; + 42 [label="Access variable R|/a|"]; + 43 [label="Smart cast: R|/a|"]; + 44 [label="Access variable R|/A.index|"]; + 45 [label="Function call: R|/Derived.Derived|(...)" style="filled" fillcolor=yellow]; + 46 [label="Exit field" style="filled" fillcolor=red]; } - 51 [label="Part of class initialization"]; subgraph cluster_12 { color=blue - 52 [label="Enter property" style="filled" fillcolor=red]; - 53 [label="Access variable R|/a|"]; - 54 [label="Smart cast: R|/a|"]; - 55 [label="Access variable R|/A.index|"]; - 56 [label="Exit property" style="filled" fillcolor=red]; + 47 [label="Enter property" style="filled" fillcolor=red]; + 48 [label="Access variable R|/a|"]; + 49 [label="Smart cast: R|/a|"]; + 50 [label="Access variable R|/A.index|"]; + 51 [label="Exit property" style="filled" fillcolor=red]; } - 57 [label="Exit class " style="filled" fillcolor=red]; + 52 [label="Exit class " style="filled" fillcolor=red]; } - 58 [label="Exit anonymous object"]; - 59 [label="Exit anonymous object expression"]; - 60 [label="Jump: ^test object : R|Base| { + 53 [label="Exit anonymous object"]; + 54 [label="Exit anonymous object expression"]; + 55 [label="Jump: ^test object : R|Base| { private constructor(): R|| { super() } @@ -148,102 +138,98 @@ digraph smartcastInByClause_kt { } "]; - 61 [label="Stub" style="filled" fillcolor=gray]; - 62 [label="Exit block" style="filled" fillcolor=gray]; + 56 [label="Stub" style="filled" fillcolor=gray]; + 57 [label="Exit block" style="filled" fillcolor=gray]; } - 63 [label="Exit function test" style="filled" fillcolor=red]; + 58 [label="Exit function test" style="filled" fillcolor=red]; } subgraph cluster_13 { color=blue - 64 [label="Enter function foo" style="filled" fillcolor=red]; + 59 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_14 { color=blue - 65 [label="Enter block"]; - 66 [label="Access variable R|/a|"]; - 67 [label="Smart cast: R|/a|"]; - 68 [label="Access variable R|/A.index|"]; - 69 [label="Function call: R|/takeInt|(...)" style="filled" fillcolor=yellow]; - 70 [label="Exit block"]; + 60 [label="Enter block"]; + 61 [label="Access variable R|/a|"]; + 62 [label="Smart cast: R|/a|"]; + 63 [label="Access variable R|/A.index|"]; + 64 [label="Function call: R|/takeInt|(...)" style="filled" fillcolor=yellow]; + 65 [label="Exit block"]; } - 71 [label="Exit function foo" style="filled" fillcolor=red]; + 66 [label="Exit function foo" style="filled" fillcolor=red]; } subgraph cluster_15 { color=blue - 72 [label="Enter function " style="filled" fillcolor=red]; - 73 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 74 [label="Exit function " style="filled" fillcolor=red]; + 67 [label="Enter function " style="filled" fillcolor=red]; + 68 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 69 [label="Exit function " style="filled" fillcolor=red]; } + 21 -> {22}; + 22 -> {23}; + 23 -> {24 28}; 24 -> {25}; 25 -> {26}; - 26 -> {27 31}; - 27 -> {28}; + 26 -> {27}; + 27 -> {28 32}; 28 -> {29}; 29 -> {30}; - 30 -> {31 35}; - 31 -> {32}; + 30 -> {58}; + 30 -> {31} [style=dotted]; + 31 -> {33} [style=dotted]; 32 -> {33}; - 33 -> {63}; - 33 -> {34} [style=dotted]; - 34 -> {36} [style=dotted]; + 33 -> {34}; + 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; 39 -> {40}; + 39 -> {53} [color=red]; + 39 -> {40} [style=dashed]; 40 -> {41}; + 40 -> {47 59 67} [color=red]; + 40 -> {52} [style=dotted]; + 40 -> {41 47} [style=dashed]; 41 -> {42}; 42 -> {43}; - 42 -> {58} [color=red]; - 42 -> {43} [style=dashed]; - 43 -> {44} [color=green]; - 43 -> {45 52 64 72} [color=red]; - 44 -> {45} [color=green]; - 44 -> {51} [style=dotted]; - 44 -> {45} [style=dashed]; + 43 -> {44}; + 44 -> {45}; 45 -> {46}; - 46 -> {47}; + 46 -> {47} [color=green]; 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51} [color=green]; + 50 -> {51}; 51 -> {52} [color=green]; - 51 -> {57} [style=dotted]; - 51 -> {52} [style=dashed]; - 52 -> {53}; + 52 -> {53 59 67} [color=green]; + 52 -> {59 67} [style=dashed]; 53 -> {54}; 54 -> {55}; - 55 -> {56}; - 56 -> {57} [color=green]; - 57 -> {58 64 72} [color=green]; - 57 -> {64 72} [style=dashed]; - 58 -> {59}; + 55 -> {58}; + 55 -> {56} [style=dotted]; + 56 -> {57} [style=dotted]; + 57 -> {58} [style=dotted]; 59 -> {60}; - 60 -> {63}; - 60 -> {61} [style=dotted]; - 61 -> {62} [style=dotted]; - 62 -> {63} [style=dotted]; + 60 -> {61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; 64 -> {65}; 65 -> {66}; - 66 -> {67}; 67 -> {68}; 68 -> {69}; - 69 -> {70}; - 70 -> {71}; - 72 -> {73}; - 73 -> {74}; subgraph cluster_16 { color=red - 75 [label="Enter function takeInt" style="filled" fillcolor=red]; + 70 [label="Enter function takeInt" style="filled" fillcolor=red]; subgraph cluster_17 { color=blue - 76 [label="Enter block"]; - 77 [label="Exit block"]; + 71 [label="Enter block"]; + 72 [label="Exit block"]; } - 78 [label="Exit function takeInt" style="filled" fillcolor=red]; + 73 [label="Exit function takeInt" style="filled" fillcolor=red]; } - 75 -> {76}; - 76 -> {77}; - 77 -> {78}; + 70 -> {71}; + 71 -> {72}; + 72 -> {73}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot index 5fa1292d436..0558c9bc139 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot @@ -117,136 +117,132 @@ digraph smartcastToNothing_kt { subgraph cluster_10 { color=red 39 [label="Enter class A" style="filled" fillcolor=red]; - 40 [label="Part of class initialization"]; subgraph cluster_11 { color=blue - 41 [label="Enter property" style="filled" fillcolor=red]; - 42 [label="Const: Int(1)"]; - 43 [label="Exit property" style="filled" fillcolor=red]; + 40 [label="Enter property" style="filled" fillcolor=red]; + 41 [label="Const: Int(1)"]; + 42 [label="Exit property" style="filled" fillcolor=red]; } - 44 [label="Part of class initialization"]; subgraph cluster_12 { color=blue - 45 [label="Enter property" style="filled" fillcolor=red]; - 46 [label="Const: Boolean(true)"]; - 47 [label="Exit property" style="filled" fillcolor=red]; + 43 [label="Enter property" style="filled" fillcolor=red]; + 44 [label="Const: Boolean(true)"]; + 45 [label="Exit property" style="filled" fillcolor=red]; } - 48 [label="Exit class A" style="filled" fillcolor=red]; + 46 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_13 { color=blue - 49 [label="Enter function " style="filled" fillcolor=red]; - 50 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 51 [label="Exit function " style="filled" fillcolor=red]; + 47 [label="Enter function " style="filled" fillcolor=red]; + 48 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 49 [label="Exit function " style="filled" fillcolor=red]; } 39 -> {40} [color=green]; - 40 -> {41} [color=green]; - 40 -> {44} [style=dotted]; - 40 -> {41} [style=dashed]; + 39 -> {46} [style=dotted]; + 39 -> {40 43} [style=dashed]; + 40 -> {41}; 41 -> {42}; - 42 -> {43}; - 43 -> {44} [color=green]; - 44 -> {45} [color=green]; - 44 -> {48} [style=dotted]; - 44 -> {45} [style=dashed]; - 45 -> {46}; - 46 -> {47}; - 47 -> {48} [color=green]; - 48 -> {49} [color=green]; - 48 -> {49} [style=dashed]; - 49 -> {50}; - 50 -> {51}; + 42 -> {43} [color=green]; + 43 -> {44}; + 44 -> {45}; + 45 -> {46} [color=green]; + 46 -> {47} [color=green]; + 46 -> {47} [style=dashed]; + 47 -> {48}; + 48 -> {49}; subgraph cluster_14 { color=red - 52 [label="Enter function test_0" style="filled" fillcolor=red]; + 50 [label="Enter function test_0" style="filled" fillcolor=red]; subgraph cluster_15 { color=blue - 53 [label="Enter block"]; - 54 [label="Const: Null(null)"]; - 55 [label="Variable declaration: lvar s: R|A?|"]; + 51 [label="Enter block"]; + 52 [label="Const: Null(null)"]; + 53 [label="Variable declaration: lvar s: R|A?|"]; subgraph cluster_16 { color=blue - 56 [label="Enter block"]; - 57 [label="Access variable R|/results|"]; - 58 [label="Function call: R|/results|.R|SubstitutionOverride|>|()" style="filled" fillcolor=yellow]; - 59 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; + 54 [label="Enter block"]; + 55 [label="Access variable R|/results|"]; + 56 [label="Function call: R|/results|.R|SubstitutionOverride|>|()" style="filled" fillcolor=yellow]; + 57 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; subgraph cluster_17 { color=blue - 60 [label="Enter while loop"]; + 58 [label="Enter while loop"]; subgraph cluster_18 { color=blue - 61 [label="Enter loop condition"]; - 62 [label="Access variable R|/|"]; - 63 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 64 [label="Exit loop condition"]; + 59 [label="Enter loop condition"]; + 60 [label="Access variable R|/|"]; + 61 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 62 [label="Exit loop condition"]; } subgraph cluster_19 { color=blue - 65 [label="Enter loop block"]; + 63 [label="Enter loop block"]; subgraph cluster_20 { color=blue - 66 [label="Enter block"]; - 67 [label="Access variable R|/|"]; - 68 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 69 [label="Stub" style="filled" fillcolor=gray]; - 70 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; - 71 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 72 [label="Stub" style="filled" fillcolor=gray]; - 73 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; + 64 [label="Enter block"]; + 65 [label="Access variable R|/|"]; + 66 [label="Function call: R|/|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 67 [label="Stub" style="filled" fillcolor=gray]; + 68 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; + 69 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 70 [label="Stub" style="filled" fillcolor=gray]; + 71 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; subgraph cluster_21 { color=blue - 74 [label="Enter when" style="filled" fillcolor=gray]; + 72 [label="Enter when" style="filled" fillcolor=gray]; subgraph cluster_22 { color=blue - 75 [label="Enter when branch condition " style="filled" fillcolor=gray]; - 76 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 77 [label="Stub" style="filled" fillcolor=gray]; - 78 [label="Access variable #" style="filled" fillcolor=gray]; - 79 [label="Exit when branch condition" style="filled" fillcolor=gray]; + 73 [label="Enter when branch condition " style="filled" fillcolor=gray]; + 74 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 75 [label="Stub" style="filled" fillcolor=gray]; + 76 [label="Access variable #" style="filled" fillcolor=gray]; + 77 [label="Exit when branch condition" style="filled" fillcolor=gray]; } - 80 [label="Synthetic else branch" style="filled" fillcolor=gray]; - 81 [label="Enter when branch result" style="filled" fillcolor=gray]; + 78 [label="Synthetic else branch" style="filled" fillcolor=gray]; + 79 [label="Enter when branch result" style="filled" fillcolor=gray]; subgraph cluster_23 { color=blue - 82 [label="Enter block" style="filled" fillcolor=gray]; - 83 [label="Jump: break@@@[R|/|.R|SubstitutionOverride|()] " style="filled" fillcolor=gray]; - 84 [label="Stub" style="filled" fillcolor=gray]; - 85 [label="Exit block" style="filled" fillcolor=gray]; + 80 [label="Enter block" style="filled" fillcolor=gray]; + 81 [label="Jump: break@@@[R|/|.R|SubstitutionOverride|()] " style="filled" fillcolor=gray]; + 82 [label="Stub" style="filled" fillcolor=gray]; + 83 [label="Exit block" style="filled" fillcolor=gray]; } - 86 [label="Exit when branch result" style="filled" fillcolor=gray]; - 87 [label="Exit when" style="filled" fillcolor=gray]; + 84 [label="Exit when branch result" style="filled" fillcolor=gray]; + 85 [label="Exit when" style="filled" fillcolor=gray]; } - 88 [label="Exit block" style="filled" fillcolor=gray]; + 86 [label="Exit block" style="filled" fillcolor=gray]; } - 89 [label="Exit loop block" style="filled" fillcolor=gray]; + 87 [label="Exit loop block" style="filled" fillcolor=gray]; } - 90 [label="Exit whileloop"]; + 88 [label="Exit whileloop"]; } - 91 [label="Exit block"]; + 89 [label="Exit block"]; } - 92 [label="Access variable R|/s|"]; - 93 [label="Enter safe call"]; - 94 [label="Postponed enter to lambda"]; + 90 [label="Access variable R|/s|"]; + 91 [label="Enter safe call"]; + 92 [label="Postponed enter to lambda"]; subgraph cluster_24 { color=blue - 95 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 93 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_25 { color=blue - 96 [label="Enter block"]; - 97 [label="Access variable R|/it|"]; - 98 [label="Access variable R|/A.a|"]; - 99 [label="Exit block"]; + 94 [label="Enter block"]; + 95 [label="Access variable R|/it|"]; + 96 [label="Access variable R|/A.a|"]; + 97 [label="Exit block"]; } - 100 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 98 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 101 [label="Postponed exit from lambda"]; - 102 [label="Function call: $subj$.R|kotlin/let|(...)" style="filled" fillcolor=yellow]; - 103 [label="Exit safe call"]; - 104 [label="Exit block"]; + 99 [label="Postponed exit from lambda"]; + 100 [label="Function call: $subj$.R|kotlin/let|(...)" style="filled" fillcolor=yellow]; + 101 [label="Exit safe call"]; + 102 [label="Exit block"]; } - 105 [label="Exit function test_0" style="filled" fillcolor=red]; + 103 [label="Exit function test_0" style="filled" fillcolor=red]; } + 50 -> {51}; + 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; @@ -257,12 +253,12 @@ digraph smartcastToNothing_kt { 59 -> {60}; 60 -> {61}; 61 -> {62}; - 62 -> {63}; + 62 -> {63 88}; 63 -> {64}; - 64 -> {65 90}; + 64 -> {65}; 65 -> {66}; - 66 -> {67}; - 67 -> {68}; + 66 -> {67} [style=dotted]; + 67 -> {68} [style=dotted]; 68 -> {69} [style=dotted]; 69 -> {70} [style=dotted]; 70 -> {71} [style=dotted]; @@ -272,26 +268,26 @@ digraph smartcastToNothing_kt { 74 -> {75} [style=dotted]; 75 -> {76} [style=dotted]; 76 -> {77} [style=dotted]; - 77 -> {78} [style=dotted]; - 78 -> {79} [style=dotted]; - 79 -> {80 81} [style=dotted]; - 80 -> {87} [style=dotted]; - 81 -> {82} [style=dotted]; + 77 -> {78 79} [style=dotted]; + 78 -> {85} [style=dotted]; + 79 -> {80} [style=dotted]; + 80 -> {81} [style=dotted]; + 81 -> {82 88} [style=dotted]; 82 -> {83} [style=dotted]; - 83 -> {84 90} [style=dotted]; + 83 -> {84} [style=dotted]; 84 -> {85} [style=dotted]; 85 -> {86} [style=dotted]; 86 -> {87} [style=dotted]; - 87 -> {88} [style=dotted]; - 88 -> {89} [style=dotted]; - 89 -> {61} [color=green style=dotted]; - 90 -> {91}; + 87 -> {59} [color=green style=dotted]; + 88 -> {89}; + 89 -> {90}; + 90 -> {91 101}; 91 -> {92}; - 92 -> {93 103}; + 92 -> {93 100}; + 92 -> {99} [style=dotted]; + 92 -> {93} [style=dashed]; 93 -> {94}; - 94 -> {95 102}; - 94 -> {101} [style=dotted]; - 94 -> {95} [style=dashed]; + 94 -> {95}; 95 -> {96}; 96 -> {97}; 97 -> {98}; @@ -300,82 +296,82 @@ digraph smartcastToNothing_kt { 100 -> {101}; 101 -> {102}; 102 -> {103}; - 103 -> {104}; - 104 -> {105}; subgraph cluster_26 { color=red - 106 [label="Enter function test_1" style="filled" fillcolor=red]; + 104 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_27 { color=blue - 107 [label="Enter block"]; + 105 [label="Enter block"]; subgraph cluster_28 { color=blue - 108 [label="Enter when"]; + 106 [label="Enter when"]; subgraph cluster_29 { color=blue - 109 [label="Enter when branch condition "]; - 110 [label="Access variable R|/a|"]; - 111 [label="Type operator: (R|/a| is R|kotlin/Nothing?|)"]; - 112 [label="Exit when branch condition"]; + 107 [label="Enter when branch condition "]; + 108 [label="Access variable R|/a|"]; + 109 [label="Type operator: (R|/a| is R|kotlin/Nothing?|)"]; + 110 [label="Exit when branch condition"]; } - 113 [label="Synthetic else branch"]; - 114 [label="Enter when branch result"]; + 111 [label="Synthetic else branch"]; + 112 [label="Enter when branch result"]; subgraph cluster_30 { color=blue - 115 [label="Enter block"]; - 116 [label="Access variable R|/a|"]; - 117 [label="Smart cast: R|/a|"]; - 118 [label="Enter safe call"]; - 119 [label="Access variable R|kotlin/String.length|"]; - 120 [label="Exit safe call"]; - 121 [label="Variable declaration: lval b: R|kotlin/Int?|"]; - 122 [label="Exit block"]; + 113 [label="Enter block"]; + 114 [label="Access variable R|/a|"]; + 115 [label="Smart cast: R|/a|"]; + 116 [label="Enter safe call"]; + 117 [label="Access variable R|kotlin/String.length|"]; + 118 [label="Exit safe call"]; + 119 [label="Variable declaration: lval b: R|kotlin/Int?|"]; + 120 [label="Exit block"]; } - 123 [label="Exit when branch result"]; - 124 [label="Exit when"]; + 121 [label="Exit when branch result"]; + 122 [label="Exit when"]; } subgraph cluster_31 { color=blue - 125 [label="Enter when"]; + 123 [label="Enter when"]; subgraph cluster_32 { color=blue - 126 [label="Enter when branch condition "]; - 127 [label="Access variable R|/a|"]; - 128 [label="Type operator: (R|/a| is R|kotlin/Nothing|)"]; - 129 [label="Exit when branch condition"]; + 124 [label="Enter when branch condition "]; + 125 [label="Access variable R|/a|"]; + 126 [label="Type operator: (R|/a| is R|kotlin/Nothing|)"]; + 127 [label="Exit when branch condition"]; } - 130 [label="Synthetic else branch"]; - 131 [label="Enter when branch result"]; + 128 [label="Synthetic else branch"]; + 129 [label="Enter when branch result"]; subgraph cluster_33 { color=blue - 132 [label="Enter block"]; - 133 [label="Access variable R|/a|"]; - 134 [label="Smart cast: R|/a|"]; - 135 [label="Stub" style="filled" fillcolor=gray]; - 136 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; - 137 [label="Variable declaration: lval b: R|kotlin/Int|" style="filled" fillcolor=gray]; - 138 [label="Exit block" style="filled" fillcolor=gray]; + 130 [label="Enter block"]; + 131 [label="Access variable R|/a|"]; + 132 [label="Smart cast: R|/a|"]; + 133 [label="Stub" style="filled" fillcolor=gray]; + 134 [label="Access variable R|kotlin/String.length|" style="filled" fillcolor=gray]; + 135 [label="Variable declaration: lval b: R|kotlin/Int|" style="filled" fillcolor=gray]; + 136 [label="Exit block" style="filled" fillcolor=gray]; } - 139 [label="Exit when branch result" style="filled" fillcolor=gray]; - 140 [label="Exit when"]; + 137 [label="Exit when branch result" style="filled" fillcolor=gray]; + 138 [label="Exit when"]; } - 141 [label="Exit block"]; + 139 [label="Exit block"]; } - 142 [label="Exit function test_1" style="filled" fillcolor=red]; + 140 [label="Exit function test_1" style="filled" fillcolor=red]; } + 104 -> {105}; + 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; 109 -> {110}; - 110 -> {111}; - 111 -> {112}; - 112 -> {113 114}; - 113 -> {124}; + 110 -> {111 112}; + 111 -> {122}; + 112 -> {113}; + 113 -> {114}; 114 -> {115}; - 115 -> {116}; + 115 -> {116 118}; 116 -> {117}; - 117 -> {118 120}; + 117 -> {118}; 118 -> {119}; 119 -> {120}; 120 -> {121}; @@ -385,20 +381,18 @@ digraph smartcastToNothing_kt { 124 -> {125}; 125 -> {126}; 126 -> {127}; - 127 -> {128}; - 128 -> {129}; - 129 -> {130 131}; - 130 -> {140}; + 127 -> {128 129}; + 128 -> {138}; + 129 -> {130}; + 130 -> {131}; 131 -> {132}; - 132 -> {133}; - 133 -> {134}; + 132 -> {133} [style=dotted]; + 133 -> {134} [style=dotted]; 134 -> {135} [style=dotted]; 135 -> {136} [style=dotted]; 136 -> {137} [style=dotted]; 137 -> {138} [style=dotted]; - 138 -> {139} [style=dotted]; - 139 -> {140} [style=dotted]; - 140 -> {141}; - 141 -> {142}; + 138 -> {139}; + 139 -> {140}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot index a76bb2bbad1..32377e5774e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot @@ -6,89 +6,88 @@ digraph overridenOpenVal_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - 1 [label="Part of class initialization"]; subgraph cluster_1 { color=blue - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Access variable R|/x|"]; - 4 [label="Exit property" style="filled" fillcolor=red]; + 1 [label="Enter property" style="filled" fillcolor=red]; + 2 [label="Access variable R|/x|"]; + 3 [label="Exit property" style="filled" fillcolor=red]; } - 5 [label="Exit class A" style="filled" fillcolor=red]; + 4 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_2 { color=blue - 6 [label="Enter function " style="filled" fillcolor=red]; - 7 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 8 [label="Exit function " style="filled" fillcolor=red]; + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 7 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1} [color=green]; - 1 -> {2} [color=green]; - 1 -> {5} [style=dotted]; - 1 -> {2} [style=dashed]; + 0 -> {4} [style=dotted]; + 0 -> {1} [style=dashed]; + 1 -> {2}; 2 -> {3}; - 3 -> {4}; + 3 -> {4} [color=green]; 4 -> {5} [color=green]; - 5 -> {6} [color=green]; - 5 -> {6} [style=dashed]; + 4 -> {5} [style=dashed]; + 5 -> {6}; 6 -> {7}; - 7 -> {8}; subgraph cluster_3 { color=red - 9 [label="Enter class B" style="filled" fillcolor=red]; - 10 [label="Exit class B" style="filled" fillcolor=red]; + 8 [label="Enter class B" style="filled" fillcolor=red]; + 9 [label="Exit class B" style="filled" fillcolor=red]; } subgraph cluster_4 { color=blue - 11 [label="Enter function test_1" style="filled" fillcolor=red]; + 10 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue - 12 [label="Enter block"]; + 11 [label="Enter block"]; subgraph cluster_6 { color=blue - 13 [label="Enter when"]; + 12 [label="Enter when"]; subgraph cluster_7 { color=blue - 14 [label="Enter when branch condition "]; - 15 [label="Access variable R|/A.x|"]; - 16 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; - 17 [label="Exit when branch condition"]; + 13 [label="Enter when branch condition "]; + 14 [label="Access variable R|/A.x|"]; + 15 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; + 16 [label="Exit when branch condition"]; } - 18 [label="Synthetic else branch"]; - 19 [label="Enter when branch result"]; + 17 [label="Synthetic else branch"]; + 18 [label="Enter when branch result"]; subgraph cluster_8 { color=blue - 20 [label="Enter block"]; - 21 [label="Access variable R|/A.x|"]; - 22 [label="Smart cast: this@R|/B|.R|/A.x|"]; - 23 [label="Access variable R|kotlin/String.length|"]; - 24 [label="Exit block"]; + 19 [label="Enter block"]; + 20 [label="Access variable R|/A.x|"]; + 21 [label="Smart cast: this@R|/B|.R|/A.x|"]; + 22 [label="Access variable R|kotlin/String.length|"]; + 23 [label="Exit block"]; } - 25 [label="Exit when branch result"]; - 26 [label="Exit when"]; + 24 [label="Exit when branch result"]; + 25 [label="Exit when"]; } - 27 [label="Exit block"]; + 26 [label="Exit block"]; } - 28 [label="Exit function test_1" style="filled" fillcolor=red]; + 27 [label="Exit function test_1" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 29 [label="Enter function " style="filled" fillcolor=red]; - 30 [label="Access variable R|/x|"]; - 31 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; - 32 [label="Exit function " style="filled" fillcolor=red]; + 28 [label="Enter function " style="filled" fillcolor=red]; + 29 [label="Access variable R|/x|"]; + 30 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; + 31 [label="Exit function " style="filled" fillcolor=red]; } - 9 -> {10} [color=green]; - 10 -> {11 29} [color=green]; - 10 -> {11 29} [style=dashed]; + 8 -> {9} [color=green]; + 9 -> {10 28} [color=green]; + 9 -> {10 28} [style=dashed]; + 10 -> {11}; 11 -> {12}; 12 -> {13}; 13 -> {14}; 14 -> {15}; 15 -> {16}; - 16 -> {17}; - 17 -> {18 19}; - 18 -> {26}; + 16 -> {17 18}; + 17 -> {25}; + 18 -> {19}; 19 -> {20}; 20 -> {21}; 21 -> {22}; @@ -97,55 +96,55 @@ digraph overridenOpenVal_kt { 24 -> {25}; 25 -> {26}; 26 -> {27}; - 27 -> {28}; + 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; subgraph cluster_10 { color=red - 33 [label="Enter function test_2" style="filled" fillcolor=red]; + 32 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_11 { color=blue - 34 [label="Enter block"]; + 33 [label="Enter block"]; subgraph cluster_12 { color=blue - 35 [label="Enter when"]; + 34 [label="Enter when"]; subgraph cluster_13 { color=blue - 36 [label="Enter when branch condition "]; - 37 [label="Access variable R|/b|"]; - 38 [label="Access variable R|/A.x|"]; - 39 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; - 40 [label="Exit when branch condition"]; + 35 [label="Enter when branch condition "]; + 36 [label="Access variable R|/b|"]; + 37 [label="Access variable R|/A.x|"]; + 38 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; + 39 [label="Exit when branch condition"]; } - 41 [label="Synthetic else branch"]; - 42 [label="Enter when branch result"]; + 40 [label="Synthetic else branch"]; + 41 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 43 [label="Enter block"]; - 44 [label="Access variable R|/b|"]; - 45 [label="Access variable R|/A.x|"]; - 46 [label="Smart cast: R|/b|.R|/A.x|"]; - 47 [label="Access variable R|kotlin/String.length|"]; - 48 [label="Exit block"]; + 42 [label="Enter block"]; + 43 [label="Access variable R|/b|"]; + 44 [label="Access variable R|/A.x|"]; + 45 [label="Smart cast: R|/b|.R|/A.x|"]; + 46 [label="Access variable R|kotlin/String.length|"]; + 47 [label="Exit block"]; } - 49 [label="Exit when branch result"]; - 50 [label="Exit when"]; + 48 [label="Exit when branch result"]; + 49 [label="Exit when"]; } - 51 [label="Exit block"]; + 50 [label="Exit block"]; } - 52 [label="Exit function test_2" style="filled" fillcolor=red]; + 51 [label="Exit function test_2" style="filled" fillcolor=red]; } + 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; - 39 -> {40}; - 40 -> {41 42}; - 41 -> {50}; + 39 -> {40 41}; + 40 -> {49}; + 41 -> {42}; 42 -> {43}; 43 -> {44}; 44 -> {45}; @@ -155,6 +154,5 @@ digraph overridenOpenVal_kt { 48 -> {49}; 49 -> {50}; 50 -> {51}; - 51 -> {52}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot index d9a9f51571d..4033a9baa88 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot @@ -18,93 +18,87 @@ digraph inAnonymousObject_kt { subgraph cluster_3 { color=blue 5 [label="Enter class " style="filled" fillcolor=red]; - 6 [label="Part of class initialization"]; subgraph cluster_4 { color=blue - 7 [label="Enter property" style="filled" fillcolor=red]; - 8 [label="Access variable R|/a|"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Access variable R|/a|"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } - 10 [label="Part of class initialization"]; subgraph cluster_5 { color=blue - 11 [label="Enter init block" style="filled" fillcolor=red]; + 9 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 12 [label="Enter block"]; - 13 [label="Access variable R|/b|"]; - 14 [label="Assignment: R|/.leaked|"]; - 15 [label="Exit block"]; + 10 [label="Enter block"]; + 11 [label="Access variable R|/b|"]; + 12 [label="Assignment: R|/.leaked|"]; + 13 [label="Exit block"]; } - 16 [label="Exit init block" style="filled" fillcolor=red]; + 14 [label="Exit init block" style="filled" fillcolor=red]; } - 17 [label="Exit class " style="filled" fillcolor=red]; + 15 [label="Exit class " style="filled" fillcolor=red]; } - 18 [label="Exit anonymous object"]; - 19 [label="Exit anonymous object expression"]; - 20 [label="Variable declaration: lval obj: R||"]; - 21 [label="Access variable R|/obj|"]; - 22 [label="Function call: R|/obj|.R|/.run|()" style="filled" fillcolor=yellow]; - 23 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 24 [label="Exit block"]; + 16 [label="Exit anonymous object"]; + 17 [label="Exit anonymous object expression"]; + 18 [label="Variable declaration: lval obj: R||"]; + 19 [label="Access variable R|/obj|"]; + 20 [label="Function call: R|/obj|.R|/.run|()" style="filled" fillcolor=yellow]; + 21 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 22 [label="Exit block"]; } - 25 [label="Exit function foo" style="filled" fillcolor=red]; + 23 [label="Exit function foo" style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 26 [label="Enter function run" style="filled" fillcolor=red]; + 24 [label="Enter function run" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 27 [label="Enter block"]; - 28 [label="Function call: R|/c|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 29 [label="Exit block"]; + 25 [label="Enter block"]; + 26 [label="Function call: R|/c|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 27 [label="Exit block"]; } - 30 [label="Exit function run" style="filled" fillcolor=red]; + 28 [label="Exit function run" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 31 [label="Enter function " style="filled" fillcolor=red]; - 32 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 33 [label="Exit function " style="filled" fillcolor=red]; + 29 [label="Enter function " style="filled" fillcolor=red]; + 30 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 31 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1}; 1 -> {2}; 2 -> {3}; 3 -> {4}; 4 -> {5}; - 4 -> {18} [color=red]; + 4 -> {16} [color=red]; 4 -> {5} [style=dashed]; - 5 -> {6} [color=green]; - 5 -> {7 11 26 31} [color=red]; - 6 -> {7} [color=green]; - 6 -> {10} [style=dotted]; - 6 -> {7} [style=dashed]; + 5 -> {6}; + 5 -> {9 24 29} [color=red]; + 5 -> {15} [style=dotted]; + 5 -> {6 9} [style=dashed]; + 6 -> {7}; 7 -> {8}; - 8 -> {9}; - 9 -> {10} [color=green]; - 10 -> {11} [color=green]; - 10 -> {17} [style=dotted]; - 10 -> {11} [style=dashed]; + 8 -> {9} [color=green]; + 9 -> {10}; + 10 -> {11}; 11 -> {12}; 12 -> {13}; 13 -> {14}; - 14 -> {15}; - 15 -> {16}; - 16 -> {17} [color=green]; - 17 -> {18 26 31} [color=green]; - 17 -> {26 31} [style=dashed]; + 14 -> {15} [color=green]; + 15 -> {16 24 29} [color=green]; + 15 -> {24 29} [style=dashed]; + 16 -> {17}; + 17 -> {18}; 18 -> {19}; 19 -> {20}; 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {24}; 24 -> {25}; + 25 -> {26}; 26 -> {27}; 27 -> {28}; - 28 -> {29}; 29 -> {30}; - 31 -> {32}; - 32 -> {33}; + 30 -> {31}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot index e0d670c8b24..08caaf927a5 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot @@ -25,50 +25,48 @@ digraph inLocalClass_kt { subgraph cluster_3 { color=blue 10 [label="Enter class LocalClass" style="filled" fillcolor=red]; - 11 [label="Part of class initialization"]; subgraph cluster_4 { color=blue - 12 [label="Enter property" style="filled" fillcolor=red]; - 13 [label="Access variable R|/a|"]; - 14 [label="Exit property" style="filled" fillcolor=red]; + 11 [label="Enter property" style="filled" fillcolor=red]; + 12 [label="Access variable R|/a|"]; + 13 [label="Exit property" style="filled" fillcolor=red]; } - 15 [label="Part of class initialization"]; subgraph cluster_5 { color=blue - 16 [label="Enter init block" style="filled" fillcolor=red]; + 14 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue - 17 [label="Enter block"]; - 18 [label="Access variable R|/c|"]; - 19 [label="Assignment: R|/leaked|"]; - 20 [label="Exit block"]; + 15 [label="Enter block"]; + 16 [label="Access variable R|/c|"]; + 17 [label="Assignment: R|/leaked|"]; + 18 [label="Exit block"]; } - 21 [label="Exit init block" style="filled" fillcolor=red]; + 19 [label="Exit init block" style="filled" fillcolor=red]; } - 22 [label="Exit class LocalClass" style="filled" fillcolor=red]; + 20 [label="Exit class LocalClass" style="filled" fillcolor=red]; } subgraph cluster_7 { color=blue - 23 [label="Enter function run" style="filled" fillcolor=red]; + 21 [label="Enter function run" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 24 [label="Enter block"]; - 25 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 26 [label="Exit block"]; + 22 [label="Enter block"]; + 23 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 24 [label="Exit block"]; } - 27 [label="Exit function run" style="filled" fillcolor=red]; + 25 [label="Exit function run" style="filled" fillcolor=red]; } subgraph cluster_9 { color=blue - 28 [label="Enter function " style="filled" fillcolor=red]; - 29 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 26 [label="Enter function " style="filled" fillcolor=red]; + 27 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; subgraph cluster_10 { color=blue - 30 [label="Enter block"]; - 31 [label="Function call: R|/b|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 32 [label="Exit block"]; + 28 [label="Enter block"]; + 29 [label="Function call: R|/b|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 30 [label="Exit block"]; } - 33 [label="Exit function " style="filled" fillcolor=red]; + 31 [label="Exit function " style="filled" fillcolor=red]; } 0 -> {1}; 1 -> {2}; @@ -80,33 +78,29 @@ digraph inLocalClass_kt { 6 -> {7}; 7 -> {8}; 8 -> {9}; - 10 -> {11} [color=green]; - 10 -> {12 16 23 28} [color=red]; - 11 -> {12} [color=green]; - 11 -> {15} [style=dotted]; - 11 -> {12} [style=dashed]; + 10 -> {11}; + 10 -> {14 21 26} [color=red]; + 10 -> {20} [style=dotted]; + 10 -> {11 14} [style=dashed]; + 11 -> {12}; 12 -> {13}; - 13 -> {14}; - 14 -> {15} [color=green]; - 15 -> {16} [color=green]; - 15 -> {22} [style=dotted]; - 15 -> {16} [style=dashed]; + 13 -> {14} [color=green]; + 14 -> {15}; + 15 -> {16}; 16 -> {17}; 17 -> {18}; 18 -> {19}; - 19 -> {20}; - 20 -> {21}; - 21 -> {22} [color=green]; - 22 -> {23 28} [color=green]; - 22 -> {23 28} [style=dashed]; + 19 -> {20} [color=green]; + 20 -> {21 26} [color=green]; + 20 -> {21 26} [style=dashed]; + 21 -> {22}; + 22 -> {23}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; 26 -> {27}; + 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot index fefd8af2a9d..7a6f656d53a 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot @@ -77,170 +77,168 @@ digraph delegateWithAnonymousObject_kt { subgraph cluster_8 { color=red 23 [label="Enter class IssuesListUserProfile" style="filled" fillcolor=red]; - 24 [label="Part of class initialization"]; subgraph cluster_9 { color=blue - 25 [label="Enter property" style="filled" fillcolor=red]; - 26 [label="Postponed enter to lambda"]; + 24 [label="Enter property" style="filled" fillcolor=red]; + 25 [label="Postponed enter to lambda"]; subgraph cluster_10 { color=blue - 27 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 26 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_11 { color=blue - 28 [label="Enter block"]; - 29 [label="Enter anonymous object"]; + 27 [label="Enter block"]; + 28 [label="Enter anonymous object"]; subgraph cluster_12 { color=blue - 30 [label="Enter class " style="filled" fillcolor=red]; - 31 [label="Exit class " style="filled" fillcolor=red]; + 29 [label="Enter class " style="filled" fillcolor=red]; + 30 [label="Exit class " style="filled" fillcolor=red]; } - 32 [label="Exit anonymous object"]; - 33 [label="Exit anonymous object expression"]; - 34 [label="Exit block"]; + 31 [label="Exit anonymous object"]; + 32 [label="Exit anonymous object expression"]; + 33 [label="Exit block"]; } - 35 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 34 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } subgraph cluster_13 { color=blue - 36 [label="Enter function setValue" style="filled" fillcolor=red]; + 35 [label="Enter function setValue" style="filled" fillcolor=red]; subgraph cluster_14 { color=blue - 37 [label="Enter block"]; - 38 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; - 39 [label="Access variable R|/value|"]; - 40 [label="Function call: R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(...)" style="filled" fillcolor=yellow]; - 41 [label="Jump: ^setValue R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(R|/value|)"]; - 42 [label="Stub" style="filled" fillcolor=gray]; - 43 [label="Exit block" style="filled" fillcolor=gray]; + 36 [label="Enter block"]; + 37 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; + 38 [label="Access variable R|/value|"]; + 39 [label="Function call: R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(...)" style="filled" fillcolor=yellow]; + 40 [label="Jump: ^setValue R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(R|/value|)"]; + 41 [label="Stub" style="filled" fillcolor=gray]; + 42 [label="Exit block" style="filled" fillcolor=gray]; } - 44 [label="Exit function setValue" style="filled" fillcolor=red]; + 43 [label="Exit function setValue" style="filled" fillcolor=red]; } subgraph cluster_15 { color=blue - 45 [label="Enter function getValue" style="filled" fillcolor=red]; + 44 [label="Enter function getValue" style="filled" fillcolor=red]; subgraph cluster_16 { color=blue - 46 [label="Enter block"]; - 47 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; - 48 [label="Jump: ^getValue R|/IssueListView.IssueListView|()"]; - 49 [label="Stub" style="filled" fillcolor=gray]; - 50 [label="Exit block" style="filled" fillcolor=gray]; + 45 [label="Enter block"]; + 46 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; + 47 [label="Jump: ^getValue R|/IssueListView.IssueListView|()"]; + 48 [label="Stub" style="filled" fillcolor=gray]; + 49 [label="Exit block" style="filled" fillcolor=gray]; } - 51 [label="Exit function getValue" style="filled" fillcolor=red]; + 50 [label="Exit function getValue" style="filled" fillcolor=red]; } subgraph cluster_17 { color=blue - 52 [label="Enter function " style="filled" fillcolor=red]; - 53 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 54 [label="Exit function " style="filled" fillcolor=red]; + 51 [label="Enter function " style="filled" fillcolor=red]; + 52 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 53 [label="Exit function " style="filled" fillcolor=red]; } - 55 [label="Postponed exit from lambda"]; - 56 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)" style="filled" fillcolor=yellow]; - 57 [label="Access variable this@R|/IssuesListUserProfile|"]; - 58 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...).#(...)" style="filled" fillcolor=yellow]; - 59 [label="Exit property delegate" style="filled" fillcolor=yellow]; - 60 [label="Exit property" style="filled" fillcolor=red]; + 54 [label="Postponed exit from lambda"]; + 55 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)" style="filled" fillcolor=yellow]; + 56 [label="Access variable this@R|/IssuesListUserProfile|"]; + 57 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...).#(...)" style="filled" fillcolor=yellow]; + 58 [label="Exit property delegate" style="filled" fillcolor=yellow]; + 59 [label="Exit property" style="filled" fillcolor=red]; } - 61 [label="Exit class IssuesListUserProfile" style="filled" fillcolor=red]; + 60 [label="Exit class IssuesListUserProfile" style="filled" fillcolor=red]; } subgraph cluster_18 { color=blue - 62 [label="Enter function setter" style="filled" fillcolor=red]; + 61 [label="Enter function setter" style="filled" fillcolor=red]; subgraph cluster_19 { color=blue - 63 [label="Enter block"]; - 64 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; - 65 [label="Access variable this@R|/IssuesListUserProfile|"]; - 66 [label="Access variable R|/issueListView|"]; - 67 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; - 68 [label="Exit block"]; + 62 [label="Enter block"]; + 63 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; + 64 [label="Access variable this@R|/IssuesListUserProfile|"]; + 65 [label="Access variable R|/issueListView|"]; + 66 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; + 67 [label="Exit block"]; } - 69 [label="Exit function setter" style="filled" fillcolor=red]; + 68 [label="Exit function setter" style="filled" fillcolor=red]; } subgraph cluster_20 { color=blue - 70 [label="Enter function getter" style="filled" fillcolor=red]; + 69 [label="Enter function getter" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 71 [label="Enter block"]; - 72 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; - 73 [label="Access variable this@R|/IssuesListUserProfile|"]; - 74 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; - 75 [label="Jump: ^ this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(this@R|/IssuesListUserProfile|, ::R|/IssuesListUserProfile.issueListView|)"]; - 76 [label="Stub" style="filled" fillcolor=gray]; - 77 [label="Exit block" style="filled" fillcolor=gray]; + 70 [label="Enter block"]; + 71 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; + 72 [label="Access variable this@R|/IssuesListUserProfile|"]; + 73 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; + 74 [label="Jump: ^ this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|SubstitutionOverride|(this@R|/IssuesListUserProfile|, ::R|/IssuesListUserProfile.issueListView|)"]; + 75 [label="Stub" style="filled" fillcolor=gray]; + 76 [label="Exit block" style="filled" fillcolor=gray]; } - 78 [label="Exit function getter" style="filled" fillcolor=red]; + 77 [label="Exit function getter" style="filled" fillcolor=red]; } subgraph cluster_22 { color=blue - 79 [label="Enter function " style="filled" fillcolor=red]; - 80 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; - 81 [label="Exit function " style="filled" fillcolor=red]; + 78 [label="Enter function " style="filled" fillcolor=red]; + 79 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; + 80 [label="Exit function " style="filled" fillcolor=red]; } 23 -> {24} [color=green]; - 24 -> {25} [color=green]; - 24 -> {61} [style=dotted]; - 24 -> {25} [style=dashed]; - 25 -> {26}; - 26 -> {27 55 56}; - 26 -> {27} [style=dashed]; + 23 -> {60} [style=dotted]; + 23 -> {24} [style=dashed]; + 24 -> {25}; + 25 -> {26 54 55}; + 25 -> {26} [style=dashed]; + 26 -> {27}; 27 -> {28}; 28 -> {29}; - 29 -> {30}; - 29 -> {32} [color=red]; - 29 -> {30} [style=dashed]; - 30 -> {31} [color=green]; - 30 -> {36 45 52} [color=red]; - 31 -> {32 36 45 52} [color=green]; - 31 -> {36 45 52} [style=dashed]; + 28 -> {31} [color=red]; + 28 -> {29} [style=dashed]; + 29 -> {30} [color=green]; + 29 -> {35 44 51} [color=red]; + 30 -> {31 35 44 51} [color=green]; + 30 -> {35 44 51} [style=dashed]; + 31 -> {32}; 32 -> {33}; 33 -> {34}; - 34 -> {35}; + 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; 39 -> {40}; - 40 -> {41}; - 41 -> {44}; + 40 -> {43}; + 40 -> {41} [style=dotted]; 41 -> {42} [style=dotted]; 42 -> {43} [style=dotted]; - 43 -> {44} [style=dotted]; + 44 -> {45}; 45 -> {46}; 46 -> {47}; - 47 -> {48}; - 48 -> {51}; + 47 -> {50}; + 47 -> {48} [style=dotted]; 48 -> {49} [style=dotted]; 49 -> {50} [style=dotted]; - 50 -> {51} [style=dotted]; + 51 -> {52}; 52 -> {53}; - 53 -> {54}; - 55 -> {56} [color=green]; - 55 -> {59} [color=red]; + 54 -> {55} [color=green]; + 54 -> {58} [color=red]; + 55 -> {56}; 56 -> {57}; 57 -> {58}; 58 -> {59}; - 59 -> {60}; - 60 -> {61} [color=green]; - 61 -> {62 70 79} [color=green]; - 61 -> {62 70 79} [style=dashed]; + 59 -> {60} [color=green]; + 60 -> {61 69 78} [color=green]; + 60 -> {61 69 78} [style=dashed]; + 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; 65 -> {66}; 66 -> {67}; 67 -> {68}; - 68 -> {69}; + 69 -> {70}; 70 -> {71}; 71 -> {72}; 72 -> {73}; 73 -> {74}; - 74 -> {75}; - 75 -> {78}; + 74 -> {77}; + 74 -> {75} [style=dotted]; 75 -> {76} [style=dotted]; 76 -> {77} [style=dotted]; - 77 -> {78} [style=dotted]; + 78 -> {79}; 79 -> {80}; - 80 -> {81}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot index 9c17a4593dc..8f21213b410 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot @@ -52,106 +52,104 @@ digraph plusAssignWithLambdaInRhs_kt { subgraph cluster_4 { color=red 17 [label="Enter class A" style="filled" fillcolor=red]; - 18 [label="Part of class initialization"]; subgraph cluster_5 { color=blue - 19 [label="Enter property" style="filled" fillcolor=red]; - 20 [label="Access variable R|/executor|"]; - 21 [label="Exit property" style="filled" fillcolor=red]; + 18 [label="Enter property" style="filled" fillcolor=red]; + 19 [label="Access variable R|/executor|"]; + 20 [label="Exit property" style="filled" fillcolor=red]; } - 22 [label="Exit class A" style="filled" fillcolor=red]; + 21 [label="Exit class A" style="filled" fillcolor=red]; } subgraph cluster_6 { color=blue - 23 [label="Enter function " style="filled" fillcolor=red]; - 24 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 25 [label="Exit function " style="filled" fillcolor=red]; + 22 [label="Enter function " style="filled" fillcolor=red]; + 23 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 24 [label="Exit function " style="filled" fillcolor=red]; } 17 -> {18} [color=green]; - 18 -> {19} [color=green]; - 18 -> {22} [style=dotted]; - 18 -> {19} [style=dashed]; + 17 -> {21} [style=dotted]; + 17 -> {18} [style=dashed]; + 18 -> {19}; 19 -> {20}; - 20 -> {21}; + 20 -> {21} [color=green]; 21 -> {22} [color=green]; - 22 -> {23} [color=green]; - 22 -> {23} [style=dashed]; + 21 -> {22} [style=dashed]; + 22 -> {23}; 23 -> {24}; - 24 -> {25}; subgraph cluster_7 { color=red - 26 [label="Enter function postpone" style="filled" fillcolor=red]; + 25 [label="Enter function postpone" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 27 [label="Enter block"]; - 28 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()" style="filled" fillcolor=yellow]; - 29 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; - 30 [label="Postponed enter to lambda"]; + 26 [label="Enter block"]; + 27 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()" style="filled" fillcolor=yellow]; + 28 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; + 29 [label="Postponed enter to lambda"]; subgraph cluster_9 { color=blue - 31 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 30 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_10 { color=blue - 32 [label="Enter block"]; - 33 [label="Access variable R|/queue|"]; - 34 [label="Postponed enter to lambda"]; + 31 [label="Enter block"]; + 32 [label="Access variable R|/queue|"]; + 33 [label="Postponed enter to lambda"]; subgraph cluster_11 { color=blue - 35 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 34 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue - 36 [label="Enter block"]; - 37 [label="Function call: R|/computation|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 38 [label="Function call: R|/resolve|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; - 39 [label="Exit block"]; + 35 [label="Enter block"]; + 36 [label="Function call: R|/computation|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 37 [label="Function call: R|/resolve|.R|SubstitutionOverride|(...)" style="filled" fillcolor=yellow]; + 38 [label="Exit block"]; } - 40 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 39 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 41 [label="Postponed exit from lambda"]; - 42 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)" style="filled" fillcolor=yellow]; - 43 [label="Exit block"]; + 40 [label="Postponed exit from lambda"]; + 41 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)" style="filled" fillcolor=yellow]; + 42 [label="Exit block"]; } - 44 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 43 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 45 [label="Postponed exit from lambda"]; - 46 [label="Function call: R|/A.A|(...)" style="filled" fillcolor=yellow]; - 47 [label="Jump: ^postpone R|/A.A|( = A@fun (resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { + 44 [label="Postponed exit from lambda"]; + 45 [label="Function call: R|/A.A|(...)" style="filled" fillcolor=yellow]; + 46 [label="Jump: ^postpone R|/A.A|( = A@fun (resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(A@fun (): R|kotlin/Unit| { R|/resolve|.R|SubstitutionOverride|(R|/computation|.R|SubstitutionOverride|()) } ) } )"]; - 48 [label="Stub" style="filled" fillcolor=gray]; - 49 [label="Exit block" style="filled" fillcolor=gray]; + 47 [label="Stub" style="filled" fillcolor=gray]; + 48 [label="Exit block" style="filled" fillcolor=gray]; } - 50 [label="Exit function postpone" style="filled" fillcolor=red]; + 49 [label="Exit function postpone" style="filled" fillcolor=red]; } + 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; - 29 -> {30}; - 30 -> {31 45 46}; - 30 -> {31} [style=dashed]; + 29 -> {30 44 45}; + 29 -> {30} [style=dashed]; + 30 -> {31}; 31 -> {32}; 32 -> {33}; - 33 -> {34}; - 34 -> {35 41 42}; - 34 -> {35} [style=dashed]; + 33 -> {34 40 41}; + 33 -> {34} [style=dashed]; + 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; - 39 -> {40}; + 40 -> {41}; 41 -> {42}; 42 -> {43}; - 43 -> {44}; + 44 -> {45}; 45 -> {46}; - 46 -> {47}; - 47 -> {50}; + 46 -> {49}; + 46 -> {47} [style=dotted]; 47 -> {48} [style=dotted]; 48 -> {49} [style=dotted]; - 49 -> {50} [style=dotted]; } 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 847c95f9391..ef0e4ee632c 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 @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.util.ListMultimap import org.jetbrains.kotlin.fir.util.listMultimapOf import org.jetbrains.kotlin.utils.addToStdlib.runIf -import kotlin.random.Random @OptIn(CfgInternals::class) class ControlFlowGraphBuilder { @@ -44,7 +43,7 @@ class ControlFlowGraphBuilder { private val exitTargetsForReturn: SymbolBasedNodeStorage = SymbolBasedNodeStorage() private val exitTargetsForTry: Stack> = stackOf() - private val enterToLocalClassesMembers: MutableMap, CFGNode<*>> = mutableMapOf() + private val enterToLocalClassesMembers: MutableMap, Pair, EdgeKind>> = mutableMapOf() //return jumps via finally blocks, target -> jumps private val nonDirectJumps: ListMultimap, CFGNode<*>> = listMultimapOf() @@ -148,7 +147,7 @@ class ControlFlowGraphBuilder { if (localFunctionNode != null) { addEdge(localFunctionNode, enterNode) } else { - enterToLocalClassesMembers.remove(function.symbol)?.let { addEdge(it, enterNode, preferredKind = EdgeKind.DfgForward) } + addEdgeIfLocalClassMember(function, enterNode) } exitTargetsForReturn.push(exitNode) exitTargetsForTry.push(exitNode) @@ -358,8 +357,33 @@ class ControlFlowGraphBuilder { // ----------------------------------- Classes ----------------------------------- + private val FirControlFlowGraphOwner.memberShouldHaveGraph: Boolean + get() = when (this) { + is FirProperty -> initializer != null || delegate != null || hasExplicitBackingField + is FirField -> initializer != null + else -> true + } + + private inline fun FirClass.forEachGraphOwner(block: (FirControlFlowGraphOwner, isInPlace: Boolean) -> Unit) { + for (declaration in declarations) { + // TODO: constructors are also called-in-place, but after everything else, and only one of them is chosen. + if (declaration is FirControlFlowGraphOwner && declaration.memberShouldHaveGraph) { + block(declaration, declaration !is FirFunction && declaration !is FirClass) + } + if (declaration is FirProperty) { + declaration.getter?.let { block(it, false) } + declaration.setter?.let { block(it, false) } + } + } + } + + private fun addEdgeIfLocalClassMember(member: E, enterNode: CFGNode<*>) where E : FirControlFlowGraphOwner, E : FirDeclaration { + val (source, kind) = enterToLocalClassesMembers.remove(member.symbol) ?: return + addEdge(source, enterNode, preferredKind = kind) + } + fun enterClass(klass: FirClass, buildGraph: Boolean): Pair?, ClassEnterNode>? { - if (!buildGraph) { + if (!buildGraph || klass !is FirControlFlowGraphOwner) { graphs.push(ControlFlowGraph(null, "", ControlFlowGraph.Kind.ClassInitializer)) levelCounter++ return null @@ -386,18 +410,18 @@ class ControlFlowGraphBuilder { if (localClassEnterNode != null) { addEdge(localClassEnterNode, enterNode) } else { - enterToLocalClassesMembers.remove(klass.symbol)?.let { addEdge(it, enterNode, preferredKind = EdgeKind.DfgForward) } + addEdgeIfLocalClassMember(klass, enterNode) } + var foundInPlace = false if (enterNode.previousNodes.isNotEmpty()) { - for (member in klass.declarations) { - if (member is FirFunction || member is FirAnonymousInitializer || member is FirField || member is FirClass || member is FirProperty) { - enterToLocalClassesMembers[member.symbol] = enterNode - } - if (member is FirProperty) { - member.getter?.let { enterToLocalClassesMembers[it.symbol] = enterNode } - member.setter?.let { enterToLocalClassesMembers[it.symbol] = enterNode } + klass.forEachGraphOwner { member, isInPlace -> + val kind = if (!isInPlace || foundInPlace) { + EdgeKind.DfgForward + } else { + EdgeKind.Forward.also { foundInPlace = true } } + enterToLocalClassesMembers[(member as FirDeclaration).symbol] = enterNode to kind } } return localClassEnterNode to enterNode @@ -439,39 +463,29 @@ class ControlFlowGraphBuilder { val klass = currentGraph.declaration as FirClass val calledInPlace = mutableListOf() val calledLater = mutableListOf() - for (declaration in klass.declarations) { - if (declaration is FirControlFlowGraphOwner) { - // TODO: constructors are also called-in-place, but after everything else, and only one of them is chosen. - val target = if (declaration is FirFunction || declaration is FirClass) calledLater else calledInPlace - declaration.controlFlowGraphReference?.controlFlowGraph?.let(target::add) - } - if (declaration is FirProperty) { - declaration.getter?.controlFlowGraphReference?.controlFlowGraph?.let(calledLater::add) - declaration.setter?.controlFlowGraphReference?.controlFlowGraph?.let(calledLater::add) - } - } - - var node: CFGNode<*> = lastNodes.pop() as ClassEnterNode - var prevInitPartNode: CFGNode<*>? = null - for (graph in calledInPlace) { - val partNode = createPartOfClassInitializationNode(graph.declaration as FirControlFlowGraphOwner) - // TODO: if one initializer part does not terminate, deadness becomes funky here - addEdge(node, partNode, preferredKind = EdgeKind.CfgForward) - addEdge(partNode, graph.enterNode, preferredKind = EdgeKind.CfgForward) - if (prevInitPartNode != null) { - // Fake edge to make the nodes in this graph orderable without looking at subgraphs. - addEdge(prevInitPartNode, partNode, preferredKind = EdgeKind.DeadForward, propagateDeadness = false) - } - node = graph.exitNode - prevInitPartNode = partNode + klass.forEachGraphOwner { member, isInPlace -> + val graph = member.controlFlowGraphReference?.controlFlowGraph ?: return@forEachGraphOwner + if (isInPlace) calledInPlace.add(graph) else calledLater.add(graph) } + val enterNode = lastNodes.pop() as ClassEnterNode val exitNode = currentGraph.exitNode as ClassExitNode - addEdge(node, exitNode, preferredKind = EdgeKind.CfgForward) - if (prevInitPartNode != null) { - addEdge(prevInitPartNode, exitNode, preferredKind = EdgeKind.DeadForward, propagateDeadness = false) - } + if (calledInPlace.isEmpty()) { + addEdge(enterNode, exitNode, preferredKind = EdgeKind.CfgForward) + } else { + if (enterNode.previousNodes.isEmpty()) { + // Control flow edge to first initializer was only added for local classes. + addEdge(enterNode, calledInPlace[0].enterNode, preferredKind = EdgeKind.CfgForward) + } + val lastInPlace = calledInPlace.reduce { a, b -> + addEdgeToSubGraph(a.exitNode, b.enterNode) + b + } + addEdge(lastInPlace.exitNode, exitNode, preferredKind = EdgeKind.CfgForward) + // Fake edge to enforce ordering. + addEdge(enterNode, exitNode, preferredKind = EdgeKind.DeadForward, propagateDeadness = false) + } // TODO: Here we're assuming that the methods are called after the object is constructed, which is really not true // (init blocks can call them). But FE1.0 did so too, hence the following code compiles and prints 0: // val x: Int @@ -481,9 +495,10 @@ class ControlFlowGraphBuilder { // } // println(x) for (graph in calledLater) { - addEdge(exitNode, graph.enterNode, preferredKind = EdgeKind.CfgForward) + addEdgeToSubGraph(exitNode, graph.enterNode) } + enterNode.subGraphs = calledInPlace exitNode.subGraphs = calledLater return popGraph() } @@ -558,22 +573,18 @@ class ControlFlowGraphBuilder { // ----------------------------------- Property ----------------------------------- - private val FirProperty.hasInitialization: Boolean - get() = initializer != null || delegate != null || hasExplicitBackingField - fun enterProperty(property: FirProperty): PropertyInitializerEnterNode? { - if (!property.hasInitialization) return null - + if (!property.memberShouldHaveGraph) return null val (enterNode, exitNode) = enterGraph(property, "val ${property.name}", ControlFlowGraph.Kind.PropertyInitializer) { createPropertyInitializerEnterNode(it) to createPropertyInitializerExitNode(it) } exitTargetsForTry.push(exitNode) - enterToLocalClassesMembers.remove(property.symbol)?.let { addEdge(it, enterNode, preferredKind = EdgeKind.DfgForward) } + addEdgeIfLocalClassMember(property, enterNode) return enterNode } fun exitProperty(property: FirProperty): Pair? { - if (!property.hasInitialization) return null + if (!property.memberShouldHaveGraph) return null val exitNode = exitTargetsForTry.pop() as PropertyInitializerExitNode popAndAddEdge(exitNode) val graph = popGraph() @@ -584,18 +595,18 @@ class ControlFlowGraphBuilder { // ----------------------------------- Field ----------------------------------- fun enterField(field: FirField): FieldInitializerEnterNode? { - if (field.initializer == null) return null + if (!field.memberShouldHaveGraph) return null val (enterNode, exitNode) = enterGraph(field, "val ${field.name}", ControlFlowGraph.Kind.FieldInitializer) { createFieldInitializerEnterNode(it) to createFieldInitializerExitNode(it) } exitTargetsForTry.push(exitNode) - enterToLocalClassesMembers.remove(field.symbol)?.let { addEdge(it, enterNode, preferredKind = EdgeKind.DfgForward) } + addEdgeIfLocalClassMember(field, enterNode) return enterNode } fun exitField(field: FirField): Pair? { - if (field.initializer == null) return null + if (!field.memberShouldHaveGraph) return null val exitNode = exitTargetsForTry.pop() as FieldInitializerExitNode popAndAddEdge(exitNode) val graph = popGraph() @@ -1222,7 +1233,7 @@ class ControlFlowGraphBuilder { createInitBlockEnterNode(it) to createInitBlockExitNode(it) } exitTargetsForTry.push(exitNode) - enterToLocalClassesMembers.remove(initBlock.symbol)?.let { addEdge(it, enterNode, preferredKind = EdgeKind.DfgForward) } + addEdgeIfLocalClassMember(initBlock, enterNode) return enterNode } @@ -1322,6 +1333,7 @@ class ControlFlowGraphBuilder { // ------------------------------------------------------------------------------------------------------------------------- fun reset() { + enterToLocalClassesMembers.clear() postponedLambdaExits.reset() lastNodes.reset() } @@ -1368,6 +1380,16 @@ class ControlFlowGraphBuilder { CFGNode.addEdge(from, to, kind, propagateDeadness, label) } + private fun addEdgeToSubGraph(from: CFGNode<*>, to: CFGNode<*>) { + val wasDead = to.isDead + val isDead = wasDead || from.isDead + // Can only add control flow since data flow for every node that follows `to` has already been computed. + CFGNode.addEdge(from, to, if (isDead) EdgeKind.DeadForward else EdgeKind.CfgForward, propagateDeadness = true) + if (isDead && !wasDead) { + propagateDeadnessForward(to) + } + } + private fun addBackEdge(from: CFGNode<*>, to: CFGNode<*>, isDead: Boolean = false, label: EdgeLabel = LoopBackPath) { val kind = if (isDead || from.isDead || to.isDead) EdgeKind.DeadBackward else EdgeKind.CfgBackward CFGNode.addEdge(from, to, kind, propagateDeadness = false, label = label) 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 314fba0a3e6..077a1301805 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 @@ -52,9 +52,6 @@ fun ControlFlowGraphBuilder.createBlockEnterNode(fir: FirBlock): BlockEnterNode fun ControlFlowGraphBuilder.createBlockExitNode(fir: FirBlock): BlockExitNode = BlockExitNode(currentGraph, fir, levelCounter, createId()) -fun ControlFlowGraphBuilder.createPartOfClassInitializationNode(fir: FirControlFlowGraphOwner): PartOfClassInitializationNode = - PartOfClassInitializationNode(currentGraph, fir, levelCounter, createId()) - fun ControlFlowGraphBuilder.createPropertyInitializerExitNode(fir: FirProperty): PropertyInitializerExitNode = PropertyInitializerExitNode(currentGraph, fir, levelCounter, createId()) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt index fadbfd5c992..290c311f884 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt @@ -224,8 +224,10 @@ class AnonymousFunctionExpressionNode(owner: ControlFlowGraph, override val fir: // ----------------------------------- Classes ----------------------------------- -class ClassEnterNode(owner: ControlFlowGraph, override val fir: FirClass, level: Int, id: Int) : CFGNode(owner, level, id), +class ClassEnterNode(owner: ControlFlowGraph, override val fir: FirClass, level: Int, id: Int) : CFGNodeWithSubgraphs(owner, level, id), GraphEnterNodeMarker { + override lateinit var subGraphs: List + override fun accept(visitor: ControlFlowGraphVisitor, data: D): R { return visitor.visitClassEnterNode(this, data) } @@ -279,14 +281,6 @@ class ScriptExitNode(owner: ControlFlowGraph, override val fir: FirScript, level } } -// ----------------------------------- Initialization ----------------------------------- - -class PartOfClassInitializationNode(owner: ControlFlowGraph, override val fir: FirControlFlowGraphOwner, level: Int, id: Int) : CFGNodeWithCfgOwner(owner, level, id) { - override fun accept(visitor: ControlFlowGraphVisitor, data: D): R { - return visitor.visitPartOfClassInitializationNode(this, data) - } -} - // ----------------------------------- Property ----------------------------------- class PropertyInitializerEnterNode(owner: ControlFlowGraph, override val fir: FirProperty, level: Int, id: Int) : CFGNode(owner, level, id), diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt index 28483ca6dd5..0da21856ade 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNodeRenderer.kt @@ -82,7 +82,6 @@ fun CFGNode<*>.render(): String = is BinaryOrEnterRightOperandNode -> "Enter right part of ||" is BinaryOrExitNode -> "Exit ||" - is PartOfClassInitializationNode -> "Part of class initialization" is PropertyInitializerEnterNode -> "Enter property" is PropertyInitializerExitNode -> "Exit property" is DelegateExpressionExitNode -> "Exit property delegate" diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt index 3744a946bca..1cc8221ebe3 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphVisitor.kt @@ -96,12 +96,6 @@ abstract class ControlFlowGraphVisitor { return visitNode(node, data) } - // ----------------------------------- Initialization ----------------------------------- - - open fun visitPartOfClassInitializationNode(node: PartOfClassInitializationNode, data: D): R { - return visitNode(node, data) - } - // ----------------------------------- Property ----------------------------------- open fun visitPropertyInitializerEnterNode(node: PropertyInitializerEnterNode, data: D): R { diff --git a/compiler/testData/codegen/box/smartCasts/kt44814.dot b/compiler/testData/codegen/box/smartCasts/kt44814.dot index 23ef4d5c189..4cadef9c550 100644 --- a/compiler/testData/codegen/box/smartCasts/kt44814.dot +++ b/compiler/testData/codegen/box/smartCasts/kt44814.dot @@ -40,108 +40,109 @@ digraph kt44814_kt { subgraph cluster_4 { color=red 10 [label="Enter class FirPsiSourceElement [1]" style="filled" fillcolor=red]; - 11 [label="Part of class initialization [1]"]; subgraph cluster_5 { color=blue - 12 [label="Enter property [2]" style="filled" fillcolor=red]; - 13 [label="Access variable R|/psi| [2]"]; - 14 [label="Exit property [2]" style="filled" fillcolor=red]; + 11 [label="Enter property [2]" style="filled" fillcolor=red]; + 12 [label="Access variable R|/psi| [2]"]; + 13 [label="Exit property [2]" style="filled" fillcolor=red]; } - 15 [label="Part of class initialization [1]"]; subgraph cluster_6 { color=blue - 16 [label="Enter property [2]" style="filled" fillcolor=red]; - 17 [label="Access variable R|/lighterASTNode| [2]"]; - 18 [label="Exit property [2]" style="filled" fillcolor=red]; + 14 [label="Enter property [2]" style="filled" fillcolor=red]; + 15 [label="Access variable R|/lighterASTNode| [2]"]; + 16 [label="Exit property [2]" style="filled" fillcolor=red]; } - 19 [label="Part of class initialization [1]"]; subgraph cluster_7 { color=blue - 20 [label="Enter property [2]" style="filled" fillcolor=red]; - 21 [label="Access variable R|/treeStructure| [2]"]; - 22 [label="Exit property [2]" style="filled" fillcolor=red]; + 17 [label="Enter property [2]" style="filled" fillcolor=red]; + 18 [label="Access variable R|/treeStructure| [2]"]; + 19 [label="Exit property [2]" style="filled" fillcolor=red]; } - 23 [label="Exit class FirPsiSourceElement [1]" style="filled" fillcolor=red]; + 20 [label="Exit class FirPsiSourceElement [1]" style="filled" fillcolor=red]; } subgraph cluster_8 { color=blue - 24 [label="Enter function [2]" style="filled" fillcolor=red]; - 25 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 26 [label="Exit function [2]" style="filled" fillcolor=red]; + 21 [label="Enter function [2]" style="filled" fillcolor=red]; + 22 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 23 [label="Exit function [2]" style="filled" fillcolor=red]; } 10 -> {11} [color=green]; - 11 -> {12} [color=green]; - 11 -> {15} [style=dotted]; - 11 -> {12} [style=dashed]; + 10 -> {20} [style=dotted]; + 10 -> {11 14 17} [style=dashed]; + 11 -> {12}; 12 -> {13}; - 13 -> {14}; - 14 -> {15} [color=green]; - 15 -> {16} [color=green]; - 15 -> {19} [style=dotted]; - 15 -> {16} [style=dashed]; - 16 -> {17}; + 13 -> {14} [color=green]; + 14 -> {15}; + 15 -> {16}; + 16 -> {17} [color=green]; 17 -> {18}; - 18 -> {19} [color=green]; + 18 -> {19}; 19 -> {20} [color=green]; - 19 -> {23} [style=dotted]; - 19 -> {20} [style=dashed]; - 20 -> {21}; + 20 -> {21} [color=green]; + 20 -> {21} [style=dashed]; 21 -> {22}; - 22 -> {23} [color=green]; - 23 -> {24} [color=green]; - 23 -> {24} [style=dashed]; - 24 -> {25}; - 25 -> {26}; + 22 -> {23}; subgraph cluster_9 { color=red - 27 [label="Enter class FirLightSourceElement [1]" style="filled" fillcolor=red]; - 28 [label="Part of class initialization [1]"]; + 24 [label="Enter class FirLightSourceElement [1]" style="filled" fillcolor=red]; subgraph cluster_10 { color=blue - 29 [label="Enter property [2]" style="filled" fillcolor=red]; - 30 [label="Access variable R|/lighterASTNode| [2]"]; - 31 [label="Exit property [2]" style="filled" fillcolor=red]; + 25 [label="Enter property [2]" style="filled" fillcolor=red]; + 26 [label="Access variable R|/lighterASTNode| [2]"]; + 27 [label="Exit property [2]" style="filled" fillcolor=red]; } - 32 [label="Part of class initialization [1]"]; subgraph cluster_11 { color=blue - 33 [label="Enter property [2]" style="filled" fillcolor=red]; - 34 [label="Access variable R|/treeStructure| [2]"]; - 35 [label="Exit property [2]" style="filled" fillcolor=red]; + 28 [label="Enter property [2]" style="filled" fillcolor=red]; + 29 [label="Access variable R|/treeStructure| [2]"]; + 30 [label="Exit property [2]" style="filled" fillcolor=red]; } - 36 [label="Exit class FirLightSourceElement [1]" style="filled" fillcolor=red]; + 31 [label="Exit class FirLightSourceElement [1]" style="filled" fillcolor=red]; } subgraph cluster_12 { + color=blue + 32 [label="Enter function [2]" style="filled" fillcolor=red]; + 33 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 34 [label="Exit function [2]" style="filled" fillcolor=red]; + } + 24 -> {25} [color=green]; + 24 -> {31} [style=dotted]; + 24 -> {25 28} [style=dashed]; + 25 -> {26}; + 26 -> {27}; + 27 -> {28} [color=green]; + 28 -> {29}; + 29 -> {30}; + 30 -> {31} [color=green]; + 31 -> {32} [color=green]; + 31 -> {32} [style=dashed]; + 32 -> {33}; + 33 -> {34}; + + subgraph cluster_13 { + color=red + 35 [label="Enter class PsiElement [1]" style="filled" fillcolor=red]; + 36 [label="Exit class PsiElement [1]" style="filled" fillcolor=red]; + } + subgraph cluster_14 { color=blue 37 [label="Enter function [2]" style="filled" fillcolor=red]; - 38 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 38 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; 39 [label="Exit function [2]" style="filled" fillcolor=red]; } - 27 -> {28} [color=green]; - 28 -> {29} [color=green]; - 28 -> {32} [style=dotted]; - 28 -> {29} [style=dashed]; - 29 -> {30}; - 30 -> {31}; - 31 -> {32} [color=green]; - 32 -> {33} [color=green]; - 32 -> {36} [style=dotted]; - 32 -> {33} [style=dashed]; - 33 -> {34}; - 34 -> {35}; 35 -> {36} [color=green]; 36 -> {37} [color=green]; 36 -> {37} [style=dashed]; 37 -> {38}; 38 -> {39}; - subgraph cluster_13 { + subgraph cluster_15 { color=red - 40 [label="Enter class PsiElement [1]" style="filled" fillcolor=red]; - 41 [label="Exit class PsiElement [1]" style="filled" fillcolor=red]; + 40 [label="Enter class ASTNode [1]" style="filled" fillcolor=red]; + 41 [label="Exit class ASTNode [1]" style="filled" fillcolor=red]; } - subgraph cluster_14 { + subgraph cluster_16 { color=blue 42 [label="Enter function [2]" style="filled" fillcolor=red]; 43 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; @@ -153,374 +154,338 @@ digraph kt44814_kt { 42 -> {43}; 43 -> {44}; - subgraph cluster_15 { - color=red - 45 [label="Enter class ASTNode [1]" style="filled" fillcolor=red]; - 46 [label="Exit class ASTNode [1]" style="filled" fillcolor=red]; - } - subgraph cluster_16 { - color=blue - 47 [label="Enter function [2]" style="filled" fillcolor=red]; - 48 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 49 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 45 -> {46} [color=green]; - 46 -> {47} [color=green]; - 46 -> {47} [style=dashed]; - 47 -> {48}; - 48 -> {49}; - subgraph cluster_17 { color=red - 50 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; - 51 [label="Part of class initialization [1]"]; + 45 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; subgraph cluster_18 { color=blue - 52 [label="Enter property [2]" style="filled" fillcolor=red]; - 53 [label="Access variable R|/_children| [2]"]; - 54 [label="Exit property [2]" style="filled" fillcolor=red]; + 46 [label="Enter property [2]" style="filled" fillcolor=red]; + 47 [label="Access variable R|/_children| [2]"]; + 48 [label="Exit property [2]" style="filled" fillcolor=red]; } - 55 [label="Part of class initialization [1]"]; subgraph cluster_19 { color=blue - 56 [label="Enter property [2]" style="filled" fillcolor=red]; - 57 [label="Access qualifier /TokenType [2]"]; - 58 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; - 59 [label="Exit property [2]" style="filled" fillcolor=red]; + 49 [label="Enter property [2]" style="filled" fillcolor=red]; + 50 [label="Access qualifier /TokenType [2]"]; + 51 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; + 52 [label="Exit property [2]" style="filled" fillcolor=red]; } - 60 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; + 53 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; } subgraph cluster_20 { color=blue - 61 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; + 54 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 62 [label="Enter block [2]"]; - 63 [label="Access variable R|/LighterASTNode._children| [2]"]; - 64 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; - 65 [label="Stub [2]" style="filled" fillcolor=gray]; - 66 [label="Exit block [2]" style="filled" fillcolor=gray]; + 55 [label="Enter block [2]"]; + 56 [label="Access variable R|/LighterASTNode._children| [2]"]; + 57 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; + 58 [label="Stub [2]" style="filled" fillcolor=gray]; + 59 [label="Exit block [2]" style="filled" fillcolor=gray]; } - 67 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; + 60 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; } subgraph cluster_22 { color=blue - 68 [label="Enter function [2]" style="filled" fillcolor=red]; - 69 [label="Enter default value of _children [2]"]; + 61 [label="Enter function [2]" style="filled" fillcolor=red]; + 62 [label="Enter default value of _children [2]"]; subgraph cluster_23 { color=blue - 70 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; - 71 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; - 72 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; + 63 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; + 64 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; + 65 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; } - 73 [label="Exit default value of _children [2]"]; - 74 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 75 [label="Exit function [2]" style="filled" fillcolor=red]; + 66 [label="Exit default value of _children [2]"]; + 67 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 68 [label="Exit function [2]" style="filled" fillcolor=red]; } - 50 -> {51} [color=green]; - 51 -> {52} [color=green]; - 51 -> {55} [style=dotted]; - 51 -> {52} [style=dashed]; - 52 -> {53}; - 53 -> {54}; - 54 -> {55} [color=green]; - 55 -> {56} [color=green]; - 55 -> {60} [style=dotted]; - 55 -> {56} [style=dashed]; + 45 -> {46} [color=green]; + 45 -> {53} [style=dotted]; + 45 -> {46 49} [style=dashed]; + 46 -> {47}; + 47 -> {48}; + 48 -> {49} [color=green]; + 49 -> {50}; + 50 -> {51}; + 51 -> {52}; + 52 -> {53} [color=green]; + 53 -> {54 61} [color=green]; + 53 -> {54 61} [style=dashed]; + 54 -> {55}; + 55 -> {56}; 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - 59 -> {60} [color=green]; - 60 -> {61 68} [color=green]; - 60 -> {61 68} [style=dashed]; + 57 -> {60}; + 57 -> {58} [style=dotted]; + 58 -> {59} [style=dotted]; + 59 -> {60} [style=dotted]; 61 -> {62}; - 62 -> {63}; + 62 -> {63 66}; + 62 -> {63} [style=dashed]; 63 -> {64}; - 64 -> {67}; - 64 -> {65} [style=dotted]; - 65 -> {66} [style=dotted]; - 66 -> {67} [style=dotted]; - 68 -> {69}; - 69 -> {70 73}; - 69 -> {70} [style=dashed]; - 70 -> {71}; - 71 -> {72}; - 72 -> {73}; - 73 -> {74}; - 74 -> {75}; + 64 -> {65}; + 65 -> {66}; + 66 -> {67}; + 67 -> {68}; subgraph cluster_24 { color=red - 76 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; - 77 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; + 69 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; + 70 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; } subgraph cluster_25 { color=blue - 78 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 79 [label="Part of class initialization [2]"]; + 71 [label="Enter class Companion [2]" style="filled" fillcolor=red]; subgraph cluster_26 { color=blue - 80 [label="Enter property [3]" style="filled" fillcolor=red]; - 81 [label="Function call: R|/TokenType.TokenType|() [3]" style="filled" fillcolor=yellow]; - 82 [label="Exit property [3]" style="filled" fillcolor=red]; + 72 [label="Enter property [3]" style="filled" fillcolor=red]; + 73 [label="Function call: R|/TokenType.TokenType|() [3]" style="filled" fillcolor=yellow]; + 74 [label="Exit property [3]" style="filled" fillcolor=red]; } - 83 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + 75 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } subgraph cluster_27 { color=blue - 84 [label="Enter function [3]" style="filled" fillcolor=red]; - 85 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 86 [label="Exit function [3]" style="filled" fillcolor=red]; + 76 [label="Enter function [3]" style="filled" fillcolor=red]; + 77 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 78 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_28 { color=blue - 87 [label="Enter function [2]" style="filled" fillcolor=red]; - 88 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 89 [label="Exit function [2]" style="filled" fillcolor=red]; + 79 [label="Enter function [2]" style="filled" fillcolor=red]; + 80 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 81 [label="Exit function [2]" style="filled" fillcolor=red]; } - 76 -> {77} [color=green]; - 77 -> {78 87} [color=green]; - 77 -> {78 87} [style=dashed]; - 78 -> {79} [color=green]; - 79 -> {80} [color=green]; - 79 -> {83} [style=dotted]; - 79 -> {80} [style=dashed]; + 69 -> {70} [color=green]; + 70 -> {71 79} [color=green]; + 70 -> {71 79} [style=dashed]; + 71 -> {72} [color=green]; + 71 -> {75} [style=dotted]; + 71 -> {72} [style=dashed]; + 72 -> {73}; + 73 -> {74}; + 74 -> {75} [color=green]; + 75 -> {76} [color=green]; + 75 -> {76} [style=dashed]; + 76 -> {77}; + 77 -> {78}; + 79 -> {80}; 80 -> {81}; - 81 -> {82}; + + subgraph cluster_29 { + color=red + 82 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + 83 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + } + subgraph cluster_30 { + color=blue + 84 [label="Enter function [2]" style="filled" fillcolor=red]; + 85 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 86 [label="Exit function [2]" style="filled" fillcolor=red]; + } 82 -> {83} [color=green]; 83 -> {84} [color=green]; 83 -> {84} [style=dashed]; 84 -> {85}; 85 -> {86}; - 87 -> {88}; - 88 -> {89}; - - subgraph cluster_29 { - color=red - 90 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; - 91 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; - } - subgraph cluster_30 { - color=blue - 92 [label="Enter function [2]" style="filled" fillcolor=red]; - 93 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 94 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 90 -> {91} [color=green]; - 91 -> {92} [color=green]; - 91 -> {92} [style=dashed]; - 92 -> {93}; - 93 -> {94}; subgraph cluster_31 { color=red - 95 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; - 96 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; + 87 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; + 88 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; } subgraph cluster_32 { + color=blue + 89 [label="Enter function [2]" style="filled" fillcolor=red]; + 90 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 91 [label="Exit function [2]" style="filled" fillcolor=red]; + } + 87 -> {88} [color=green]; + 88 -> {89} [color=green]; + 88 -> {89} [style=dashed]; + 89 -> {90}; + 90 -> {91}; + + subgraph cluster_33 { + color=red + 92 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; + subgraph cluster_34 { + color=blue + 93 [label="Enter property [2]" style="filled" fillcolor=red]; + 94 [label="Function call: R|/KtModifierList.KtModifierList|() [2]" style="filled" fillcolor=yellow]; + 95 [label="Exit property [2]" style="filled" fillcolor=red]; + } + 96 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; + } + subgraph cluster_35 { color=blue 97 [label="Enter function [2]" style="filled" fillcolor=red]; 98 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; 99 [label="Exit function [2]" style="filled" fillcolor=red]; } + 92 -> {93} [color=green]; + 92 -> {96} [style=dotted]; + 92 -> {93} [style=dashed]; + 93 -> {94}; + 94 -> {95}; 95 -> {96} [color=green]; 96 -> {97} [color=green]; 96 -> {97} [style=dashed]; 97 -> {98}; 98 -> {99}; - subgraph cluster_33 { - color=red - 100 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; - 101 [label="Part of class initialization [1]"]; - subgraph cluster_34 { - color=blue - 102 [label="Enter property [2]" style="filled" fillcolor=red]; - 103 [label="Function call: R|/KtModifierList.KtModifierList|() [2]" style="filled" fillcolor=yellow]; - 104 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 105 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; - } - subgraph cluster_35 { - color=blue - 106 [label="Enter function [2]" style="filled" fillcolor=red]; - 107 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 108 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 100 -> {101} [color=green]; - 101 -> {102} [color=green]; - 101 -> {105} [style=dotted]; - 101 -> {102} [style=dashed]; - 102 -> {103}; - 103 -> {104}; - 104 -> {105} [color=green]; - 105 -> {106} [color=green]; - 105 -> {106} [style=dashed]; - 106 -> {107}; - 107 -> {108}; - subgraph cluster_36 { color=red - 109 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; - 110 [label="Part of class initialization [1]"]; + 100 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; subgraph cluster_37 { color=blue - 111 [label="Enter property [2]" style="filled" fillcolor=red]; - 112 [label="Access variable R|/node| [2]"]; - 113 [label="Exit property [2]" style="filled" fillcolor=red]; + 101 [label="Enter property [2]" style="filled" fillcolor=red]; + 102 [label="Access variable R|/node| [2]"]; + 103 [label="Exit property [2]" style="filled" fillcolor=red]; } - 114 [label="Part of class initialization [1]"]; subgraph cluster_38 { color=blue - 115 [label="Enter property [2]" style="filled" fillcolor=red]; - 116 [label="Access variable R|/token| [2]"]; - 117 [label="Exit property [2]" style="filled" fillcolor=red]; + 104 [label="Enter property [2]" style="filled" fillcolor=red]; + 105 [label="Access variable R|/token| [2]"]; + 106 [label="Exit property [2]" style="filled" fillcolor=red]; } - 118 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; + 107 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; } subgraph cluster_39 { color=blue - 119 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; - 120 [label="Part of class initialization [2]"]; + 108 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; subgraph cluster_40 { color=blue - 121 [label="Enter property [3]" style="filled" fillcolor=red]; - 122 [label="Access variable R|/tree| [3]"]; - 123 [label="Exit property [3]" style="filled" fillcolor=red]; + 109 [label="Enter property [3]" style="filled" fillcolor=red]; + 110 [label="Access variable R|/tree| [3]"]; + 111 [label="Exit property [3]" style="filled" fillcolor=red]; } - 124 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; + 112 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; } subgraph cluster_41 { color=blue - 125 [label="Enter function [3]" style="filled" fillcolor=red]; - 126 [label="Access variable R|/node| [4]"]; - 127 [label="Access variable R|/token| [4]"]; - 128 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; - 129 [label="Exit function [3]" style="filled" fillcolor=red]; + 113 [label="Enter function [3]" style="filled" fillcolor=red]; + 114 [label="Access variable R|/node| [4]"]; + 115 [label="Access variable R|/token| [4]"]; + 116 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; + 117 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_42 { color=blue - 130 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; - 131 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; + 118 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; + 119 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; } subgraph cluster_43 { color=blue - 132 [label="Enter function [3]" style="filled" fillcolor=red]; - 133 [label="Access variable R|/node| [4]"]; - 134 [label="Access variable R|/token| [4]"]; - 135 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; - 136 [label="Exit function [3]" style="filled" fillcolor=red]; + 120 [label="Enter function [3]" style="filled" fillcolor=red]; + 121 [label="Access variable R|/node| [4]"]; + 122 [label="Access variable R|/token| [4]"]; + 123 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; + 124 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_44 { color=blue - 137 [label="Enter function [2]" style="filled" fillcolor=red]; - 138 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 139 [label="Exit function [2]" style="filled" fillcolor=red]; + 125 [label="Enter function [2]" style="filled" fillcolor=red]; + 126 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 127 [label="Exit function [2]" style="filled" fillcolor=red]; } - 109 -> {110} [color=green]; - 110 -> {111} [color=green]; - 110 -> {114} [style=dotted]; - 110 -> {111} [style=dashed]; - 111 -> {112}; - 112 -> {113}; - 113 -> {114} [color=green]; - 114 -> {115} [color=green]; - 114 -> {118} [style=dotted]; - 114 -> {115} [style=dashed]; + 100 -> {101} [color=green]; + 100 -> {107} [style=dotted]; + 100 -> {101 104} [style=dashed]; + 101 -> {102}; + 102 -> {103}; + 103 -> {104} [color=green]; + 104 -> {105}; + 105 -> {106}; + 106 -> {107} [color=green]; + 107 -> {108 118 125} [color=green]; + 107 -> {108 118 125} [style=dashed]; + 108 -> {109} [color=green]; + 108 -> {112} [style=dotted]; + 108 -> {109} [style=dashed]; + 109 -> {110}; + 110 -> {111}; + 111 -> {112} [color=green]; + 112 -> {113} [color=green]; + 112 -> {113} [style=dashed]; + 113 -> {114}; + 114 -> {115}; 115 -> {116}; 116 -> {117}; - 117 -> {118} [color=green]; - 118 -> {119 130 137} [color=green]; - 118 -> {119 130 137} [style=dashed]; + 118 -> {119} [color=green]; 119 -> {120} [color=green]; - 120 -> {121} [color=green]; - 120 -> {124} [style=dotted]; - 120 -> {121} [style=dashed]; + 119 -> {120} [style=dashed]; + 120 -> {121}; 121 -> {122}; 122 -> {123}; - 123 -> {124} [color=green]; - 124 -> {125} [color=green]; - 124 -> {125} [style=dashed]; + 123 -> {124}; 125 -> {126}; 126 -> {127}; - 127 -> {128}; - 128 -> {129}; - 130 -> {131} [color=green]; - 131 -> {132} [color=green]; - 131 -> {132} [style=dashed]; - 132 -> {133}; - 133 -> {134}; - 134 -> {135}; - 135 -> {136}; - 137 -> {138}; - 138 -> {139}; subgraph cluster_45 { color=red - 140 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; - 141 [label="Part of class initialization [1]"]; + 128 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; subgraph cluster_46 { color=blue - 142 [label="Enter property [2]" style="filled" fillcolor=red]; - 143 [label="Function call: R|kotlin/collections/emptyList||>() [2]" style="filled" fillcolor=yellow]; - 144 [label="Exit property [2]" style="filled" fillcolor=red]; + 129 [label="Enter property [2]" style="filled" fillcolor=red]; + 130 [label="Function call: R|kotlin/collections/emptyList||>() [2]" style="filled" fillcolor=yellow]; + 131 [label="Exit property [2]" style="filled" fillcolor=red]; } - 145 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; + 132 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; } subgraph cluster_47 { color=blue - 146 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 147 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + 133 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 134 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } subgraph cluster_48 { color=blue - 148 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; + 135 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; subgraph cluster_49 { color=blue - 149 [label="Enter block [3]"]; - 150 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; - 151 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; - 152 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; - 153 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; - 154 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; - 155 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; - 156 [label="Access variable R|/sourceElement| [4]"]; - 157 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; - 158 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; + 136 [label="Enter block [3]"]; + 137 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; + 138 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; + 139 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; + 140 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; + 141 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; + 142 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; + 143 [label="Access variable R|/sourceElement| [4]"]; + 144 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; + 145 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; subgraph cluster_50 { color=blue - 159 [label="Enter when [3]"]; + 146 [label="Enter when [3]"]; subgraph cluster_51 { color=blue - 160 [label="Enter when branch condition [4]"]; - 161 [label="Access variable R|/result| [5]"]; - 162 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; - 163 [label="Exit when branch condition [4]"]; + 147 [label="Enter when branch condition [4]"]; + 148 [label="Access variable R|/result| [5]"]; + 149 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; + 150 [label="Exit when branch condition [4]"]; } subgraph cluster_52 { color=blue - 164 [label="Enter when branch condition else [5]"]; - 165 [label="Exit when branch condition [5]"]; + 151 [label="Enter when branch condition else [5]"]; + 152 [label="Exit when branch condition [5]"]; } - 166 [label="Enter when branch result [6]"]; + 153 [label="Enter when branch result [6]"]; subgraph cluster_53 { color=blue - 167 [label="Enter block [6]"]; - 168 [label="Const: String(Fail) [6]"]; - 169 [label="Exit block [6]"]; + 154 [label="Enter block [6]"]; + 155 [label="Const: String(Fail) [6]"]; + 156 [label="Exit block [6]"]; } - 170 [label="Exit when branch result [5]"]; - 171 [label="Enter when branch result [5]"]; + 157 [label="Exit when branch result [5]"]; + 158 [label="Enter when branch result [5]"]; subgraph cluster_54 { color=blue - 172 [label="Enter block [5]"]; - 173 [label="Const: String(OK) [5]"]; - 174 [label="Exit block [5]"]; + 159 [label="Enter block [5]"]; + 160 [label="Const: String(OK) [5]"]; + 161 [label="Exit block [5]"]; } - 175 [label="Exit when branch result [4]"]; - 176 [label="Exit when [3]"]; + 162 [label="Exit when branch result [4]"]; + 163 [label="Exit when [3]"]; } - 177 [label="Jump: ^boxImpl when () { + 164 [label="Jump: ^boxImpl when () { (R|/result| is R|FirModifierList.FirLightModifierList|) -> { String(OK) } @@ -529,125 +494,125 @@ digraph kt44814_kt { } } [3]"]; - 178 [label="Stub [3]" style="filled" fillcolor=gray]; - 179 [label="Exit block [3]" style="filled" fillcolor=gray]; + 165 [label="Stub [3]" style="filled" fillcolor=gray]; + 166 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 180 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; + 167 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; } subgraph cluster_55 { color=blue - 181 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; + 168 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; subgraph cluster_56 { color=blue - 182 [label="Enter block [3]"]; + 169 [label="Enter block [3]"]; subgraph cluster_57 { color=blue - 183 [label="Enter when [3]"]; - 184 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; + 170 [label="Enter when [3]"]; + 171 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; subgraph cluster_58 { color=blue - 185 [label="Enter when branch condition [4]"]; - 186 [label="Exit $subj [5]"]; - 187 [label="Const: Null(null) [5]"]; - 188 [label="Equality operator == [5]"]; - 189 [label="Exit when branch condition [4]"]; + 172 [label="Enter when branch condition [4]"]; + 173 [label="Exit $subj [5]"]; + 174 [label="Const: Null(null) [5]"]; + 175 [label="Equality operator == [5]"]; + 176 [label="Exit when branch condition [4]"]; } subgraph cluster_59 { color=blue - 190 [label="Enter when branch condition [5]"]; - 191 [label="Exit $subj [6]"]; - 192 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [6]"]; - 193 [label="Exit when branch condition [5]"]; + 177 [label="Enter when branch condition [5]"]; + 178 [label="Exit $subj [6]"]; + 179 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [6]"]; + 180 [label="Exit when branch condition [5]"]; } subgraph cluster_60 { color=blue - 194 [label="Enter when branch condition [6]"]; - 195 [label="Exit $subj [7]"]; - 196 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [7]"]; - 197 [label="Exit when branch condition [6]"]; + 181 [label="Enter when branch condition [6]"]; + 182 [label="Exit $subj [7]"]; + 183 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [7]"]; + 184 [label="Exit when branch condition [6]"]; } - 198 [label="Enter when branch result [7]"]; + 185 [label="Enter when branch result [7]"]; subgraph cluster_61 { color=blue - 199 [label="Enter block [7]"]; - 200 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; - 201 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; - 202 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]" style="filled" fillcolor=yellow]; - 203 [label="Postponed enter to lambda [8]"]; + 186 [label="Enter block [7]"]; + 187 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; + 188 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; + 189 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]" style="filled" fillcolor=yellow]; + 190 [label="Postponed enter to lambda [8]"]; subgraph cluster_62 { color=blue - 204 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; + 191 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; subgraph cluster_63 { color=blue - 205 [label="Enter block [9]"]; - 206 [label="Access variable R|/it| [9]"]; - 207 [label="Enter safe call [9]"]; - 208 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; - 209 [label="Exit safe call [9]"]; - 210 [label="Access qualifier /TokenType [9]"]; - 211 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; - 212 [label="Equality operator == [9]"]; - 213 [label="Exit block [9]"]; + 192 [label="Enter block [9]"]; + 193 [label="Access variable R|/it| [9]"]; + 194 [label="Enter safe call [9]"]; + 195 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; + 196 [label="Exit safe call [9]"]; + 197 [label="Access qualifier /TokenType [9]"]; + 198 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; + 199 [label="Equality operator == [9]"]; + 200 [label="Exit block [9]"]; } - 214 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; + 201 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; } - 215 [label="Postponed exit from lambda [8]"]; - 216 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]" style="filled" fillcolor=yellow]; - 217 [label="Exit lhs of ?: [7]"]; - 218 [label="Enter rhs of ?: [7]"]; - 219 [label="Const: Null(null) [7]"]; - 220 [label="Jump: ^getModifierList Null(null) [7]"]; - 221 [label="Stub [7]" style="filled" fillcolor=gray]; - 222 [label="Lhs of ?: is not null [7]"]; - 223 [label="Exit ?: [7]"]; - 224 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; - 225 [label="Access variable R|/modifierListNode| [8]"]; - 226 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; - 227 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]" style="filled" fillcolor=yellow]; - 228 [label="Exit block [7]"]; + 202 [label="Postponed exit from lambda [8]"]; + 203 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]" style="filled" fillcolor=yellow]; + 204 [label="Exit lhs of ?: [7]"]; + 205 [label="Enter rhs of ?: [7]"]; + 206 [label="Const: Null(null) [7]"]; + 207 [label="Jump: ^getModifierList Null(null) [7]"]; + 208 [label="Stub [7]" style="filled" fillcolor=gray]; + 209 [label="Lhs of ?: is not null [7]"]; + 210 [label="Exit ?: [7]"]; + 211 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; + 212 [label="Access variable R|/modifierListNode| [8]"]; + 213 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; + 214 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]" style="filled" fillcolor=yellow]; + 215 [label="Exit block [7]"]; } - 229 [label="Exit when branch result [6]"]; - 230 [label="Enter when branch result [6]"]; + 216 [label="Exit when branch result [6]"]; + 217 [label="Enter when branch result [6]"]; subgraph cluster_64 { color=blue - 231 [label="Enter block [6]"]; - 232 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; - 233 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; - 234 [label="Enter safe call [6]"]; - 235 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; - 236 [label="Enter safe call [6]"]; - 237 [label="Postponed enter to lambda [7]"]; + 218 [label="Enter block [6]"]; + 219 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; + 220 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; + 221 [label="Enter safe call [6]"]; + 222 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; + 223 [label="Enter safe call [6]"]; + 224 [label="Postponed enter to lambda [7]"]; subgraph cluster_65 { color=blue - 238 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; + 225 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; subgraph cluster_66 { color=blue - 239 [label="Enter block [8]"]; - 240 [label="Access variable R|/it| [9]"]; - 241 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]" style="filled" fillcolor=yellow]; - 242 [label="Exit block [8]"]; + 226 [label="Enter block [8]"]; + 227 [label="Access variable R|/it| [9]"]; + 228 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]" style="filled" fillcolor=yellow]; + 229 [label="Exit block [8]"]; } - 243 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; + 230 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; } - 244 [label="Postponed exit from lambda [7]"]; - 245 [label="Function call: $subj$.R|kotlin/let|(...) [6]" style="filled" fillcolor=yellow]; - 246 [label="Exit safe call [6]"]; - 247 [label="Exit safe call [6]"]; - 248 [label="Exit block [6]"]; + 231 [label="Postponed exit from lambda [7]"]; + 232 [label="Function call: $subj$.R|kotlin/let|(...) [6]" style="filled" fillcolor=yellow]; + 233 [label="Exit safe call [6]"]; + 234 [label="Exit safe call [6]"]; + 235 [label="Exit block [6]"]; } - 249 [label="Exit when branch result [5]"]; - 250 [label="Merge postponed lambda exits [6]"]; - 251 [label="Enter when branch result [5]"]; + 236 [label="Exit when branch result [5]"]; + 237 [label="Merge postponed lambda exits [6]"]; + 238 [label="Enter when branch result [5]"]; subgraph cluster_67 { color=blue - 252 [label="Enter block [5]"]; - 253 [label="Const: Null(null) [5]"]; - 254 [label="Exit block [5]"]; + 239 [label="Enter block [5]"]; + 240 [label="Const: Null(null) [5]"]; + 241 [label="Exit block [5]"]; } - 255 [label="Exit when branch result [4]"]; - 256 [label="Exit when [3]"]; + 242 [label="Exit when branch result [4]"]; + 243 [label="Exit when [3]"]; } - 257 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { + 244 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { ==($subj$, Null(null)) -> { Null(null) } @@ -666,111 +631,120 @@ digraph kt44814_kt { } } [3]"]; - 258 [label="Stub [3]" style="filled" fillcolor=gray]; - 259 [label="Exit block [3]" style="filled" fillcolor=gray]; + 245 [label="Stub [3]" style="filled" fillcolor=gray]; + 246 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 260 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; + 247 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; } subgraph cluster_68 { color=blue - 261 [label="Enter function [3]" style="filled" fillcolor=red]; - 262 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 263 [label="Exit function [3]" style="filled" fillcolor=red]; + 248 [label="Enter function [3]" style="filled" fillcolor=red]; + 249 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 250 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_69 { color=blue - 264 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; - 265 [label="Part of class initialization [2]"]; + 251 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; subgraph cluster_70 { color=blue - 266 [label="Enter property [3]" style="filled" fillcolor=red]; - 267 [label="Access variable R|/modifierList| [3]"]; - 268 [label="Exit property [3]" style="filled" fillcolor=red]; + 252 [label="Enter property [3]" style="filled" fillcolor=red]; + 253 [label="Access variable R|/modifierList| [3]"]; + 254 [label="Exit property [3]" style="filled" fillcolor=red]; } - 269 [label="Part of class initialization [2]"]; subgraph cluster_71 { color=blue - 270 [label="Enter property [3]" style="filled" fillcolor=red]; - 271 [label="Access variable R|/tree| [3]"]; - 272 [label="Exit property [3]" style="filled" fillcolor=red]; + 255 [label="Enter property [3]" style="filled" fillcolor=red]; + 256 [label="Access variable R|/tree| [3]"]; + 257 [label="Exit property [3]" style="filled" fillcolor=red]; } - 273 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; + 258 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; } subgraph cluster_72 { color=blue - 274 [label="Enter function [3]" style="filled" fillcolor=red]; - 275 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 276 [label="Exit function [3]" style="filled" fillcolor=red]; + 259 [label="Enter function [3]" style="filled" fillcolor=red]; + 260 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 261 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_73 { color=blue - 277 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; - 278 [label="Part of class initialization [2]"]; + 262 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; subgraph cluster_74 { color=blue - 279 [label="Enter property [3]" style="filled" fillcolor=red]; - 280 [label="Access variable R|/modifierList| [3]"]; - 281 [label="Exit property [3]" style="filled" fillcolor=red]; + 263 [label="Enter property [3]" style="filled" fillcolor=red]; + 264 [label="Access variable R|/modifierList| [3]"]; + 265 [label="Exit property [3]" style="filled" fillcolor=red]; } - 282 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; + 266 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; } subgraph cluster_75 { color=blue - 283 [label="Enter function [3]" style="filled" fillcolor=red]; - 284 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 285 [label="Exit function [3]" style="filled" fillcolor=red]; + 267 [label="Enter function [3]" style="filled" fillcolor=red]; + 268 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 269 [label="Exit function [3]" style="filled" fillcolor=red]; } subgraph cluster_76 { color=blue - 286 [label="Enter function [2]" style="filled" fillcolor=red]; - 287 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 288 [label="Exit function [2]" style="filled" fillcolor=red]; + 270 [label="Enter function [2]" style="filled" fillcolor=red]; + 271 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 272 [label="Exit function [2]" style="filled" fillcolor=red]; } - 140 -> {141} [color=green]; - 141 -> {142} [color=green]; - 141 -> {145} [style=dotted]; - 141 -> {142} [style=dashed]; + 128 -> {129} [color=green]; + 128 -> {132} [style=dotted]; + 128 -> {129} [style=dashed]; + 129 -> {130}; + 130 -> {131}; + 131 -> {132} [color=green]; + 132 -> {133 251 262 270} [color=green]; + 132 -> {133 251 262 270} [style=dashed]; + 133 -> {134} [color=green]; + 134 -> {135 168 248} [color=green]; + 134 -> {135 168 248} [style=dashed]; + 135 -> {136}; + 136 -> {137}; + 137 -> {138}; + 138 -> {139}; + 139 -> {140}; + 140 -> {141}; + 141 -> {142}; 142 -> {143}; 143 -> {144}; - 144 -> {145} [color=green]; - 145 -> {146 264 277 286} [color=green]; - 145 -> {146 264 277 286} [style=dashed]; - 146 -> {147} [color=green]; - 147 -> {148 181 261} [color=green]; - 147 -> {148 181 261} [style=dashed]; + 144 -> {145}; + 145 -> {146}; + 146 -> {147}; + 147 -> {148}; 148 -> {149}; 149 -> {150}; - 150 -> {151}; + 150 -> {151 158}; 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; 155 -> {156}; 156 -> {157}; - 157 -> {158}; + 157 -> {163}; 158 -> {159}; 159 -> {160}; 160 -> {161}; 161 -> {162}; 162 -> {163}; - 163 -> {164 171}; - 164 -> {165}; - 165 -> {166}; - 166 -> {167}; - 167 -> {168}; + 163 -> {164}; + 164 -> {167}; + 164 -> {165} [style=dotted]; + 165 -> {166} [style=dotted]; + 166 -> {167} [style=dotted]; 168 -> {169}; 169 -> {170}; - 170 -> {176}; + 170 -> {171}; 171 -> {172}; 172 -> {173}; 173 -> {174}; 174 -> {175}; 175 -> {176}; - 176 -> {177}; - 177 -> {180}; - 177 -> {178} [style=dotted]; - 178 -> {179} [style=dotted]; - 179 -> {180} [style=dotted]; + 176 -> {177 238}; + 177 -> {178}; + 178 -> {179}; + 179 -> {180}; + 180 -> {181 217}; 181 -> {182}; 182 -> {183}; 183 -> {184}; @@ -779,11 +753,12 @@ digraph kt44814_kt { 186 -> {187}; 187 -> {188}; 188 -> {189}; - 189 -> {190 251}; - 190 -> {191}; + 189 -> {190}; + 190 -> {191 202 203}; + 190 -> {191} [style=dashed]; 191 -> {192}; 192 -> {193}; - 193 -> {194 230}; + 193 -> {194 196}; 194 -> {195}; 195 -> {196}; 196 -> {197}; @@ -793,13 +768,14 @@ digraph kt44814_kt { 200 -> {201}; 201 -> {202}; 202 -> {203}; - 203 -> {204 215 216}; - 203 -> {204} [style=dashed]; - 204 -> {205}; + 202 -> {190} [color=green style=dashed]; + 203 -> {204}; + 204 -> {205 209}; 205 -> {206}; - 206 -> {207 209}; - 207 -> {208}; - 208 -> {209}; + 206 -> {207}; + 207 -> {247}; + 207 -> {208} [style=dotted]; + 208 -> {210} [style=dotted]; 209 -> {210}; 210 -> {211}; 211 -> {212}; @@ -807,110 +783,90 @@ digraph kt44814_kt { 213 -> {214}; 214 -> {215}; 215 -> {216}; - 215 -> {203} [color=green style=dashed]; - 216 -> {217}; - 217 -> {218 222}; + 216 -> {243}; + 217 -> {218}; 218 -> {219}; 219 -> {220}; - 220 -> {260}; - 220 -> {221} [style=dotted]; - 221 -> {223} [style=dotted]; - 222 -> {223}; + 220 -> {221 233}; + 221 -> {222}; + 222 -> {223 233}; 223 -> {224}; - 224 -> {225}; + 224 -> {225 232}; + 224 -> {231} [style=dotted]; + 224 -> {225} [style=dashed]; 225 -> {226}; 226 -> {227}; 227 -> {228}; 228 -> {229}; - 229 -> {256}; + 229 -> {230}; 230 -> {231}; - 231 -> {232}; - 232 -> {233}; - 233 -> {234 246}; - 234 -> {235}; - 235 -> {236 246}; - 236 -> {237}; - 237 -> {238 245}; - 237 -> {244} [style=dotted]; - 237 -> {238} [style=dashed]; + 231 -> {232} [color=green]; + 231 -> {237} [color=red]; + 232 -> {234}; + 233 -> {234}; + 234 -> {235 237}; + 235 -> {236}; + 236 -> {243}; + 237 -> {243} [color=red]; 238 -> {239}; 239 -> {240}; 240 -> {241}; 241 -> {242}; 242 -> {243}; 243 -> {244}; - 244 -> {245} [color=green]; - 244 -> {250} [color=red]; - 245 -> {247}; - 246 -> {247}; - 247 -> {248 250}; + 244 -> {247}; + 244 -> {245} [style=dotted]; + 245 -> {246} [style=dotted]; + 246 -> {247} [style=dotted]; 248 -> {249}; - 249 -> {256}; - 250 -> {256} [color=red]; - 251 -> {252}; + 249 -> {250}; + 251 -> {252} [color=green]; + 251 -> {258} [style=dotted]; + 251 -> {252 255} [style=dashed]; 252 -> {253}; 253 -> {254}; - 254 -> {255}; + 254 -> {255} [color=green]; 255 -> {256}; 256 -> {257}; - 257 -> {260}; - 257 -> {258} [style=dotted]; - 258 -> {259} [style=dotted]; - 259 -> {260} [style=dotted]; - 261 -> {262}; - 262 -> {263}; - 264 -> {265} [color=green]; + 257 -> {258} [color=green]; + 258 -> {259} [color=green]; + 258 -> {259} [style=dashed]; + 259 -> {260}; + 260 -> {261}; + 262 -> {263} [color=green]; + 262 -> {266} [style=dotted]; + 262 -> {263} [style=dashed]; + 263 -> {264}; + 264 -> {265}; 265 -> {266} [color=green]; - 265 -> {269} [style=dotted]; - 265 -> {266} [style=dashed]; - 266 -> {267}; + 266 -> {267} [color=green]; + 266 -> {267} [style=dashed]; 267 -> {268}; - 268 -> {269} [color=green]; - 269 -> {270} [color=green]; - 269 -> {273} [style=dotted]; - 269 -> {270} [style=dashed]; + 268 -> {269}; 270 -> {271}; 271 -> {272}; - 272 -> {273} [color=green]; - 273 -> {274} [color=green]; - 273 -> {274} [style=dashed]; - 274 -> {275}; - 275 -> {276}; - 277 -> {278} [color=green]; - 278 -> {279} [color=green]; - 278 -> {282} [style=dotted]; - 278 -> {279} [style=dashed]; - 279 -> {280}; - 280 -> {281}; - 281 -> {282} [color=green]; - 282 -> {283} [color=green]; - 282 -> {283} [style=dashed]; - 283 -> {284}; - 284 -> {285}; - 286 -> {287}; - 287 -> {288}; subgraph cluster_77 { color=red - 289 [label="Enter function box [1]" style="filled" fillcolor=red]; + 273 [label="Enter function box [1]" style="filled" fillcolor=red]; subgraph cluster_78 { color=blue - 290 [label="Enter block [1]"]; - 291 [label="Access qualifier /FirModifierList [2]"]; - 292 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]" style="filled" fillcolor=yellow]; - 293 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; - 294 [label="Stub [1]" style="filled" fillcolor=gray]; - 295 [label="Exit block [1]" style="filled" fillcolor=gray]; + 274 [label="Enter block [1]"]; + 275 [label="Access qualifier /FirModifierList [2]"]; + 276 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]" style="filled" fillcolor=yellow]; + 277 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; + 278 [label="Stub [1]" style="filled" fillcolor=gray]; + 279 [label="Exit block [1]" style="filled" fillcolor=gray]; } - 296 [label="Exit function box [1]" style="filled" fillcolor=red]; + 280 [label="Exit function box [1]" style="filled" fillcolor=red]; } - 289 -> {290}; - 290 -> {291}; - 291 -> {292}; - 292 -> {293}; - 293 -> {296}; - 293 -> {294} [style=dotted]; - 294 -> {295} [style=dotted]; - 295 -> {296} [style=dotted]; + 273 -> {274}; + 274 -> {275}; + 275 -> {276}; + 276 -> {277}; + 277 -> {280}; + 277 -> {278} [style=dotted]; + 278 -> {279} [style=dotted]; + 279 -> {280} [style=dotted]; }