From f794ced8881df28ba1d1a9d462b43f26c93362fa Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 12 Oct 2020 11:09:52 +0300 Subject: [PATCH] [FIR] Fix incorrect cluster creating in CFG dumps --- .../testData/resolve/cfg/initBlock.dot | 162 +- .../resolve/cfg/initBlockAndInPlaceLambda.dot | 128 +- .../cfg/postponedLambdaInConstructor.dot | 172 +- .../resolve/cfg/propertiesAndInitBlocks.dot | 306 +- .../problems/secondaryConstructorCfg.dot | 246 +- .../boundSmartcasts/boundSmartcasts.dot | 380 ++- .../boundSmartcastsInBranches.dot | 1526 +++++----- .../boundSmartcasts/functionCallBound.dot | 248 +- .../smartcasts/lambdas/lambdaInWhenBranch.dot | 410 ++- .../resolve/smartcasts/nullability.dot | 2576 ++++++++--------- .../smartcasts/safeCalls/assignSafeCall.dot | 744 +++-- .../resolve/smartcasts/smartCastInInit.dot | 96 +- .../resolve/smartcasts/smartcastToNothing.dot | 372 ++- .../smartcasts/stability/overridenOpenVal.dot | 264 +- .../bad/callsInPlace/inAnonymousObject.dot | 184 +- .../bad/callsInPlace/inLocalClass.dot | 200 +- .../delegates/delegateWithAnonymousObject.dot | 300 +- .../inference/plusAssignWithLambdaInRhs.dot | 180 +- .../kotlin/fir/resolve/dfa/cfg/CFGNode.kt | 2 +- 19 files changed, 4222 insertions(+), 4274 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot index 445e69cf5b6..4bf2b71657b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot @@ -6,94 +6,90 @@ digraph initBlock_kt { subgraph cluster_0 { color=red 0 [label="Enter class Foo" style="filled" fillcolor=red]; - subgraph cluster_1 { - color=blue - 1 [label="Part of class initialization"]; - 2 [label="Exit class Foo" style="filled" fillcolor=red]; - } - 0 -> {1} [color=green]; - 1 -> {2} [style=dotted]; - 1 -> {6} [color=green]; - 1 -> {6} [style=dashed]; + 1 [label="Part of class initialization"]; + 2 [label="Exit class Foo" style="filled" fillcolor=red]; + } + 0 -> {1} [color=green]; + 1 -> {2} [style=dotted]; + 1 -> {6} [color=green]; + 1 -> {6} [style=dashed]; - subgraph cluster_2 { - color=red - 3 [label="Enter function " style="filled" fillcolor=red]; - 4 [label="Delegated constructor call: super()"]; - 5 [label="Exit function " style="filled" fillcolor=red]; - } - 3 -> {4}; - 4 -> {5}; + subgraph cluster_1 { + color=red + 3 [label="Enter function " style="filled" fillcolor=red]; + 4 [label="Delegated constructor call: super()"]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + 3 -> {4}; + 4 -> {5}; + subgraph cluster_2 { + color=red + 6 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_3 { - color=red - 6 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 7 [label="Enter block"]; - 8 [label="Const: Int(1)"]; - 9 [label="Variable declaration: lval x: R|kotlin/Int|"]; - 10 [label="Exit block"]; - } - 11 [label="Exit init block" style="filled" fillcolor=red]; + color=blue + 7 [label="Enter block"]; + 8 [label="Const: Int(1)"]; + 9 [label="Variable declaration: lval x: R|kotlin/Int|"]; + 10 [label="Exit block"]; } - 6 -> {7}; - 7 -> {8}; - 8 -> {9}; - 9 -> {10}; - 10 -> {11}; - 11 -> {2} [color=green]; + 11 [label="Exit init block" style="filled" fillcolor=red]; + } + 6 -> {7}; + 7 -> {8}; + 8 -> {9}; + 9 -> {10}; + 10 -> {11}; + 11 -> {2} [color=green]; - subgraph cluster_5 { - color=red - 12 [label="Enter class Bar" style="filled" fillcolor=red]; - subgraph cluster_6 { - color=blue - 13 [label="Part of class initialization"]; - 14 [label="Exit class Bar" style="filled" fillcolor=red]; - } - 12 -> {13} [color=green]; - 13 -> {14} [style=dotted]; - 13 -> {18} [color=green]; - 13 -> {18} [style=dashed]; + subgraph cluster_4 { + color=red + 12 [label="Enter class Bar" style="filled" fillcolor=red]; + 13 [label="Part of class initialization"]; + 14 [label="Exit class Bar" style="filled" fillcolor=red]; + } + 12 -> {13} [color=green]; + 13 -> {14} [style=dotted]; + 13 -> {18} [color=green]; + 13 -> {18} [style=dashed]; - subgraph cluster_7 { - color=red - 15 [label="Enter function " style="filled" fillcolor=red]; - 16 [label="Delegated constructor call: super()"]; - 17 [label="Exit function " style="filled" fillcolor=red]; - } - 15 -> {16}; - 16 -> {17}; - - subgraph cluster_8 { - color=red - 18 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 19 [label="Enter block"]; - 20 [label="Const: Int(1)"]; - 21 [label="Variable declaration: lval x: R|kotlin/Int|"]; - 22 [label="Function call: R|java/lang/Exception.Exception|()"]; - 23 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 24 [label="Stub" style="filled" fillcolor=gray]; - 25 [label="Const: Int(2)" style="filled" fillcolor=gray]; - 26 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray]; - 27 [label="Exit block" style="filled" fillcolor=gray]; - } - 28 [label="Exit init block" style="filled" fillcolor=red]; - } - 18 -> {19}; - 19 -> {20}; - 20 -> {21}; - 21 -> {22}; - 22 -> {23}; - 23 -> {28}; - 23 -> {24} [style=dotted]; - 24 -> {25} [style=dotted]; - 25 -> {26} [style=dotted]; - 26 -> {27} [style=dotted]; - 27 -> {28} [style=dotted]; - 28 -> {14} [color=green]; + subgraph cluster_5 { + color=red + 15 [label="Enter function " style="filled" fillcolor=red]; + 16 [label="Delegated constructor call: super()"]; + 17 [label="Exit function " style="filled" fillcolor=red]; + } + 15 -> {16}; + 16 -> {17}; + subgraph cluster_6 { + color=red + 18 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_7 { + color=blue + 19 [label="Enter block"]; + 20 [label="Const: Int(1)"]; + 21 [label="Variable declaration: lval x: R|kotlin/Int|"]; + 22 [label="Function call: R|java/lang/Exception.Exception|()"]; + 23 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 24 [label="Stub" style="filled" fillcolor=gray]; + 25 [label="Const: Int(2)" style="filled" fillcolor=gray]; + 26 [label="Variable declaration: lval y: R|kotlin/Int|" style="filled" fillcolor=gray]; + 27 [label="Exit block" style="filled" fillcolor=gray]; } + 28 [label="Exit init block" style="filled" fillcolor=red]; + } + 18 -> {19}; + 19 -> {20}; + 20 -> {21}; + 21 -> {22}; + 22 -> {23}; + 23 -> {28}; + 23 -> {24} [style=dotted]; + 24 -> {25} [style=dotted]; + 25 -> {26} [style=dotted]; + 26 -> {27} [style=dotted]; + 27 -> {28} [style=dotted]; + 28 -> {14} [color=green]; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 3a6c27361a7..659c9bc208f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -27,79 +27,77 @@ digraph initBlockAndInPlaceLambda_kt { subgraph cluster_3 { color=red 6 [label="Enter class C" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 7 [label="Part of class initialization"]; - 8 [label="Exit class C" style="filled" fillcolor=red]; - } - 6 -> {7} [color=green]; - 7 -> {8} [style=dotted]; - 7 -> {12} [color=green]; - 7 -> {12} [style=dashed]; + 7 [label="Part of class initialization"]; + 8 [label="Exit class C" style="filled" fillcolor=red]; + } + 6 -> {7} [color=green]; + 7 -> {8} [style=dotted]; + 7 -> {12} [color=green]; + 7 -> {12} [style=dashed]; - subgraph cluster_5 { - color=red - 9 [label="Enter function " style="filled" fillcolor=red]; - 10 [label="Delegated constructor call: super()"]; - 11 [label="Exit function " style="filled" fillcolor=red]; - } - 9 -> {10}; - 10 -> {11}; + subgraph cluster_4 { + color=red + 9 [label="Enter function " style="filled" fillcolor=red]; + 10 [label="Delegated constructor call: super()"]; + 11 [label="Exit function " style="filled" fillcolor=red]; + } + 9 -> {10}; + 10 -> {11}; + subgraph cluster_5 { + color=red + 12 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_6 { - color=red - 12 [label="Enter init block" style="filled" fillcolor=red]; + color=blue + 13 [label="Enter block"]; + 14 [label="Access variable R|/a|"]; + 15 [label="Access variable R|/A.b|"]; + 16 [label="Enter safe call"]; + 17 [label="Postponed enter to lambda"]; subgraph cluster_7 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/a|"]; - 15 [label="Access variable R|/A.b|"]; - 16 [label="Enter safe call"]; - 17 [label="Postponed enter to lambda"]; + 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/a|"]; - 28 [label="Access variable R|/it|"]; - 29 [label="Function call: R|/C.C|(...)"]; - 30 [label="Exit block"]; - } - 31 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 26 [label="Enter block"]; + 27 [label="Access variable R|/a|"]; + 28 [label="Access variable R|/it|"]; + 29 [label="Function call: R|/C.C|(...)"]; + 30 [label="Exit block"]; } - 18 [label="Call arguments union" style="filled" fillcolor=yellow]; - 19 [label="Postponed exit from lambda"]; - 20 [label="Function call: $subj$.R|kotlin/let|(...)"]; - 21 [label="Exit safe call"]; - 22 [label="Variable declaration: lval c: R|C?|"]; - 23 [label="Exit block"]; + 31 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 24 [label="Exit init block" style="filled" fillcolor=red]; + 18 [label="Call arguments union" style="filled" fillcolor=yellow]; + 19 [label="Postponed exit from lambda"]; + 20 [label="Function call: $subj$.R|kotlin/let|(...)"]; + 21 [label="Exit safe call"]; + 22 [label="Variable declaration: lval c: R|C?|"]; + 23 [label="Exit block"]; } - 12 -> {13}; - 13 -> {14}; - 14 -> {15}; - 15 -> {16 21}; - 16 -> {17}; - 17 -> {25}; - 17 -> {19} [color=red]; - 17 -> {25} [style=dashed]; - 18 -> {20} [color=red]; - 19 -> {20} [color=green]; - 20 -> {21}; - 21 -> {22}; - 22 -> {23}; - 23 -> {24}; - 24 -> {8} [color=green]; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {18} [color=red]; - 31 -> {19} [color=green]; - + 24 [label="Exit init block" style="filled" fillcolor=red]; } + 12 -> {13}; + 13 -> {14}; + 14 -> {15}; + 15 -> {16 21}; + 16 -> {17}; + 17 -> {25}; + 17 -> {19} [color=red]; + 17 -> {25} [style=dashed]; + 18 -> {20} [color=red]; + 19 -> {20} [color=green]; + 20 -> {21}; + 21 -> {22}; + 22 -> {23}; + 23 -> {24}; + 24 -> {8} [color=green]; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {18} [color=red]; + 31 -> {19} [color=green]; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot index 0d300287df3..3f311763aa0 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot @@ -22,103 +22,101 @@ digraph postponedLambdaInConstructor_kt { subgraph cluster_2 { color=red 5 [label="Enter class B" style="filled" fillcolor=red]; - subgraph cluster_3 { - color=blue - 6 [label="Part of class initialization"]; - 7 [label="Exit class B" style="filled" fillcolor=red]; - } - 5 -> {6} [color=green]; - 6 -> {7} [style=dotted]; - 6 -> {29} [color=green]; - 6 -> {29} [style=dashed]; + 6 [label="Part of class initialization"]; + 7 [label="Exit class B" style="filled" fillcolor=red]; + } + 5 -> {6} [color=green]; + 6 -> {7} [style=dotted]; + 6 -> {29} [color=green]; + 6 -> {29} [style=dashed]; + subgraph cluster_3 { + color=red + 8 [label="Enter function " style="filled" fillcolor=red]; + 9 [label="Access variable R|/s|"]; + 10 [label="Postponed enter to lambda"]; subgraph cluster_4 { - color=red - 8 [label="Enter function " style="filled" fillcolor=red]; - 9 [label="Access variable R|/s|"]; - 10 [label="Postponed enter to lambda"]; + color=blue + 16 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue - 16 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 17 [label="Enter block"]; + 18 [label="Postponed enter to lambda"]; subgraph cluster_6 { color=blue - 17 [label="Enter block"]; - 18 [label="Postponed enter to lambda"]; + 22 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 22 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_8 { - color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/it|"]; - 25 [label="Exit block"]; - } - 26 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 23 [label="Enter block"]; + 24 [label="Access variable R|/it|"]; + 25 [label="Exit block"]; } - 19 [label="Postponed exit from lambda"]; - 20 [label="Exit block"]; + 26 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 21 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 19 [label="Postponed exit from lambda"]; + 20 [label="Exit block"]; } - 11 [label="Postponed exit from lambda"]; - 12 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)"]; - 13 [label="Call arguments union" style="filled" fillcolor=yellow]; - 14 [label="Delegated constructor call: super(...)"]; - 15 [label="Exit function " style="filled" fillcolor=red]; + 21 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 8 -> {9}; - 9 -> {10}; - 10 -> {16}; - 10 -> {11} [color=red]; - 10 -> {16} [style=dashed]; - 11 -> {12}; - 12 -> {13}; - 13 -> {14}; - 14 -> {15}; - 16 -> {17}; - 17 -> {18}; - 18 -> {19 22}; - 18 -> {22} [style=dashed]; - 19 -> {20}; - 20 -> {21}; - 21 -> {13} [color=red]; - 21 -> {11} [color=green]; - 22 -> {23}; - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - - subgraph cluster_9 { - color=red - 27 [label="Enter function getter" style="filled" fillcolor=red]; - 28 [label="Exit function getter" style="filled" fillcolor=red]; - } - 27 -> {28}; - - subgraph cluster_10 { - color=red - 29 [label="Enter property" style="filled" fillcolor=red]; - 30 [label="Access variable R|/s|"]; - 31 [label="Exit property" style="filled" fillcolor=red]; - } - 29 -> {30}; - 30 -> {31}; - 31 -> {7} [color=green]; - - subgraph cluster_11 { - color=red - 32 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_12 { - color=blue - 33 [label="Enter block"]; - 34 [label="Function call: this@R|/B|.R|/B.foo|()"]; - 35 [label="Exit block"]; - } - 36 [label="Exit function foo" style="filled" fillcolor=red]; - } - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; - 35 -> {36}; - + 11 [label="Postponed exit from lambda"]; + 12 [label="Function call: R|/s|.R|kotlin/let| kotlin/String|>(...)"]; + 13 [label="Call arguments union" style="filled" fillcolor=yellow]; + 14 [label="Delegated constructor call: super(...)"]; + 15 [label="Exit function " style="filled" fillcolor=red]; } + 8 -> {9}; + 9 -> {10}; + 10 -> {16}; + 10 -> {11} [color=red]; + 10 -> {16} [style=dashed]; + 11 -> {12}; + 12 -> {13}; + 13 -> {14}; + 14 -> {15}; + 16 -> {17}; + 17 -> {18}; + 18 -> {19 22}; + 18 -> {22} [style=dashed]; + 19 -> {20}; + 20 -> {21}; + 21 -> {13} [color=red]; + 21 -> {11} [color=green]; + 22 -> {23}; + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + + subgraph cluster_8 { + color=red + 27 [label="Enter function getter" style="filled" fillcolor=red]; + 28 [label="Exit function getter" style="filled" fillcolor=red]; + } + 27 -> {28}; + + subgraph cluster_9 { + color=red + 29 [label="Enter property" style="filled" fillcolor=red]; + 30 [label="Access variable R|/s|"]; + 31 [label="Exit property" style="filled" fillcolor=red]; + } + 29 -> {30}; + 30 -> {31}; + 31 -> {7} [color=green]; + + subgraph cluster_10 { + color=red + 32 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_11 { + color=blue + 33 [label="Enter block"]; + 34 [label="Function call: this@R|/B|.R|/B.foo|()"]; + 35 [label="Exit block"]; + } + 36 [label="Exit function foo" style="filled" fillcolor=red]; + } + 32 -> {33}; + 33 -> {34}; + 34 -> {35}; + 35 -> {36}; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot index 9ec07b90617..0a055a69561 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -159,175 +159,171 @@ digraph propertiesAndInitBlocks_kt { subgraph cluster_16 { color=blue 64 [label="Enter class GetterLocalClass" style="filled" fillcolor=red]; - subgraph cluster_17 { - color=blue - 65 [label="Part of class initialization"]; - 66 [label="Exit class GetterLocalClass" style="filled" fillcolor=red]; - } - 59 -> {60}; - 60 -> {61}; - 60 -> {67 70} [color=red]; - 61 -> {62}; - 61 -> {67 64} [color=green]; - 61 -> {67 64} [style=dashed]; - 62 -> {63}; - 64 -> {65} [color=green]; - 65 -> {66} [style=dotted]; - 65 -> {70} [color=green]; - 65 -> {70} [style=dashed]; + 65 [label="Part of class initialization"]; + 66 [label="Exit class GetterLocalClass" style="filled" fillcolor=red]; + } + 59 -> {60}; + 60 -> {61}; + 60 -> {67 70} [color=red]; + 61 -> {62}; + 61 -> {67 64} [color=green]; + 61 -> {67 64} [style=dashed]; + 62 -> {63}; + 64 -> {65} [color=green]; + 65 -> {66} [style=dotted]; + 65 -> {70} [color=green]; + 65 -> {70} [style=dashed]; - subgraph cluster_18 { - color=red - 67 [label="Enter function " style="filled" fillcolor=red]; - 68 [label="Delegated constructor call: super()"]; - 69 [label="Exit function " style="filled" fillcolor=red]; - } - 67 -> {68}; - 68 -> {69}; + subgraph cluster_17 { + color=red + 67 [label="Enter function " style="filled" fillcolor=red]; + 68 [label="Delegated constructor call: super()"]; + 69 [label="Exit function " style="filled" fillcolor=red]; + } + 67 -> {68}; + 68 -> {69}; + subgraph cluster_18 { + color=red + 70 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_19 { - color=red - 70 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_20 { - color=blue - 71 [label="Enter block"]; - 72 [label="Function call: R|java/lang/Exception.Exception|()"]; - 73 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 74 [label="Stub" style="filled" fillcolor=gray]; - 75 [label="Exit block" style="filled" fillcolor=gray]; - } - 76 [label="Exit init block" style="filled" fillcolor=red]; + color=blue + 71 [label="Enter block"]; + 72 [label="Function call: R|java/lang/Exception.Exception|()"]; + 73 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 74 [label="Stub" style="filled" fillcolor=gray]; + 75 [label="Exit block" style="filled" fillcolor=gray]; } - 70 -> {71}; - 71 -> {72}; - 72 -> {73}; - 73 -> {76}; - 73 -> {74} [style=dotted]; - 74 -> {75} [style=dotted]; - 75 -> {76} [style=dotted]; - 76 -> {66} [color=green]; + 76 [label="Exit init block" style="filled" fillcolor=red]; + } + 70 -> {71}; + 71 -> {72}; + 72 -> {73}; + 73 -> {76}; + 73 -> {74} [style=dotted]; + 74 -> {75} [style=dotted]; + 75 -> {76} [style=dotted]; + 76 -> {66} [color=green]; + subgraph cluster_20 { + color=red + 77 [label="Enter property" style="filled" fillcolor=red]; + 78 [label="Postponed enter to lambda"]; subgraph cluster_21 { - color=red - 77 [label="Enter property" style="filled" fillcolor=red]; - 78 [label="Postponed enter to lambda"]; + color=blue + 26 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_22 { color=blue - 26 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_23 { - color=blue - 27 [label="Enter block"]; - 28 [label="Exit local class "]; - 29 [label="Function call: R|java/lang/Exception.Exception|()"]; - 30 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 31 [label="Stub" style="filled" fillcolor=gray]; - 32 [label="Exit block" style="filled" fillcolor=gray]; - } - subgraph cluster_24 { - color=blue - 34 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; - subgraph cluster_25 { - color=blue - 35 [label="Part of class initialization"]; - 36 [label="Exit class InitializerLocalClass" style="filled" fillcolor=red]; - } - 33 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; - } - 79 [label="Postponed exit from lambda"]; - 80 [label="Function call: R|/run|(...)"]; - 81 [label="Exit property" style="filled" fillcolor=red]; + 27 [label="Enter block"]; + 28 [label="Exit local class "]; + 29 [label="Function call: R|java/lang/Exception.Exception|()"]; + 30 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 31 [label="Stub" style="filled" fillcolor=gray]; + 32 [label="Exit block" style="filled" fillcolor=gray]; } - 77 -> {78}; - 78 -> {26}; - 78 -> {79} [color=red]; - 78 -> {26} [style=dashed]; - 79 -> {80}; - 80 -> {81}; - 26 -> {33 27}; - 27 -> {28}; - 27 -> {37 48 51} [color=red]; - 28 -> {29}; - 28 -> {48 34} [color=green]; - 28 -> {48 34} [style=dashed]; - 29 -> {30}; - 30 -> {33}; - 30 -> {31} [style=dotted]; - 31 -> {32} [style=dotted]; - 32 -> {33} [style=dotted]; - 33 -> {79} [color=green]; - 33 -> {26} [color=green style=dashed]; - 34 -> {35} [color=green]; - 35 -> {36} [style=dotted]; - 35 -> {51} [color=green]; - 35 -> {51} [style=dashed]; - - subgraph cluster_26 { - color=red - 82 [label="Enter function getter" style="filled" fillcolor=red]; - 83 [label="Exit function getter" style="filled" fillcolor=red]; + subgraph cluster_23 { + color=blue + 34 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; + 35 [label="Part of class initialization"]; + 36 [label="Exit class InitializerLocalClass" style="filled" fillcolor=red]; } - 82 -> {83}; + 33 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 79 [label="Postponed exit from lambda"]; + 80 [label="Function call: R|/run|(...)"]; + 81 [label="Exit property" style="filled" fillcolor=red]; + } + 77 -> {78}; + 78 -> {26}; + 78 -> {79} [color=red]; + 78 -> {26} [style=dashed]; + 79 -> {80}; + 80 -> {81}; + 26 -> {33 27}; + 27 -> {28}; + 27 -> {37 48 51} [color=red]; + 28 -> {29}; + 28 -> {48 34} [color=green]; + 28 -> {48 34} [style=dashed]; + 29 -> {30}; + 30 -> {33}; + 30 -> {31} [style=dotted]; + 31 -> {32} [style=dotted]; + 32 -> {33} [style=dotted]; + 33 -> {79} [color=green]; + 33 -> {26} [color=green style=dashed]; + 34 -> {35} [color=green]; + 35 -> {36} [style=dotted]; + 35 -> {51} [color=green]; + 35 -> {51} [style=dashed]; + subgraph cluster_24 { + color=red + 82 [label="Enter function getter" style="filled" fillcolor=red]; + 83 [label="Exit function getter" style="filled" fillcolor=red]; + } + 82 -> {83}; + + subgraph cluster_25 { + color=red + 84 [label="Enter property" style="filled" fillcolor=red]; + subgraph cluster_26 { + color=blue + 85 [label="Try expression enter"]; subgraph cluster_27 { - color=red - 84 [label="Enter property" style="filled" fillcolor=red]; + color=blue + 86 [label="Try main block enter"]; subgraph cluster_28 { color=blue - 85 [label="Try expression enter"]; - subgraph cluster_29 { - color=blue - 86 [label="Try main block enter"]; - subgraph cluster_30 { - color=blue - 87 [label="Enter block"]; - 88 [label="Const: Int(1)"]; - 89 [label="Exit block"]; - } - 90 [label="Try main block exit"]; - } - subgraph cluster_31 { - color=blue - 91 [label="Enter finally"]; - subgraph cluster_32 { - color=blue - 92 [label="Enter block"]; - 93 [label="Const: Int(0)"]; - 94 [label="Exit block"]; - } - 95 [label="Exit finally"]; - } - subgraph cluster_33 { - color=blue - 96 [label="Catch enter"]; - subgraph cluster_34 { - color=blue - 97 [label="Enter block"]; - 98 [label="Const: Int(2)"]; - 99 [label="Exit block"]; - } - 100 [label="Catch exit"]; - } - 101 [label="Try expression exit"]; + 87 [label="Enter block"]; + 88 [label="Const: Int(1)"]; + 89 [label="Exit block"]; } - 102 [label="Exit property" style="filled" fillcolor=red]; + 90 [label="Try main block exit"]; } - 84 -> {85}; - 85 -> {86}; - 86 -> {102 96 91 87}; - 87 -> {88}; - 88 -> {89}; - 89 -> {90}; - 90 -> {101}; - 91 -> {92}; - 92 -> {93}; - 93 -> {94}; - 94 -> {95}; - 95 -> {101}; - 96 -> {102 97}; - 97 -> {98}; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; - 101 -> {102}; - + subgraph cluster_29 { + color=blue + 91 [label="Enter finally"]; + subgraph cluster_30 { + color=blue + 92 [label="Enter block"]; + 93 [label="Const: Int(0)"]; + 94 [label="Exit block"]; + } + 95 [label="Exit finally"]; + } + subgraph cluster_31 { + color=blue + 96 [label="Catch enter"]; + subgraph cluster_32 { + color=blue + 97 [label="Enter block"]; + 98 [label="Const: Int(2)"]; + 99 [label="Exit block"]; + } + 100 [label="Catch exit"]; + } + 101 [label="Try expression exit"]; } + 102 [label="Exit property" style="filled" fillcolor=red]; + } + 84 -> {85}; + 85 -> {86}; + 86 -> {102 96 91 87}; + 87 -> {88}; + 88 -> {89}; + 89 -> {90}; + 90 -> {101}; + 91 -> {92}; + 92 -> {93}; + 93 -> {94}; + 94 -> {95}; + 95 -> {101}; + 96 -> {102 97}; + 97 -> {98}; + 98 -> {99}; + 99 -> {100}; + 100 -> {101}; + 101 -> {102}; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot index af42ccd2b1b..c2b5f69e652 100644 --- a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot +++ b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot @@ -6,132 +6,126 @@ digraph secondaryConstructorCfg_kt { subgraph cluster_0 { color=red 0 [label="Enter class B" style="filled" fillcolor=red]; - subgraph cluster_1 { + 1 [label="Part of class initialization"]; + 2 [label="Part of class initialization"]; + 3 [label="Part of class initialization"]; + 4 [label="Exit class B" style="filled" fillcolor=red]; + } + 0 -> {1} [color=green]; + 1 -> {2} [style=dotted]; + 1 -> {10} [color=green]; + 1 -> {10} [style=dashed]; + 2 -> {3} [style=dotted]; + 2 -> {15} [color=green]; + 2 -> {15} [style=dashed]; + 3 -> {4} [style=dotted]; + 3 -> {31} [color=green]; + 3 -> {31} [style=dashed]; + + subgraph cluster_1 { + color=red + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()"]; + 7 [label="Exit function " style="filled" fillcolor=red]; + } + 5 -> {6}; + 6 -> {7}; + + subgraph cluster_2 { + color=red + 8 [label="Enter function getter" style="filled" fillcolor=red]; + 9 [label="Exit function getter" style="filled" fillcolor=red]; + } + 8 -> {9}; + + subgraph cluster_3 { + color=red + 10 [label="Enter property" style="filled" fillcolor=red]; + 11 [label="Access variable R|/p0|"]; + 12 [label="Exit property" style="filled" fillcolor=red]; + } + 10 -> {11}; + 11 -> {12}; + 12 -> {2} [color=green]; + + subgraph cluster_4 { + color=red + 13 [label="Enter function getter" style="filled" fillcolor=red]; + 14 [label="Exit function getter" style="filled" fillcolor=red]; + } + 13 -> {14}; + + subgraph cluster_5 { + color=red + 15 [label="Enter property" style="filled" fillcolor=red]; + 16 [label="Access variable R|/p0|"]; + 17 [label="Access variable R|kotlin/String.length|"]; + 18 [label="Exit property" style="filled" fillcolor=red]; + } + 15 -> {16}; + 16 -> {17}; + 17 -> {18}; + 18 -> {3} [color=green]; + + subgraph cluster_6 { + color=red + 19 [label="Enter function getter" style="filled" fillcolor=red]; + 20 [label="Exit function getter" style="filled" fillcolor=red]; + } + 19 -> {20}; + + subgraph cluster_7 { + color=red + 21 [label="Enter function setter" style="filled" fillcolor=red]; + 22 [label="Exit function setter" style="filled" fillcolor=red]; + } + 21 -> {22}; + + subgraph cluster_8 { + color=red + 23 [label="Enter function " style="filled" fillcolor=red]; + 24 [label="Access variable R|/p0|"]; + 25 [label="Delegated constructor call: this(...)"]; + subgraph cluster_9 { color=blue - 1 [label="Part of class initialization"]; - subgraph cluster_2 { - color=blue - 2 [label="Part of class initialization"]; - subgraph cluster_3 { - color=blue - 3 [label="Part of class initialization"]; - 4 [label="Exit class B" style="filled" fillcolor=red]; - } - 0 -> {1} [color=green]; - 1 -> {2} [style=dotted]; - 1 -> {10} [color=green]; - 1 -> {10} [style=dashed]; - 2 -> {3} [style=dotted]; - 2 -> {15} [color=green]; - 2 -> {15} [style=dashed]; - 3 -> {4} [style=dotted]; - 3 -> {31} [color=green]; - 3 -> {31} [style=dashed]; + 26 [label="Enter block"]; + 27 [label="Access variable R|/p1|"]; + 28 [label="Assignment: R|/B.p3|"]; + 29 [label="Exit block"]; + } + 30 [label="Exit function " style="filled" fillcolor=red]; + } + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; - subgraph cluster_4 { - color=red - 5 [label="Enter function " style="filled" fillcolor=red]; - 6 [label="Delegated constructor call: super()"]; - 7 [label="Exit function " style="filled" fillcolor=red]; - } - 5 -> {6}; - 6 -> {7}; + subgraph cluster_10 { + color=red + 31 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_11 { + color=blue + 32 [label="Enter block"]; + 33 [label="Access variable R|/p0|"]; + 34 [label="Access variable R|kotlin/String.length|"]; + 35 [label="Assignment: R|/B.p1|"]; + 36 [label="Const: String()"]; + 37 [label="Assignment: R|/B.p3|"]; + 38 [label="Exit block"]; + } + 39 [label="Exit init block" style="filled" fillcolor=red]; + } + 31 -> {32}; + 32 -> {33}; + 33 -> {34}; + 34 -> {35}; + 35 -> {36}; + 36 -> {37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {4} [color=green]; - subgraph cluster_5 { - color=red - 8 [label="Enter function getter" style="filled" fillcolor=red]; - 9 [label="Exit function getter" style="filled" fillcolor=red]; - } - 8 -> {9}; - - subgraph cluster_6 { - color=red - 10 [label="Enter property" style="filled" fillcolor=red]; - 11 [label="Access variable R|/p0|"]; - 12 [label="Exit property" style="filled" fillcolor=red]; - } - 10 -> {11}; - 11 -> {12}; - 12 -> {2} [color=green]; - - subgraph cluster_7 { - color=red - 13 [label="Enter function getter" style="filled" fillcolor=red]; - 14 [label="Exit function getter" style="filled" fillcolor=red]; - } - 13 -> {14}; - - subgraph cluster_8 { - color=red - 15 [label="Enter property" style="filled" fillcolor=red]; - 16 [label="Access variable R|/p0|"]; - 17 [label="Access variable R|kotlin/String.length|"]; - 18 [label="Exit property" style="filled" fillcolor=red]; - } - 15 -> {16}; - 16 -> {17}; - 17 -> {18}; - 18 -> {3} [color=green]; - - subgraph cluster_9 { - color=red - 19 [label="Enter function getter" style="filled" fillcolor=red]; - 20 [label="Exit function getter" style="filled" fillcolor=red]; - } - 19 -> {20}; - - subgraph cluster_10 { - color=red - 21 [label="Enter function setter" style="filled" fillcolor=red]; - 22 [label="Exit function setter" style="filled" fillcolor=red]; - } - 21 -> {22}; - - subgraph cluster_11 { - color=red - 23 [label="Enter function " style="filled" fillcolor=red]; - 24 [label="Access variable R|/p0|"]; - 25 [label="Delegated constructor call: this(...)"]; - subgraph cluster_12 { - color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/p1|"]; - 28 [label="Assignment: R|/B.p3|"]; - 29 [label="Exit block"]; - } - 30 [label="Exit function " style="filled" fillcolor=red]; - } - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - - subgraph cluster_13 { - color=red - 31 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_14 { - color=blue - 32 [label="Enter block"]; - 33 [label="Access variable R|/p0|"]; - 34 [label="Access variable R|kotlin/String.length|"]; - 35 [label="Assignment: R|/B.p1|"]; - 36 [label="Const: String()"]; - 37 [label="Assignment: R|/B.p3|"]; - 38 [label="Exit block"]; - } - 39 [label="Exit init block" style="filled" fillcolor=red]; - } - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; - 35 -> {36}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {4} [color=green]; - - } +} 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 05d0ba4ab59..92a88207997 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot @@ -317,195 +317,193 @@ digraph boundSmartcasts_kt { subgraph cluster_27 { color=red 115 [label="Enter class D" style="filled" fillcolor=red]; - subgraph cluster_28 { - color=blue - 116 [label="Part of class initialization"]; - 117 [label="Exit class D" style="filled" fillcolor=red]; - } - 115 -> {116} [color=green]; - 116 -> {117} [style=dotted]; - 116 -> {123} [color=green]; - 116 -> {123} [style=dashed]; - - subgraph cluster_29 { - color=red - 118 [label="Enter function " style="filled" fillcolor=red]; - 119 [label="Delegated constructor call: super()"]; - 120 [label="Exit function " style="filled" fillcolor=red]; - } - 118 -> {119}; - 119 -> {120}; - - subgraph cluster_30 { - color=red - 121 [label="Enter function getter" style="filled" fillcolor=red]; - 122 [label="Exit function getter" style="filled" fillcolor=red]; - } - 121 -> {122}; - - subgraph cluster_31 { - color=red - 123 [label="Enter property" style="filled" fillcolor=red]; - 124 [label="Access variable R|/any|"]; - 125 [label="Exit property" style="filled" fillcolor=red]; - } - 123 -> {124}; - 124 -> {125}; - 125 -> {117} [color=green]; - - subgraph cluster_32 { - color=red - 126 [label="Enter function baz" style="filled" fillcolor=red]; - subgraph cluster_33 { - color=blue - 127 [label="Enter block"]; - 128 [label="Exit block"]; - } - 129 [label="Exit function baz" style="filled" fillcolor=red]; - } - 126 -> {127}; - 127 -> {128}; - 128 -> {129}; - - subgraph cluster_34 { - color=red - 130 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_35 { - color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/d|"]; - 133 [label="Access variable R|/D.any|"]; - 134 [label="Exit lhs of ?:"]; - 135 [label="Enter rhs of ?:"]; - 136 [label="Jump: ^test_5 Unit"]; - 137 [label="Stub" style="filled" fillcolor=gray]; - 138 [label="Lhs of ?: is not null"]; - 139 [label="Exit ?:"]; - 140 [label="Variable declaration: lval a: R|kotlin/Any|"]; - 141 [label="Access variable R|/a|"]; - 142 [label="Function call: R|/a|.R|/baz|()"]; - 143 [label="Access variable R|/d|"]; - 144 [label="Access variable R|/D.any|"]; - 145 [label="Function call: R|/d|.R|/D.any|.R|/baz|()"]; - 146 [label="Access variable R|/a|"]; - 147 [label="Type operator: (R|/a| as R|A|)"]; - 148 [label="Access variable R|/a|"]; - 149 [label="Function call: R|/a|.R|/A.foo|()"]; - 150 [label="Exit block"]; - } - 151 [label="Exit function test_5" style="filled" fillcolor=red]; - } - 130 -> {131}; - 131 -> {132}; - 132 -> {133}; - 133 -> {134}; - 134 -> {138 135}; - 135 -> {136}; - 136 -> {151}; - 136 -> {137} [style=dotted]; - 137 -> {139} [style=dotted]; - 138 -> {139}; - 139 -> {140}; - 140 -> {141}; - 141 -> {142}; - 142 -> {143}; - 143 -> {144}; - 144 -> {145}; - 145 -> {146}; - 146 -> {147}; - 147 -> {148}; - 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - - subgraph cluster_36 { - color=red - 152 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_37 { - color=blue - 153 [label="Enter block"]; - 154 [label="Access variable R|/d1|"]; - 155 [label="Access variable R|/D.any|"]; - 156 [label="Variable declaration: lval a: R|kotlin/Any?|"]; - 157 [label="Access variable R|/a|"]; - 158 [label="Type operator: (R|/a| as R|A|)"]; - 159 [label="Access variable R|/a|"]; - 160 [label="Function call: R|/a|.R|/A.foo|()"]; - 161 [label="Access variable R|/d1|"]; - 162 [label="Access variable R|/D.any|"]; - 163 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()"]; - 164 [label="Access variable R|/d1|"]; - 165 [label="Access variable R|/D.any|"]; - 166 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()"]; - 167 [label="Exit block"]; - } - 168 [label="Exit function test_6" style="filled" fillcolor=red]; - } - 152 -> {153}; - 153 -> {154}; - 154 -> {155}; - 155 -> {156}; - 156 -> {157}; - 157 -> {158}; - 158 -> {159}; - 159 -> {160}; - 160 -> {161}; - 161 -> {162}; - 162 -> {163}; - 163 -> {164}; - 164 -> {165}; - 165 -> {166}; - 166 -> {167}; - 167 -> {168}; - - subgraph cluster_38 { - color=red - 169 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_39 { - color=blue - 170 [label="Enter block"]; - 171 [label="Access variable R|/d1|"]; - 172 [label="Enter safe call"]; - 173 [label="Access variable R|/D.any|"]; - 174 [label="Exit safe call"]; - 175 [label="Variable declaration: lval a: R|kotlin/Any?|"]; - 176 [label="Access variable R|/d2|"]; - 177 [label="Enter safe call"]; - 178 [label="Access variable R|/D.any|"]; - 179 [label="Exit safe call"]; - 180 [label="Variable declaration: lval b: R|kotlin/Any?|"]; - 181 [label="Access variable R|/a|"]; - 182 [label="Type operator: (R|/a| as R|A|)"]; - 183 [label="Access variable R|/a|"]; - 184 [label="Function call: R|/a|.R|/A.foo|()"]; - 185 [label="Access variable R|/b|"]; - 186 [label="Type operator: (R|/b| as R|B|)"]; - 187 [label="Access variable R|/b|"]; - 188 [label="Function call: R|/b|.R|/B.bar|()"]; - 189 [label="Exit block"]; - } - 190 [label="Exit function test_7" style="filled" fillcolor=red]; - } - 169 -> {170}; - 170 -> {171}; - 171 -> {172 174}; - 172 -> {173}; - 173 -> {174}; - 174 -> {175}; - 175 -> {176}; - 176 -> {177 179}; - 177 -> {178}; - 178 -> {179}; - 179 -> {180}; - 180 -> {181}; - 181 -> {182}; - 182 -> {183}; - 183 -> {184}; - 184 -> {185}; - 185 -> {186}; - 186 -> {187}; - 187 -> {188}; - 188 -> {189}; - 189 -> {190}; - + 116 [label="Part of class initialization"]; + 117 [label="Exit class D" style="filled" fillcolor=red]; } + 115 -> {116} [color=green]; + 116 -> {117} [style=dotted]; + 116 -> {123} [color=green]; + 116 -> {123} [style=dashed]; + + subgraph cluster_28 { + color=red + 118 [label="Enter function " style="filled" fillcolor=red]; + 119 [label="Delegated constructor call: super()"]; + 120 [label="Exit function " style="filled" fillcolor=red]; + } + 118 -> {119}; + 119 -> {120}; + + subgraph cluster_29 { + color=red + 121 [label="Enter function getter" style="filled" fillcolor=red]; + 122 [label="Exit function getter" style="filled" fillcolor=red]; + } + 121 -> {122}; + + subgraph cluster_30 { + color=red + 123 [label="Enter property" style="filled" fillcolor=red]; + 124 [label="Access variable R|/any|"]; + 125 [label="Exit property" style="filled" fillcolor=red]; + } + 123 -> {124}; + 124 -> {125}; + 125 -> {117} [color=green]; + + subgraph cluster_31 { + color=red + 126 [label="Enter function baz" style="filled" fillcolor=red]; + subgraph cluster_32 { + color=blue + 127 [label="Enter block"]; + 128 [label="Exit block"]; + } + 129 [label="Exit function baz" style="filled" fillcolor=red]; + } + 126 -> {127}; + 127 -> {128}; + 128 -> {129}; + + subgraph cluster_33 { + color=red + 130 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_34 { + color=blue + 131 [label="Enter block"]; + 132 [label="Access variable R|/d|"]; + 133 [label="Access variable R|/D.any|"]; + 134 [label="Exit lhs of ?:"]; + 135 [label="Enter rhs of ?:"]; + 136 [label="Jump: ^test_5 Unit"]; + 137 [label="Stub" style="filled" fillcolor=gray]; + 138 [label="Lhs of ?: is not null"]; + 139 [label="Exit ?:"]; + 140 [label="Variable declaration: lval a: R|kotlin/Any|"]; + 141 [label="Access variable R|/a|"]; + 142 [label="Function call: R|/a|.R|/baz|()"]; + 143 [label="Access variable R|/d|"]; + 144 [label="Access variable R|/D.any|"]; + 145 [label="Function call: R|/d|.R|/D.any|.R|/baz|()"]; + 146 [label="Access variable R|/a|"]; + 147 [label="Type operator: (R|/a| as R|A|)"]; + 148 [label="Access variable R|/a|"]; + 149 [label="Function call: R|/a|.R|/A.foo|()"]; + 150 [label="Exit block"]; + } + 151 [label="Exit function test_5" style="filled" fillcolor=red]; + } + 130 -> {131}; + 131 -> {132}; + 132 -> {133}; + 133 -> {134}; + 134 -> {138 135}; + 135 -> {136}; + 136 -> {151}; + 136 -> {137} [style=dotted]; + 137 -> {139} [style=dotted]; + 138 -> {139}; + 139 -> {140}; + 140 -> {141}; + 141 -> {142}; + 142 -> {143}; + 143 -> {144}; + 144 -> {145}; + 145 -> {146}; + 146 -> {147}; + 147 -> {148}; + 148 -> {149}; + 149 -> {150}; + 150 -> {151}; + + subgraph cluster_35 { + color=red + 152 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_36 { + color=blue + 153 [label="Enter block"]; + 154 [label="Access variable R|/d1|"]; + 155 [label="Access variable R|/D.any|"]; + 156 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 157 [label="Access variable R|/a|"]; + 158 [label="Type operator: (R|/a| as R|A|)"]; + 159 [label="Access variable R|/a|"]; + 160 [label="Function call: R|/a|.R|/A.foo|()"]; + 161 [label="Access variable R|/d1|"]; + 162 [label="Access variable R|/D.any|"]; + 163 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()"]; + 164 [label="Access variable R|/d1|"]; + 165 [label="Access variable R|/D.any|"]; + 166 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()"]; + 167 [label="Exit block"]; + } + 168 [label="Exit function test_6" style="filled" fillcolor=red]; + } + 152 -> {153}; + 153 -> {154}; + 154 -> {155}; + 155 -> {156}; + 156 -> {157}; + 157 -> {158}; + 158 -> {159}; + 159 -> {160}; + 160 -> {161}; + 161 -> {162}; + 162 -> {163}; + 163 -> {164}; + 164 -> {165}; + 165 -> {166}; + 166 -> {167}; + 167 -> {168}; + + subgraph cluster_37 { + color=red + 169 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_38 { + color=blue + 170 [label="Enter block"]; + 171 [label="Access variable R|/d1|"]; + 172 [label="Enter safe call"]; + 173 [label="Access variable R|/D.any|"]; + 174 [label="Exit safe call"]; + 175 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 176 [label="Access variable R|/d2|"]; + 177 [label="Enter safe call"]; + 178 [label="Access variable R|/D.any|"]; + 179 [label="Exit safe call"]; + 180 [label="Variable declaration: lval b: R|kotlin/Any?|"]; + 181 [label="Access variable R|/a|"]; + 182 [label="Type operator: (R|/a| as R|A|)"]; + 183 [label="Access variable R|/a|"]; + 184 [label="Function call: R|/a|.R|/A.foo|()"]; + 185 [label="Access variable R|/b|"]; + 186 [label="Type operator: (R|/b| as R|B|)"]; + 187 [label="Access variable R|/b|"]; + 188 [label="Function call: R|/b|.R|/B.bar|()"]; + 189 [label="Exit block"]; + } + 190 [label="Exit function test_7" style="filled" fillcolor=red]; + } + 169 -> {170}; + 170 -> {171}; + 171 -> {172 174}; + 172 -> {173}; + 173 -> {174}; + 174 -> {175}; + 175 -> {176}; + 176 -> {177 179}; + 177 -> {178}; + 178 -> {179}; + 179 -> {180}; + 180 -> {181}; + 181 -> {182}; + 182 -> {183}; + 183 -> {184}; + 184 -> {185}; + 185 -> {186}; + 186 -> {187}; + 187 -> {188}; + 188 -> {189}; + 189 -> {190}; + +} 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 51bd9caff0d..da3fec98d59 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot @@ -6,861 +6,859 @@ digraph boundSmartcastsInBranches_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - subgraph cluster_1 { - color=blue - 1 [label="Part of class initialization"]; - 2 [label="Exit class A" style="filled" fillcolor=red]; - } - 0 -> {1} [color=green]; - 1 -> {2} [style=dotted]; - 1 -> {8} [color=green]; - 1 -> {8} [style=dashed]; + 1 [label="Part of class initialization"]; + 2 [label="Exit class A" style="filled" fillcolor=red]; + } + 0 -> {1} [color=green]; + 1 -> {2} [style=dotted]; + 1 -> {8} [color=green]; + 1 -> {8} [style=dashed]; - subgraph cluster_2 { - color=red - 3 [label="Enter function " style="filled" fillcolor=red]; - 4 [label="Delegated constructor call: super()"]; - 5 [label="Exit function " style="filled" fillcolor=red]; - } - 3 -> {4}; - 4 -> {5}; + subgraph cluster_1 { + color=red + 3 [label="Enter function " style="filled" fillcolor=red]; + 4 [label="Delegated constructor call: super()"]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + 3 -> {4}; + 4 -> {5}; - subgraph cluster_3 { - color=red - 6 [label="Enter function getter" style="filled" fillcolor=red]; - 7 [label="Exit function getter" style="filled" fillcolor=red]; - } - 6 -> {7}; + subgraph cluster_2 { + color=red + 6 [label="Enter function getter" style="filled" fillcolor=red]; + 7 [label="Exit function getter" style="filled" fillcolor=red]; + } + 6 -> {7}; - subgraph cluster_4 { - color=red - 8 [label="Enter property" style="filled" fillcolor=red]; - 9 [label="Const: String()"]; - 10 [label="Exit property" style="filled" fillcolor=red]; - } - 8 -> {9}; - 9 -> {10}; - 10 -> {2} [color=green]; + subgraph cluster_3 { + color=red + 8 [label="Enter property" style="filled" fillcolor=red]; + 9 [label="Const: String()"]; + 10 [label="Exit property" style="filled" fillcolor=red]; + } + 8 -> {9}; + 9 -> {10}; + 10 -> {2} [color=green]; + subgraph cluster_4 { + color=red + 11 [label="Enter function test_0" style="filled" fillcolor=red]; subgraph cluster_5 { - color=red - 11 [label="Enter function test_0" style="filled" fillcolor=red]; + color=blue + 12 [label="Enter block"]; + 13 [label="Const: Null(null)"]; + 14 [label="Variable declaration: lvar goodA: R|A?|"]; + 15 [label="Access variable R|/list|"]; + 16 [label="Function call: R|/list|.R|FakeOverride|>|()"]; + 17 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; subgraph cluster_6 { color=blue - 12 [label="Enter block"]; - 13 [label="Const: Null(null)"]; - 14 [label="Variable declaration: lvar goodA: R|A?|"]; - 15 [label="Access variable R|/list|"]; - 16 [label="Function call: R|/list|.R|FakeOverride|>|()"]; - 17 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; + 18 [label="Enter while loop"]; subgraph cluster_7 { color=blue - 18 [label="Enter while loop"]; - subgraph cluster_8 { - color=blue - 19 [label="Enter loop condition"]; - 20 [label="Access variable R|/|"]; - 21 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; - 22 [label="Exit loop condition"]; - } + 19 [label="Enter loop condition"]; + 20 [label="Access variable R|/|"]; + 21 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; + 22 [label="Exit loop condition"]; + } + subgraph cluster_8 { + color=blue + 23 [label="Enter loop block"]; subgraph cluster_9 { color=blue - 23 [label="Enter loop block"]; + 24 [label="Enter block"]; + 25 [label="Access variable R|/|"]; + 26 [label="Function call: R|/|.R|FakeOverride|()"]; + 27 [label="Variable declaration: lval a: R|A|"]; subgraph cluster_10 { color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/|"]; - 26 [label="Function call: R|/|.R|FakeOverride|()"]; - 27 [label="Variable declaration: lval a: R|A|"]; + 28 [label="Enter when"]; subgraph cluster_11 { color=blue - 28 [label="Enter when"]; - subgraph cluster_12 { - color=blue - 29 [label="Enter when branch condition "]; - 30 [label="Access variable R|/goodA|"]; - 31 [label="Const: Null(null)"]; - 32 [label="Equality operator =="]; - 33 [label="Exit when branch condition"]; - } - 34 [label="Synthetic else branch"]; - 35 [label="Enter when branch result"]; - subgraph cluster_13 { - color=blue - 36 [label="Enter block"]; - 37 [label="Access variable R|/a|"]; - 38 [label="Assignment: R|/goodA|"]; - 39 [label="Jump: continue@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] "]; - 40 [label="Stub" style="filled" fillcolor=gray]; - 41 [label="Exit block" style="filled" fillcolor=gray]; - } - 42 [label="Exit when branch result" style="filled" fillcolor=gray]; - 43 [label="Exit when"]; + 29 [label="Enter when branch condition "]; + 30 [label="Access variable R|/goodA|"]; + 31 [label="Const: Null(null)"]; + 32 [label="Equality operator =="]; + 33 [label="Exit when branch condition"]; } - 44 [label="Access variable R|/goodA|"]; - 45 [label="Access variable R|/A.s|"]; - 46 [label="Exit block"]; + 34 [label="Synthetic else branch"]; + 35 [label="Enter when branch result"]; + subgraph cluster_12 { + color=blue + 36 [label="Enter block"]; + 37 [label="Access variable R|/a|"]; + 38 [label="Assignment: R|/goodA|"]; + 39 [label="Jump: continue@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] "]; + 40 [label="Stub" style="filled" fillcolor=gray]; + 41 [label="Exit block" style="filled" fillcolor=gray]; + } + 42 [label="Exit when branch result" style="filled" fillcolor=gray]; + 43 [label="Exit when"]; } - 47 [label="Exit loop block"]; + 44 [label="Access variable R|/goodA|"]; + 45 [label="Access variable R|/A.s|"]; + 46 [label="Exit block"]; } - 48 [label="Exit whileloop"]; + 47 [label="Exit loop block"]; } - 49 [label="Exit block"]; + 48 [label="Exit whileloop"]; } - 50 [label="Exit function test_0" style="filled" fillcolor=red]; + 49 [label="Exit block"]; } - 11 -> {12}; - 12 -> {13}; - 13 -> {14}; - 14 -> {15}; - 15 -> {16}; - 16 -> {17}; - 17 -> {18}; - 18 -> {19}; - 19 -> {20}; - 20 -> {21}; - 21 -> {22}; - 22 -> {48 23}; - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - 33 -> {35 34}; - 34 -> {43}; - 35 -> {36}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40} [style=dotted]; - 39 -> {18} [color=green style=dashed]; - 40 -> {41} [style=dotted]; - 41 -> {42} [style=dotted]; - 42 -> {43} [style=dotted]; - 43 -> {44}; - 44 -> {45}; - 45 -> {46}; - 46 -> {47}; - 47 -> {19} [color=green style=dashed]; - 48 -> {49}; - 49 -> {50}; + 50 [label="Exit function test_0" style="filled" fillcolor=red]; + } + 11 -> {12}; + 12 -> {13}; + 13 -> {14}; + 14 -> {15}; + 15 -> {16}; + 16 -> {17}; + 17 -> {18}; + 18 -> {19}; + 19 -> {20}; + 20 -> {21}; + 21 -> {22}; + 22 -> {48 23}; + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + 33 -> {35 34}; + 34 -> {43}; + 35 -> {36}; + 36 -> {37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {40} [style=dotted]; + 39 -> {18} [color=green style=dashed]; + 40 -> {41} [style=dotted]; + 41 -> {42} [style=dotted]; + 42 -> {43} [style=dotted]; + 43 -> {44}; + 44 -> {45}; + 45 -> {46}; + 46 -> {47}; + 47 -> {19} [color=green style=dashed]; + 48 -> {49}; + 49 -> {50}; + subgraph cluster_13 { + color=red + 51 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_14 { - color=red - 51 [label="Enter function test_1" style="filled" fillcolor=red]; + color=blue + 52 [label="Enter block"]; + 53 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_15 { color=blue - 52 [label="Enter block"]; - 53 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 54 [label="Enter when"]; subgraph cluster_16 { color=blue - 54 [label="Enter when"]; - subgraph cluster_17 { - color=blue - 55 [label="Enter when branch condition "]; - 56 [label="Access variable R|/b|"]; - 57 [label="Exit when branch condition"]; - } - subgraph cluster_18 { - color=blue - 58 [label="Enter when branch condition else"]; - 59 [label="Exit when branch condition"]; - } - 60 [label="Enter when branch result"]; - subgraph cluster_19 { - color=blue - 61 [label="Enter block"]; - 62 [label="Access variable R|/a|"]; - 63 [label="Assignment: R|/x|"]; - 64 [label="Exit block"]; - } - 65 [label="Exit when branch result"]; - 66 [label="Enter when branch result"]; - subgraph cluster_20 { - color=blue - 67 [label="Enter block"]; - 68 [label="Function call: R|/A.A|()"]; - 69 [label="Assignment: R|/x|"]; - 70 [label="Exit block"]; - } - 71 [label="Exit when branch result"]; - 72 [label="Exit when"]; + 55 [label="Enter when branch condition "]; + 56 [label="Access variable R|/b|"]; + 57 [label="Exit when branch condition"]; } - 73 [label="Access variable R|/x|"]; - 74 [label="Access variable R|/A.s|"]; - 75 [label="Exit block"]; + subgraph cluster_17 { + color=blue + 58 [label="Enter when branch condition else"]; + 59 [label="Exit when branch condition"]; + } + 60 [label="Enter when branch result"]; + subgraph cluster_18 { + color=blue + 61 [label="Enter block"]; + 62 [label="Access variable R|/a|"]; + 63 [label="Assignment: R|/x|"]; + 64 [label="Exit block"]; + } + 65 [label="Exit when branch result"]; + 66 [label="Enter when branch result"]; + subgraph cluster_19 { + color=blue + 67 [label="Enter block"]; + 68 [label="Function call: R|/A.A|()"]; + 69 [label="Assignment: R|/x|"]; + 70 [label="Exit block"]; + } + 71 [label="Exit when branch result"]; + 72 [label="Exit when"]; } - 76 [label="Exit function test_1" style="filled" fillcolor=red]; + 73 [label="Access variable R|/x|"]; + 74 [label="Access variable R|/A.s|"]; + 75 [label="Exit block"]; } - 51 -> {52}; - 52 -> {53}; - 53 -> {54}; - 54 -> {55}; - 55 -> {56}; - 56 -> {57}; - 57 -> {66 58}; - 58 -> {59}; - 59 -> {60}; - 60 -> {61}; - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {65}; - 65 -> {72}; - 66 -> {67}; - 67 -> {68}; - 68 -> {69}; - 69 -> {70}; - 70 -> {71}; - 71 -> {72}; - 72 -> {73}; - 73 -> {74}; - 74 -> {75}; - 75 -> {76}; + 76 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 51 -> {52}; + 52 -> {53}; + 53 -> {54}; + 54 -> {55}; + 55 -> {56}; + 56 -> {57}; + 57 -> {66 58}; + 58 -> {59}; + 59 -> {60}; + 60 -> {61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; + 64 -> {65}; + 65 -> {72}; + 66 -> {67}; + 67 -> {68}; + 68 -> {69}; + 69 -> {70}; + 70 -> {71}; + 71 -> {72}; + 72 -> {73}; + 73 -> {74}; + 74 -> {75}; + 75 -> {76}; + subgraph cluster_20 { + color=red + 77 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_21 { - color=red - 77 [label="Enter function test_2" style="filled" fillcolor=red]; + color=blue + 78 [label="Enter block"]; + 79 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_22 { color=blue - 78 [label="Enter block"]; - 79 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 80 [label="Enter when"]; subgraph cluster_23 { color=blue - 80 [label="Enter when"]; - subgraph cluster_24 { - color=blue - 81 [label="Enter when branch condition "]; - 82 [label="Access variable R|/b|"]; - 83 [label="Exit when branch condition"]; - } - subgraph cluster_25 { - color=blue - 84 [label="Enter when branch condition else"]; - 85 [label="Exit when branch condition"]; - } - 86 [label="Enter when branch result"]; - subgraph cluster_26 { - color=blue - 87 [label="Enter block"]; - 88 [label="Access variable R|/a|"]; - 89 [label="Assignment: R|/x|"]; - 90 [label="Access variable R|/a|"]; - 91 [label="Type operator: (R|/a| as R|A|)"]; - 92 [label="Exit block"]; - } - 93 [label="Exit when branch result"]; - 94 [label="Enter when branch result"]; - subgraph cluster_27 { - color=blue - 95 [label="Enter block"]; - 96 [label="Function call: R|/A.A|()"]; - 97 [label="Assignment: R|/x|"]; - 98 [label="Exit block"]; - } - 99 [label="Exit when branch result"]; - 100 [label="Exit when"]; + 81 [label="Enter when branch condition "]; + 82 [label="Access variable R|/b|"]; + 83 [label="Exit when branch condition"]; } - 101 [label="Access variable R|/x|"]; - 102 [label="Access variable R|/A.s|"]; - 103 [label="Exit block"]; + subgraph cluster_24 { + color=blue + 84 [label="Enter when branch condition else"]; + 85 [label="Exit when branch condition"]; + } + 86 [label="Enter when branch result"]; + subgraph cluster_25 { + color=blue + 87 [label="Enter block"]; + 88 [label="Access variable R|/a|"]; + 89 [label="Assignment: R|/x|"]; + 90 [label="Access variable R|/a|"]; + 91 [label="Type operator: (R|/a| as R|A|)"]; + 92 [label="Exit block"]; + } + 93 [label="Exit when branch result"]; + 94 [label="Enter when branch result"]; + subgraph cluster_26 { + color=blue + 95 [label="Enter block"]; + 96 [label="Function call: R|/A.A|()"]; + 97 [label="Assignment: R|/x|"]; + 98 [label="Exit block"]; + } + 99 [label="Exit when branch result"]; + 100 [label="Exit when"]; } - 104 [label="Exit function test_2" style="filled" fillcolor=red]; + 101 [label="Access variable R|/x|"]; + 102 [label="Access variable R|/A.s|"]; + 103 [label="Exit block"]; } - 77 -> {78}; - 78 -> {79}; - 79 -> {80}; - 80 -> {81}; - 81 -> {82}; - 82 -> {83}; - 83 -> {94 84}; - 84 -> {85}; - 85 -> {86}; - 86 -> {87}; - 87 -> {88}; - 88 -> {89}; - 89 -> {90}; - 90 -> {91}; - 91 -> {92}; - 92 -> {93}; - 93 -> {100}; - 94 -> {95}; - 95 -> {96}; - 96 -> {97}; - 97 -> {98}; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; - 101 -> {102}; - 102 -> {103}; - 103 -> {104}; + 104 [label="Exit function test_2" style="filled" fillcolor=red]; + } + 77 -> {78}; + 78 -> {79}; + 79 -> {80}; + 80 -> {81}; + 81 -> {82}; + 82 -> {83}; + 83 -> {94 84}; + 84 -> {85}; + 85 -> {86}; + 86 -> {87}; + 87 -> {88}; + 88 -> {89}; + 89 -> {90}; + 90 -> {91}; + 91 -> {92}; + 92 -> {93}; + 93 -> {100}; + 94 -> {95}; + 95 -> {96}; + 96 -> {97}; + 97 -> {98}; + 98 -> {99}; + 99 -> {100}; + 100 -> {101}; + 101 -> {102}; + 102 -> {103}; + 103 -> {104}; + subgraph cluster_27 { + color=red + 105 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_28 { - color=red - 105 [label="Enter function test_3" style="filled" fillcolor=red]; + color=blue + 106 [label="Enter block"]; + 107 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_29 { color=blue - 106 [label="Enter block"]; - 107 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 108 [label="Enter when"]; subgraph cluster_30 { color=blue - 108 [label="Enter when"]; - subgraph cluster_31 { - color=blue - 109 [label="Enter when branch condition "]; - 110 [label="Access variable R|/b|"]; - 111 [label="Exit when branch condition"]; - } - subgraph cluster_32 { - color=blue - 112 [label="Enter when branch condition else"]; - 113 [label="Exit when branch condition"]; - } - 114 [label="Enter when branch result"]; - subgraph cluster_33 { - color=blue - 115 [label="Enter block"]; - 116 [label="Access variable R|/a|"]; - 117 [label="Type operator: (R|/a| as R|A|)"]; - 118 [label="Access variable R|/a|"]; - 119 [label="Assignment: R|/x|"]; - 120 [label="Exit block"]; - } - 121 [label="Exit when branch result"]; - 122 [label="Enter when branch result"]; - subgraph cluster_34 { - color=blue - 123 [label="Enter block"]; - 124 [label="Function call: R|/A.A|()"]; - 125 [label="Assignment: R|/x|"]; - 126 [label="Exit block"]; - } - 127 [label="Exit when branch result"]; - 128 [label="Exit when"]; + 109 [label="Enter when branch condition "]; + 110 [label="Access variable R|/b|"]; + 111 [label="Exit when branch condition"]; } - 129 [label="Access variable R|/x|"]; - 130 [label="Access variable R|/A.s|"]; - 131 [label="Exit block"]; + subgraph cluster_31 { + color=blue + 112 [label="Enter when branch condition else"]; + 113 [label="Exit when branch condition"]; + } + 114 [label="Enter when branch result"]; + subgraph cluster_32 { + color=blue + 115 [label="Enter block"]; + 116 [label="Access variable R|/a|"]; + 117 [label="Type operator: (R|/a| as R|A|)"]; + 118 [label="Access variable R|/a|"]; + 119 [label="Assignment: R|/x|"]; + 120 [label="Exit block"]; + } + 121 [label="Exit when branch result"]; + 122 [label="Enter when branch result"]; + subgraph cluster_33 { + color=blue + 123 [label="Enter block"]; + 124 [label="Function call: R|/A.A|()"]; + 125 [label="Assignment: R|/x|"]; + 126 [label="Exit block"]; + } + 127 [label="Exit when branch result"]; + 128 [label="Exit when"]; } - 132 [label="Exit function test_3" style="filled" fillcolor=red]; + 129 [label="Access variable R|/x|"]; + 130 [label="Access variable R|/A.s|"]; + 131 [label="Exit block"]; } - 105 -> {106}; - 106 -> {107}; - 107 -> {108}; - 108 -> {109}; - 109 -> {110}; - 110 -> {111}; - 111 -> {122 112}; - 112 -> {113}; - 113 -> {114}; - 114 -> {115}; - 115 -> {116}; - 116 -> {117}; - 117 -> {118}; - 118 -> {119}; - 119 -> {120}; - 120 -> {121}; - 121 -> {128}; - 122 -> {123}; - 123 -> {124}; - 124 -> {125}; - 125 -> {126}; - 126 -> {127}; - 127 -> {128}; - 128 -> {129}; - 129 -> {130}; - 130 -> {131}; - 131 -> {132}; + 132 [label="Exit function test_3" style="filled" fillcolor=red]; + } + 105 -> {106}; + 106 -> {107}; + 107 -> {108}; + 108 -> {109}; + 109 -> {110}; + 110 -> {111}; + 111 -> {122 112}; + 112 -> {113}; + 113 -> {114}; + 114 -> {115}; + 115 -> {116}; + 116 -> {117}; + 117 -> {118}; + 118 -> {119}; + 119 -> {120}; + 120 -> {121}; + 121 -> {128}; + 122 -> {123}; + 123 -> {124}; + 124 -> {125}; + 125 -> {126}; + 126 -> {127}; + 127 -> {128}; + 128 -> {129}; + 129 -> {130}; + 130 -> {131}; + 131 -> {132}; + subgraph cluster_34 { + color=red + 133 [label="Enter function test_4" style="filled" fillcolor=red]; subgraph cluster_35 { - color=red - 133 [label="Enter function test_4" style="filled" fillcolor=red]; + color=blue + 134 [label="Enter block"]; + 135 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_36 { color=blue - 134 [label="Enter block"]; - 135 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 136 [label="Enter when"]; subgraph cluster_37 { color=blue - 136 [label="Enter when"]; - subgraph cluster_38 { - color=blue - 137 [label="Enter when branch condition "]; - 138 [label="Access variable R|/b|"]; - 139 [label="Exit when branch condition"]; - } - subgraph cluster_39 { - color=blue - 140 [label="Enter when branch condition else"]; - 141 [label="Exit when branch condition"]; - } - 142 [label="Enter when branch result"]; - subgraph cluster_40 { - color=blue - 143 [label="Enter block"]; - 144 [label="Access variable R|/a|"]; - 145 [label="Assignment: R|/x|"]; - 146 [label="Exit block"]; - } - 147 [label="Exit when branch result"]; - 148 [label="Enter when branch result"]; - subgraph cluster_41 { - color=blue - 149 [label="Enter block"]; - 150 [label="Access variable R|/a|"]; - 151 [label="Assignment: R|/x|"]; - 152 [label="Exit block"]; - } - 153 [label="Exit when branch result"]; - 154 [label="Exit when"]; + 137 [label="Enter when branch condition "]; + 138 [label="Access variable R|/b|"]; + 139 [label="Exit when branch condition"]; } - 155 [label="Access variable R|/x|"]; - 156 [label="Type operator: (R|/x| as R|A|)"]; - 157 [label="Access variable R|/x|"]; - 158 [label="Access variable R|/A.s|"]; - 159 [label="Access variable R|/a|"]; - 160 [label="Access variable R|/A.s|"]; - 161 [label="Exit block"]; + subgraph cluster_38 { + color=blue + 140 [label="Enter when branch condition else"]; + 141 [label="Exit when branch condition"]; + } + 142 [label="Enter when branch result"]; + subgraph cluster_39 { + color=blue + 143 [label="Enter block"]; + 144 [label="Access variable R|/a|"]; + 145 [label="Assignment: R|/x|"]; + 146 [label="Exit block"]; + } + 147 [label="Exit when branch result"]; + 148 [label="Enter when branch result"]; + subgraph cluster_40 { + color=blue + 149 [label="Enter block"]; + 150 [label="Access variable R|/a|"]; + 151 [label="Assignment: R|/x|"]; + 152 [label="Exit block"]; + } + 153 [label="Exit when branch result"]; + 154 [label="Exit when"]; } - 162 [label="Exit function test_4" style="filled" fillcolor=red]; + 155 [label="Access variable R|/x|"]; + 156 [label="Type operator: (R|/x| as R|A|)"]; + 157 [label="Access variable R|/x|"]; + 158 [label="Access variable R|/A.s|"]; + 159 [label="Access variable R|/a|"]; + 160 [label="Access variable R|/A.s|"]; + 161 [label="Exit block"]; } - 133 -> {134}; - 134 -> {135}; - 135 -> {136}; - 136 -> {137}; - 137 -> {138}; - 138 -> {139}; - 139 -> {148 140}; - 140 -> {141}; - 141 -> {142}; - 142 -> {143}; - 143 -> {144}; - 144 -> {145}; - 145 -> {146}; - 146 -> {147}; - 147 -> {154}; - 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - 151 -> {152}; - 152 -> {153}; - 153 -> {154}; - 154 -> {155}; - 155 -> {156}; - 156 -> {157}; - 157 -> {158}; - 158 -> {159}; - 159 -> {160}; - 160 -> {161}; - 161 -> {162}; + 162 [label="Exit function test_4" style="filled" fillcolor=red]; + } + 133 -> {134}; + 134 -> {135}; + 135 -> {136}; + 136 -> {137}; + 137 -> {138}; + 138 -> {139}; + 139 -> {148 140}; + 140 -> {141}; + 141 -> {142}; + 142 -> {143}; + 143 -> {144}; + 144 -> {145}; + 145 -> {146}; + 146 -> {147}; + 147 -> {154}; + 148 -> {149}; + 149 -> {150}; + 150 -> {151}; + 151 -> {152}; + 152 -> {153}; + 153 -> {154}; + 154 -> {155}; + 155 -> {156}; + 156 -> {157}; + 157 -> {158}; + 158 -> {159}; + 159 -> {160}; + 160 -> {161}; + 161 -> {162}; + subgraph cluster_41 { + color=red + 163 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_42 { - color=red - 163 [label="Enter function test_5" style="filled" fillcolor=red]; + color=blue + 164 [label="Enter block"]; + 165 [label="Variable declaration: lval x: R|kotlin/Any|"]; subgraph cluster_43 { color=blue - 164 [label="Enter block"]; - 165 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 166 [label="Enter when"]; subgraph cluster_44 { color=blue - 166 [label="Enter when"]; - subgraph cluster_45 { - color=blue - 167 [label="Enter when branch condition "]; - 168 [label="Access variable R|/b|"]; - 169 [label="Exit when branch condition"]; - } - subgraph cluster_46 { - color=blue - 170 [label="Enter when branch condition else"]; - 171 [label="Exit when branch condition"]; - } - 172 [label="Enter when branch result"]; - subgraph cluster_47 { - color=blue - 173 [label="Enter block"]; - 174 [label="Access variable R|/a|"]; - 175 [label="Assignment: R|/x|"]; - 176 [label="Exit block"]; - } - 177 [label="Exit when branch result"]; - 178 [label="Enter when branch result"]; - subgraph cluster_48 { - color=blue - 179 [label="Enter block"]; - 180 [label="Access variable R|/a|"]; - 181 [label="Assignment: R|/x|"]; - 182 [label="Exit block"]; - } - 183 [label="Exit when branch result"]; - 184 [label="Exit when"]; + 167 [label="Enter when branch condition "]; + 168 [label="Access variable R|/b|"]; + 169 [label="Exit when branch condition"]; } - 185 [label="Access variable R|/a|"]; - 186 [label="Type operator: (R|/a| as R|A|)"]; - 187 [label="Access variable R|/x|"]; - 188 [label="Access variable R|/A.s|"]; - 189 [label="Access variable R|/a|"]; - 190 [label="Access variable R|/A.s|"]; - 191 [label="Exit block"]; + subgraph cluster_45 { + color=blue + 170 [label="Enter when branch condition else"]; + 171 [label="Exit when branch condition"]; + } + 172 [label="Enter when branch result"]; + subgraph cluster_46 { + color=blue + 173 [label="Enter block"]; + 174 [label="Access variable R|/a|"]; + 175 [label="Assignment: R|/x|"]; + 176 [label="Exit block"]; + } + 177 [label="Exit when branch result"]; + 178 [label="Enter when branch result"]; + subgraph cluster_47 { + color=blue + 179 [label="Enter block"]; + 180 [label="Access variable R|/a|"]; + 181 [label="Assignment: R|/x|"]; + 182 [label="Exit block"]; + } + 183 [label="Exit when branch result"]; + 184 [label="Exit when"]; } - 192 [label="Exit function test_5" style="filled" fillcolor=red]; + 185 [label="Access variable R|/a|"]; + 186 [label="Type operator: (R|/a| as R|A|)"]; + 187 [label="Access variable R|/x|"]; + 188 [label="Access variable R|/A.s|"]; + 189 [label="Access variable R|/a|"]; + 190 [label="Access variable R|/A.s|"]; + 191 [label="Exit block"]; } - 163 -> {164}; - 164 -> {165}; - 165 -> {166}; - 166 -> {167}; - 167 -> {168}; - 168 -> {169}; - 169 -> {178 170}; - 170 -> {171}; - 171 -> {172}; - 172 -> {173}; - 173 -> {174}; - 174 -> {175}; - 175 -> {176}; - 176 -> {177}; - 177 -> {184}; - 178 -> {179}; - 179 -> {180}; - 180 -> {181}; - 181 -> {182}; - 182 -> {183}; - 183 -> {184}; - 184 -> {185}; - 185 -> {186}; - 186 -> {187}; - 187 -> {188}; - 188 -> {189}; - 189 -> {190}; - 190 -> {191}; - 191 -> {192}; + 192 [label="Exit function test_5" style="filled" fillcolor=red]; + } + 163 -> {164}; + 164 -> {165}; + 165 -> {166}; + 166 -> {167}; + 167 -> {168}; + 168 -> {169}; + 169 -> {178 170}; + 170 -> {171}; + 171 -> {172}; + 172 -> {173}; + 173 -> {174}; + 174 -> {175}; + 175 -> {176}; + 176 -> {177}; + 177 -> {184}; + 178 -> {179}; + 179 -> {180}; + 180 -> {181}; + 181 -> {182}; + 182 -> {183}; + 183 -> {184}; + 184 -> {185}; + 185 -> {186}; + 186 -> {187}; + 187 -> {188}; + 188 -> {189}; + 189 -> {190}; + 190 -> {191}; + 191 -> {192}; + subgraph cluster_48 { + color=red + 193 [label="Enter function test_6" style="filled" fillcolor=red]; subgraph cluster_49 { - color=red - 193 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_50 { - color=blue - 194 [label="Enter block"]; - 195 [label="Variable declaration: lval x: R|kotlin/Any|"]; - 196 [label="Access variable R|/a|"]; - 197 [label="Assignment: R|/x|"]; - 198 [label="Access variable R|/x|"]; - 199 [label="Access variable R|/A.s|"]; - 200 [label="Exit block"]; - } - 201 [label="Exit function test_6" style="filled" fillcolor=red]; + color=blue + 194 [label="Enter block"]; + 195 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 196 [label="Access variable R|/a|"]; + 197 [label="Assignment: R|/x|"]; + 198 [label="Access variable R|/x|"]; + 199 [label="Access variable R|/A.s|"]; + 200 [label="Exit block"]; } - 193 -> {194}; - 194 -> {195}; - 195 -> {196}; - 196 -> {197}; - 197 -> {198}; - 198 -> {199}; - 199 -> {200}; - 200 -> {201}; + 201 [label="Exit function test_6" style="filled" fillcolor=red]; + } + 193 -> {194}; + 194 -> {195}; + 195 -> {196}; + 196 -> {197}; + 197 -> {198}; + 198 -> {199}; + 199 -> {200}; + 200 -> {201}; + subgraph cluster_50 { + color=red + 202 [label="Enter function test_7" style="filled" fillcolor=red]; subgraph cluster_51 { - color=red - 202 [label="Enter function test_7" style="filled" fillcolor=red]; + color=blue + 203 [label="Enter block"]; + 204 [label="Const: Null(null)"]; + 205 [label="Variable declaration: lval z: R|kotlin/String?|"]; + 206 [label="Access variable R|/z|"]; + 207 [label="Variable declaration: lvar y: R|kotlin/String?|"]; + 208 [label="Access variable R|/y|"]; + 209 [label="Variable declaration: lval x: R|kotlin/String?|"]; subgraph cluster_52 { color=blue - 203 [label="Enter block"]; - 204 [label="Const: Null(null)"]; - 205 [label="Variable declaration: lval z: R|kotlin/String?|"]; - 206 [label="Access variable R|/z|"]; - 207 [label="Variable declaration: lvar y: R|kotlin/String?|"]; - 208 [label="Access variable R|/y|"]; - 209 [label="Variable declaration: lval x: R|kotlin/String?|"]; + 210 [label="Enter when"]; subgraph cluster_53 { color=blue - 210 [label="Enter when"]; - subgraph cluster_54 { - color=blue - 211 [label="Enter when branch condition "]; - 212 [label="Access variable R|/x|"]; - 213 [label="Const: Null(null)"]; - 214 [label="Equality operator !="]; - 215 [label="Exit when branch condition"]; - } - 216 [label="Synthetic else branch"]; - 217 [label="Enter when branch result"]; - subgraph cluster_55 { - color=blue - 218 [label="Enter block"]; - 219 [label="Access variable R|/x|"]; - 220 [label="Access variable R|kotlin/String.length|"]; - 221 [label="Access variable R|/y|"]; - 222 [label="Access variable R|kotlin/String.length|"]; - 223 [label="Access variable R|/z|"]; - 224 [label="Access variable R|kotlin/String.length|"]; - 225 [label="Exit block"]; - } - 226 [label="Exit when branch result"]; - 227 [label="Exit when"]; + 211 [label="Enter when branch condition "]; + 212 [label="Access variable R|/x|"]; + 213 [label="Const: Null(null)"]; + 214 [label="Equality operator !="]; + 215 [label="Exit when branch condition"]; } + 216 [label="Synthetic else branch"]; + 217 [label="Enter when branch result"]; + subgraph cluster_54 { + color=blue + 218 [label="Enter block"]; + 219 [label="Access variable R|/x|"]; + 220 [label="Access variable R|kotlin/String.length|"]; + 221 [label="Access variable R|/y|"]; + 222 [label="Access variable R|kotlin/String.length|"]; + 223 [label="Access variable R|/z|"]; + 224 [label="Access variable R|kotlin/String.length|"]; + 225 [label="Exit block"]; + } + 226 [label="Exit when branch result"]; + 227 [label="Exit when"]; + } + subgraph cluster_55 { + color=blue + 228 [label="Enter when"]; subgraph cluster_56 { color=blue - 228 [label="Enter when"]; - subgraph cluster_57 { - color=blue - 229 [label="Enter when branch condition "]; - 230 [label="Access variable R|/y|"]; - 231 [label="Const: Null(null)"]; - 232 [label="Equality operator !="]; - 233 [label="Exit when branch condition"]; - } - 234 [label="Synthetic else branch"]; - 235 [label="Enter when branch result"]; - subgraph cluster_58 { - color=blue - 236 [label="Enter block"]; - 237 [label="Access variable R|/x|"]; - 238 [label="Access variable R|kotlin/String.length|"]; - 239 [label="Access variable R|/y|"]; - 240 [label="Access variable R|kotlin/String.length|"]; - 241 [label="Access variable R|/z|"]; - 242 [label="Access variable R|kotlin/String.length|"]; - 243 [label="Exit block"]; - } - 244 [label="Exit when branch result"]; - 245 [label="Exit when"]; + 229 [label="Enter when branch condition "]; + 230 [label="Access variable R|/y|"]; + 231 [label="Const: Null(null)"]; + 232 [label="Equality operator !="]; + 233 [label="Exit when branch condition"]; } + 234 [label="Synthetic else branch"]; + 235 [label="Enter when branch result"]; + subgraph cluster_57 { + color=blue + 236 [label="Enter block"]; + 237 [label="Access variable R|/x|"]; + 238 [label="Access variable R|kotlin/String.length|"]; + 239 [label="Access variable R|/y|"]; + 240 [label="Access variable R|kotlin/String.length|"]; + 241 [label="Access variable R|/z|"]; + 242 [label="Access variable R|kotlin/String.length|"]; + 243 [label="Exit block"]; + } + 244 [label="Exit when branch result"]; + 245 [label="Exit when"]; + } + subgraph cluster_58 { + color=blue + 246 [label="Enter when"]; subgraph cluster_59 { color=blue - 246 [label="Enter when"]; - subgraph cluster_60 { - color=blue - 247 [label="Enter when branch condition "]; - 248 [label="Access variable R|/z|"]; - 249 [label="Const: Null(null)"]; - 250 [label="Equality operator !="]; - 251 [label="Exit when branch condition"]; - } - 252 [label="Synthetic else branch"]; - 253 [label="Enter when branch result"]; - subgraph cluster_61 { - color=blue - 254 [label="Enter block"]; - 255 [label="Access variable R|/x|"]; - 256 [label="Access variable R|kotlin/String.length|"]; - 257 [label="Access variable R|/y|"]; - 258 [label="Access variable R|kotlin/String.length|"]; - 259 [label="Access variable R|/z|"]; - 260 [label="Access variable R|kotlin/String.length|"]; - 261 [label="Exit block"]; - } - 262 [label="Exit when branch result"]; - 263 [label="Exit when"]; + 247 [label="Enter when branch condition "]; + 248 [label="Access variable R|/z|"]; + 249 [label="Const: Null(null)"]; + 250 [label="Equality operator !="]; + 251 [label="Exit when branch condition"]; } - 264 [label="Const: Null(null)"]; - 265 [label="Assignment: R|/y|"]; + 252 [label="Synthetic else branch"]; + 253 [label="Enter when branch result"]; + subgraph cluster_60 { + color=blue + 254 [label="Enter block"]; + 255 [label="Access variable R|/x|"]; + 256 [label="Access variable R|kotlin/String.length|"]; + 257 [label="Access variable R|/y|"]; + 258 [label="Access variable R|kotlin/String.length|"]; + 259 [label="Access variable R|/z|"]; + 260 [label="Access variable R|kotlin/String.length|"]; + 261 [label="Exit block"]; + } + 262 [label="Exit when branch result"]; + 263 [label="Exit when"]; + } + 264 [label="Const: Null(null)"]; + 265 [label="Assignment: R|/y|"]; + subgraph cluster_61 { + color=blue + 266 [label="Enter when"]; subgraph cluster_62 { color=blue - 266 [label="Enter when"]; - subgraph cluster_63 { - color=blue - 267 [label="Enter when branch condition "]; - 268 [label="Access variable R|/x|"]; - 269 [label="Const: Null(null)"]; - 270 [label="Equality operator !="]; - 271 [label="Exit when branch condition"]; - } - 272 [label="Synthetic else branch"]; - 273 [label="Enter when branch result"]; - subgraph cluster_64 { - color=blue - 274 [label="Enter block"]; - 275 [label="Access variable R|/x|"]; - 276 [label="Access variable R|kotlin/String.length|"]; - 277 [label="Access variable R|/y|"]; - 278 [label="Access variable #"]; - 279 [label="Access variable R|/z|"]; - 280 [label="Access variable R|kotlin/String.length|"]; - 281 [label="Exit block"]; - } - 282 [label="Exit when branch result"]; - 283 [label="Exit when"]; + 267 [label="Enter when branch condition "]; + 268 [label="Access variable R|/x|"]; + 269 [label="Const: Null(null)"]; + 270 [label="Equality operator !="]; + 271 [label="Exit when branch condition"]; } + 272 [label="Synthetic else branch"]; + 273 [label="Enter when branch result"]; + subgraph cluster_63 { + color=blue + 274 [label="Enter block"]; + 275 [label="Access variable R|/x|"]; + 276 [label="Access variable R|kotlin/String.length|"]; + 277 [label="Access variable R|/y|"]; + 278 [label="Access variable #"]; + 279 [label="Access variable R|/z|"]; + 280 [label="Access variable R|kotlin/String.length|"]; + 281 [label="Exit block"]; + } + 282 [label="Exit when branch result"]; + 283 [label="Exit when"]; + } + subgraph cluster_64 { + color=blue + 284 [label="Enter when"]; subgraph cluster_65 { color=blue - 284 [label="Enter when"]; - subgraph cluster_66 { - color=blue - 285 [label="Enter when branch condition "]; - 286 [label="Access variable R|/y|"]; - 287 [label="Const: Null(null)"]; - 288 [label="Equality operator !="]; - 289 [label="Exit when branch condition"]; - } - 290 [label="Synthetic else branch"]; - 291 [label="Enter when branch result"]; - subgraph cluster_67 { - color=blue - 292 [label="Enter block"]; - 293 [label="Access variable R|/x|"]; - 294 [label="Access variable #"]; - 295 [label="Access variable R|/y|"]; - 296 [label="Access variable R|kotlin/String.length|"]; - 297 [label="Access variable R|/z|"]; - 298 [label="Access variable #"]; - 299 [label="Exit block"]; - } - 300 [label="Exit when branch result"]; - 301 [label="Exit when"]; + 285 [label="Enter when branch condition "]; + 286 [label="Access variable R|/y|"]; + 287 [label="Const: Null(null)"]; + 288 [label="Equality operator !="]; + 289 [label="Exit when branch condition"]; } + 290 [label="Synthetic else branch"]; + 291 [label="Enter when branch result"]; + subgraph cluster_66 { + color=blue + 292 [label="Enter block"]; + 293 [label="Access variable R|/x|"]; + 294 [label="Access variable #"]; + 295 [label="Access variable R|/y|"]; + 296 [label="Access variable R|kotlin/String.length|"]; + 297 [label="Access variable R|/z|"]; + 298 [label="Access variable #"]; + 299 [label="Exit block"]; + } + 300 [label="Exit when branch result"]; + 301 [label="Exit when"]; + } + subgraph cluster_67 { + color=blue + 302 [label="Enter when"]; subgraph cluster_68 { color=blue - 302 [label="Enter when"]; - subgraph cluster_69 { - color=blue - 303 [label="Enter when branch condition "]; - 304 [label="Access variable R|/z|"]; - 305 [label="Const: Null(null)"]; - 306 [label="Equality operator !="]; - 307 [label="Exit when branch condition"]; - } - 308 [label="Synthetic else branch"]; - 309 [label="Enter when branch result"]; - subgraph cluster_70 { - color=blue - 310 [label="Enter block"]; - 311 [label="Access variable R|/x|"]; - 312 [label="Access variable R|kotlin/String.length|"]; - 313 [label="Access variable R|/y|"]; - 314 [label="Access variable #"]; - 315 [label="Access variable R|/z|"]; - 316 [label="Access variable R|kotlin/String.length|"]; - 317 [label="Exit block"]; - } - 318 [label="Exit when branch result"]; - 319 [label="Exit when"]; + 303 [label="Enter when branch condition "]; + 304 [label="Access variable R|/z|"]; + 305 [label="Const: Null(null)"]; + 306 [label="Equality operator !="]; + 307 [label="Exit when branch condition"]; } - 320 [label="Exit block"]; + 308 [label="Synthetic else branch"]; + 309 [label="Enter when branch result"]; + subgraph cluster_69 { + color=blue + 310 [label="Enter block"]; + 311 [label="Access variable R|/x|"]; + 312 [label="Access variable R|kotlin/String.length|"]; + 313 [label="Access variable R|/y|"]; + 314 [label="Access variable #"]; + 315 [label="Access variable R|/z|"]; + 316 [label="Access variable R|kotlin/String.length|"]; + 317 [label="Exit block"]; + } + 318 [label="Exit when branch result"]; + 319 [label="Exit when"]; } - 321 [label="Exit function test_7" style="filled" fillcolor=red]; + 320 [label="Exit block"]; } - 202 -> {203}; - 203 -> {204}; - 204 -> {205}; - 205 -> {206}; - 206 -> {207}; - 207 -> {208}; - 208 -> {209}; - 209 -> {210}; - 210 -> {211}; - 211 -> {212}; - 212 -> {213}; - 213 -> {214}; - 214 -> {215}; - 215 -> {217 216}; - 216 -> {227}; - 217 -> {218}; - 218 -> {219}; - 219 -> {220}; - 220 -> {221}; - 221 -> {222}; - 222 -> {223}; - 223 -> {224}; - 224 -> {225}; - 225 -> {226}; - 226 -> {227}; - 227 -> {228}; - 228 -> {229}; - 229 -> {230}; - 230 -> {231}; - 231 -> {232}; - 232 -> {233}; - 233 -> {235 234}; - 234 -> {245}; - 235 -> {236}; - 236 -> {237}; - 237 -> {238}; - 238 -> {239}; - 239 -> {240}; - 240 -> {241}; - 241 -> {242}; - 242 -> {243}; - 243 -> {244}; - 244 -> {245}; - 245 -> {246}; - 246 -> {247}; - 247 -> {248}; - 248 -> {249}; - 249 -> {250}; - 250 -> {251}; - 251 -> {253 252}; - 252 -> {263}; - 253 -> {254}; - 254 -> {255}; - 255 -> {256}; - 256 -> {257}; - 257 -> {258}; - 258 -> {259}; - 259 -> {260}; - 260 -> {261}; - 261 -> {262}; - 262 -> {263}; - 263 -> {264}; - 264 -> {265}; - 265 -> {266}; - 266 -> {267}; - 267 -> {268}; - 268 -> {269}; - 269 -> {270}; - 270 -> {271}; - 271 -> {273 272}; - 272 -> {283}; - 273 -> {274}; - 274 -> {275}; - 275 -> {276}; - 276 -> {277}; - 277 -> {278}; - 278 -> {279}; - 279 -> {280}; - 280 -> {281}; - 281 -> {282}; - 282 -> {283}; - 283 -> {284}; - 284 -> {285}; - 285 -> {286}; - 286 -> {287}; - 287 -> {288}; - 288 -> {289}; - 289 -> {291 290}; - 290 -> {301}; - 291 -> {292}; - 292 -> {293}; - 293 -> {294}; - 294 -> {295}; - 295 -> {296}; - 296 -> {297}; - 297 -> {298}; - 298 -> {299}; - 299 -> {300}; - 300 -> {301}; - 301 -> {302}; - 302 -> {303}; - 303 -> {304}; - 304 -> {305}; - 305 -> {306}; - 306 -> {307}; - 307 -> {309 308}; - 308 -> {319}; - 309 -> {310}; - 310 -> {311}; - 311 -> {312}; - 312 -> {313}; - 313 -> {314}; - 314 -> {315}; - 315 -> {316}; - 316 -> {317}; - 317 -> {318}; - 318 -> {319}; - 319 -> {320}; - 320 -> {321}; - + 321 [label="Exit function test_7" style="filled" fillcolor=red]; } + 202 -> {203}; + 203 -> {204}; + 204 -> {205}; + 205 -> {206}; + 206 -> {207}; + 207 -> {208}; + 208 -> {209}; + 209 -> {210}; + 210 -> {211}; + 211 -> {212}; + 212 -> {213}; + 213 -> {214}; + 214 -> {215}; + 215 -> {217 216}; + 216 -> {227}; + 217 -> {218}; + 218 -> {219}; + 219 -> {220}; + 220 -> {221}; + 221 -> {222}; + 222 -> {223}; + 223 -> {224}; + 224 -> {225}; + 225 -> {226}; + 226 -> {227}; + 227 -> {228}; + 228 -> {229}; + 229 -> {230}; + 230 -> {231}; + 231 -> {232}; + 232 -> {233}; + 233 -> {235 234}; + 234 -> {245}; + 235 -> {236}; + 236 -> {237}; + 237 -> {238}; + 238 -> {239}; + 239 -> {240}; + 240 -> {241}; + 241 -> {242}; + 242 -> {243}; + 243 -> {244}; + 244 -> {245}; + 245 -> {246}; + 246 -> {247}; + 247 -> {248}; + 248 -> {249}; + 249 -> {250}; + 250 -> {251}; + 251 -> {253 252}; + 252 -> {263}; + 253 -> {254}; + 254 -> {255}; + 255 -> {256}; + 256 -> {257}; + 257 -> {258}; + 258 -> {259}; + 259 -> {260}; + 260 -> {261}; + 261 -> {262}; + 262 -> {263}; + 263 -> {264}; + 264 -> {265}; + 265 -> {266}; + 266 -> {267}; + 267 -> {268}; + 268 -> {269}; + 269 -> {270}; + 270 -> {271}; + 271 -> {273 272}; + 272 -> {283}; + 273 -> {274}; + 274 -> {275}; + 275 -> {276}; + 276 -> {277}; + 277 -> {278}; + 278 -> {279}; + 279 -> {280}; + 280 -> {281}; + 281 -> {282}; + 282 -> {283}; + 283 -> {284}; + 284 -> {285}; + 285 -> {286}; + 286 -> {287}; + 287 -> {288}; + 288 -> {289}; + 289 -> {291 290}; + 290 -> {301}; + 291 -> {292}; + 292 -> {293}; + 293 -> {294}; + 294 -> {295}; + 295 -> {296}; + 296 -> {297}; + 297 -> {298}; + 298 -> {299}; + 299 -> {300}; + 300 -> {301}; + 301 -> {302}; + 302 -> {303}; + 303 -> {304}; + 304 -> {305}; + 305 -> {306}; + 306 -> {307}; + 307 -> {309 308}; + 308 -> {319}; + 309 -> {310}; + 310 -> {311}; + 311 -> {312}; + 312 -> {313}; + 313 -> {314}; + 314 -> {315}; + 315 -> {316}; + 316 -> {317}; + 317 -> {318}; + 318 -> {319}; + 319 -> {320}; + 320 -> {321}; + +} 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 20fbe20d16a..578211d223c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot @@ -22,109 +22,107 @@ digraph functionCallBound_kt { subgraph cluster_2 { color=red 5 [label="Enter class Sub" style="filled" fillcolor=red]; - subgraph cluster_3 { - color=blue - 6 [label="Part of class initialization"]; - 7 [label="Exit class Sub" style="filled" fillcolor=red]; - } - 5 -> {6} [color=green]; - 6 -> {7} [style=dotted]; - 6 -> {13} [color=green]; - 6 -> {13} [style=dashed]; + 6 [label="Part of class initialization"]; + 7 [label="Exit class Sub" style="filled" fillcolor=red]; + } + 5 -> {6} [color=green]; + 6 -> {7} [style=dotted]; + 6 -> {13} [color=green]; + 6 -> {13} [style=dashed]; - subgraph cluster_4 { - color=red - 8 [label="Enter function " style="filled" fillcolor=red]; - 9 [label="Delegated constructor call: super()"]; - 10 [label="Exit function " style="filled" fillcolor=red]; - } - 8 -> {9}; - 9 -> {10}; + subgraph cluster_3 { + color=red + 8 [label="Enter function " style="filled" fillcolor=red]; + 9 [label="Delegated constructor call: super()"]; + 10 [label="Exit function " style="filled" fillcolor=red]; + } + 8 -> {9}; + 9 -> {10}; - subgraph cluster_5 { - color=red - 11 [label="Enter function getter" style="filled" fillcolor=red]; - 12 [label="Exit function getter" style="filled" fillcolor=red]; - } - 11 -> {12}; + subgraph cluster_4 { + color=red + 11 [label="Enter function getter" style="filled" fillcolor=red]; + 12 [label="Exit function getter" style="filled" fillcolor=red]; + } + 11 -> {12}; - subgraph cluster_6 { - color=red - 13 [label="Enter property" style="filled" fillcolor=red]; - 14 [label="Access variable R|/data|"]; - 15 [label="Exit property" style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - 15 -> {7} [color=green]; + subgraph cluster_5 { + color=red + 13 [label="Enter property" style="filled" fillcolor=red]; + 14 [label="Access variable R|/data|"]; + 15 [label="Exit property" style="filled" fillcolor=red]; + } + 13 -> {14}; + 14 -> {15}; + 15 -> {7} [color=green]; + subgraph cluster_6 { + color=red + 16 [label="Enter function isOk" style="filled" fillcolor=red]; subgraph cluster_7 { - color=red - 16 [label="Enter function isOk" style="filled" fillcolor=red]; - subgraph cluster_8 { - color=blue - 17 [label="Enter block"]; - 18 [label="Const: Boolean(true)"]; - 19 [label="Jump: ^isOk Boolean(true)"]; - 20 [label="Stub" style="filled" fillcolor=gray]; - 21 [label="Exit block" style="filled" fillcolor=gray]; - } - 22 [label="Exit function isOk" style="filled" fillcolor=red]; + color=blue + 17 [label="Enter block"]; + 18 [label="Const: Boolean(true)"]; + 19 [label="Jump: ^isOk Boolean(true)"]; + 20 [label="Stub" style="filled" fillcolor=gray]; + 21 [label="Exit block" style="filled" fillcolor=gray]; } - 16 -> {17}; - 17 -> {18}; - 18 -> {19}; - 19 -> {22}; - 19 -> {20} [style=dotted]; - 20 -> {21} [style=dotted]; - 21 -> {22} [style=dotted]; + 22 [label="Exit function isOk" style="filled" fillcolor=red]; + } + 16 -> {17}; + 17 -> {18}; + 18 -> {19}; + 19 -> {22}; + 19 -> {20} [style=dotted]; + 20 -> {21} [style=dotted]; + 21 -> {22} [style=dotted]; + subgraph cluster_8 { + color=red + 23 [label="Enter function check" style="filled" fillcolor=red]; subgraph cluster_9 { - color=red - 23 [label="Enter function check" style="filled" fillcolor=red]; + color=blue + 24 [label="Enter block"]; subgraph cluster_10 { color=blue - 24 [label="Enter block"]; + 25 [label="Enter when"]; subgraph cluster_11 { color=blue - 25 [label="Enter when"]; - subgraph cluster_12 { - color=blue - 26 [label="Enter when branch condition "]; - 27 [label="Access variable R|/base|"]; - 28 [label="Type operator: (R|/base| as? R|Sub|)"]; - 29 [label="Enter safe call"]; - 30 [label="Function call: $subj$.R|/isOk|()"]; - 31 [label="Exit safe call"]; - 32 [label="Const: Boolean(true)"]; - 33 [label="Equality operator =="]; - 34 [label="Exit when branch condition"]; - } - subgraph cluster_13 { - color=blue - 35 [label="Enter when branch condition else"]; - 36 [label="Exit when branch condition"]; - } - 37 [label="Enter when branch result"]; - subgraph cluster_14 { - color=blue - 38 [label="Enter block"]; - 39 [label="Access variable R|/base|"]; - 40 [label="Exit block"]; - } - 41 [label="Exit when branch result"]; - 42 [label="Enter when branch result"]; - subgraph cluster_15 { - color=blue - 43 [label="Enter block"]; - 44 [label="Access variable R|/base|"]; - 45 [label="Access variable R|/Sub.data|"]; - 46 [label="Exit block"]; - } - 47 [label="Exit when branch result"]; - 48 [label="Exit when"]; + 26 [label="Enter when branch condition "]; + 27 [label="Access variable R|/base|"]; + 28 [label="Type operator: (R|/base| as? R|Sub|)"]; + 29 [label="Enter safe call"]; + 30 [label="Function call: $subj$.R|/isOk|()"]; + 31 [label="Exit safe call"]; + 32 [label="Const: Boolean(true)"]; + 33 [label="Equality operator =="]; + 34 [label="Exit when branch condition"]; } - 49 [label="Jump: ^check when () { + subgraph cluster_12 { + color=blue + 35 [label="Enter when branch condition else"]; + 36 [label="Exit when branch condition"]; + } + 37 [label="Enter when branch result"]; + subgraph cluster_13 { + color=blue + 38 [label="Enter block"]; + 39 [label="Access variable R|/base|"]; + 40 [label="Exit block"]; + } + 41 [label="Exit when branch result"]; + 42 [label="Enter when branch result"]; + subgraph cluster_14 { + color=blue + 43 [label="Enter block"]; + 44 [label="Access variable R|/base|"]; + 45 [label="Access variable R|/Sub.data|"]; + 46 [label="Exit block"]; + } + 47 [label="Exit when branch result"]; + 48 [label="Exit when"]; + } + 49 [label="Jump: ^check when () { ==((R|/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> { R|/base|.R|/Sub.data| } @@ -133,40 +131,40 @@ digraph functionCallBound_kt { } } "]; - 50 [label="Stub" style="filled" fillcolor=gray]; - 51 [label="Exit block" style="filled" fillcolor=gray]; - } - 52 [label="Exit function check" style="filled" fillcolor=red]; + 50 [label="Stub" style="filled" fillcolor=gray]; + 51 [label="Exit block" style="filled" fillcolor=gray]; } - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29 31}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {42 35}; - 35 -> {36}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {48}; - 42 -> {43}; - 43 -> {44}; - 44 -> {45}; - 45 -> {46}; - 46 -> {47}; - 47 -> {48}; - 48 -> {49}; - 49 -> {52}; - 49 -> {50} [style=dotted]; - 50 -> {51} [style=dotted]; - 51 -> {52} [style=dotted]; - + 52 [label="Exit function check" style="filled" fillcolor=red]; } + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29 31}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + 33 -> {34}; + 34 -> {42 35}; + 35 -> {36}; + 36 -> {37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {48}; + 42 -> {43}; + 43 -> {44}; + 44 -> {45}; + 45 -> {46}; + 46 -> {47}; + 47 -> {48}; + 48 -> {49}; + 49 -> {52}; + 49 -> {50} [style=dotted]; + 50 -> {51} [style=dotted]; + 51 -> {52} [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 5462e505c4f..d15936afea2 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot @@ -22,238 +22,236 @@ digraph lambdaInWhenBranch_kt { subgraph cluster_2 { color=red 5 [label="Enter class SubClass1" style="filled" fillcolor=red]; - subgraph cluster_3 { - color=blue - 6 [label="Part of class initialization"]; - 7 [label="Exit class SubClass1" style="filled" fillcolor=red]; - } - 5 -> {6} [color=green]; - 6 -> {7} [style=dotted]; - 6 -> {13} [color=green]; - 6 -> {13} [style=dashed]; + 6 [label="Part of class initialization"]; + 7 [label="Exit class SubClass1" style="filled" fillcolor=red]; + } + 5 -> {6} [color=green]; + 6 -> {7} [style=dotted]; + 6 -> {13} [color=green]; + 6 -> {13} [style=dashed]; - subgraph cluster_4 { - color=red - 8 [label="Enter function " style="filled" fillcolor=red]; - 9 [label="Delegated constructor call: super()"]; - 10 [label="Exit function " style="filled" fillcolor=red]; - } - 8 -> {9}; - 9 -> {10}; + subgraph cluster_3 { + color=red + 8 [label="Enter function " style="filled" fillcolor=red]; + 9 [label="Delegated constructor call: super()"]; + 10 [label="Exit function " style="filled" fillcolor=red]; + } + 8 -> {9}; + 9 -> {10}; - subgraph cluster_5 { - color=red - 11 [label="Enter function getter" style="filled" fillcolor=red]; - 12 [label="Exit function getter" style="filled" fillcolor=red]; - } - 11 -> {12}; + subgraph cluster_4 { + color=red + 11 [label="Enter function getter" style="filled" fillcolor=red]; + 12 [label="Exit function getter" style="filled" fillcolor=red]; + } + 11 -> {12}; - subgraph cluster_6 { - color=red - 13 [label="Enter property" style="filled" fillcolor=red]; - 14 [label="Access variable R|/t|"]; - 15 [label="Exit property" style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - 15 -> {7} [color=green]; + subgraph cluster_5 { + color=red + 13 [label="Enter property" style="filled" fillcolor=red]; + 14 [label="Access variable R|/t|"]; + 15 [label="Exit property" style="filled" fillcolor=red]; + } + 13 -> {14}; + 14 -> {15}; + 15 -> {7} [color=green]; - subgraph cluster_7 { - color=red - 16 [label="Enter function component1" style="filled" fillcolor=red]; - 17 [label="Exit function component1" style="filled" fillcolor=red]; - } - 16 -> {17}; + subgraph cluster_6 { + color=red + 16 [label="Enter function component1" style="filled" fillcolor=red]; + 17 [label="Exit function component1" style="filled" fillcolor=red]; + } + 16 -> {17}; + subgraph cluster_7 { + color=red + 18 [label="Enter function copy" style="filled" fillcolor=red]; subgraph cluster_8 { - color=red - 18 [label="Enter function copy" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 20 [label="Enter default value of t" style="filled" fillcolor=red]; - 21 [label="Access variable R|/SubClass1.t|"]; - 22 [label="Exit default value of t" style="filled" fillcolor=red]; - } - 19 [label="Exit function copy" style="filled" fillcolor=red]; + color=blue + 20 [label="Enter default value of t" style="filled" fillcolor=red]; + 21 [label="Access variable R|/SubClass1.t|"]; + 22 [label="Exit default value of t" style="filled" fillcolor=red]; } - 18 -> {20 19}; - 20 -> {21}; - 20 -> {20} [style=dashed]; - 21 -> {22}; + 19 [label="Exit function copy" style="filled" fillcolor=red]; + } + 18 -> {20 19}; + 20 -> {21}; + 20 -> {20} [style=dashed]; + 21 -> {22}; - subgraph cluster_10 { - color=red - 23 [label="Enter class SubClass2" style="filled" fillcolor=red]; - 24 [label="Exit class SubClass2" style="filled" fillcolor=red]; - } - 23 -> {24} [color=green]; + subgraph cluster_9 { + color=red + 23 [label="Enter class SubClass2" style="filled" fillcolor=red]; + 24 [label="Exit class SubClass2" style="filled" fillcolor=red]; + } + 23 -> {24} [color=green]; - subgraph cluster_11 { - color=red - 25 [label="Enter function " style="filled" fillcolor=red]; - 26 [label="Delegated constructor call: super()"]; - 27 [label="Exit function " style="filled" fillcolor=red]; - } - 25 -> {26}; - 26 -> {27}; + subgraph cluster_10 { + color=red + 25 [label="Enter function " style="filled" fillcolor=red]; + 26 [label="Delegated constructor call: super()"]; + 27 [label="Exit function " style="filled" fillcolor=red]; + } + 25 -> {26}; + 26 -> {27}; - subgraph cluster_12 { - color=red - 28 [label="Enter function copy" style="filled" fillcolor=red]; - 29 [label="Exit function copy" style="filled" fillcolor=red]; - } - 28 -> {29}; + subgraph cluster_11 { + color=red + 28 [label="Enter function copy" style="filled" fillcolor=red]; + 29 [label="Exit function copy" style="filled" fillcolor=red]; + } + 28 -> {29}; + subgraph cluster_12 { + color=red + 30 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_13 { - color=red - 30 [label="Enter function foo" style="filled" fillcolor=red]; + color=blue + 31 [label="Enter block"]; subgraph cluster_14 { color=blue - 31 [label="Enter block"]; + 32 [label="Enter when"]; + 33 [label="Access variable R|/p|"]; subgraph cluster_15 { color=blue - 32 [label="Enter when"]; - 33 [label="Access variable R|/p|"]; - subgraph cluster_16 { - color=blue - 34 [label="Enter when branch condition "]; - 35 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 36 [label="Exit when branch condition"]; - } - subgraph cluster_17 { - color=blue - 37 [label="Enter when branch condition "]; - 38 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 39 [label="Exit when branch condition"]; - } - 40 [label="Enter when branch result"]; - subgraph cluster_18 { - color=blue - 41 [label="Enter block"]; - 42 [label="Const: String()"]; - 43 [label="Exit block"]; - } - 44 [label="Exit when branch result"]; - 45 [label="Enter when branch result"]; + 34 [label="Enter when branch condition "]; + 35 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 36 [label="Exit when branch condition"]; + } + subgraph cluster_16 { + color=blue + 37 [label="Enter when branch condition "]; + 38 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 39 [label="Exit when branch condition"]; + } + 40 [label="Enter when branch result"]; + subgraph cluster_17 { + color=blue + 41 [label="Enter block"]; + 42 [label="Const: String()"]; + 43 [label="Exit block"]; + } + 44 [label="Exit when branch result"]; + 45 [label="Enter when branch result"]; + subgraph cluster_18 { + color=blue + 46 [label="Enter block"]; + 47 [label="Const: String()"]; + 48 [label="Postponed enter to lambda"]; subgraph cluster_19 { color=blue - 46 [label="Enter block"]; - 47 [label="Const: String()"]; - 48 [label="Postponed enter to lambda"]; + 79 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_20 { color=blue - 79 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_21 { - color=blue - 80 [label="Enter block"]; - 81 [label="Access variable R|/it|"]; - 82 [label="Exit block"]; - } - 83 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 80 [label="Enter block"]; + 81 [label="Access variable R|/it|"]; + 82 [label="Exit block"]; } - 49 [label="Postponed exit from lambda"]; - 50 [label="Function call: String().R|kotlin/let|(...)"]; - 51 [label="Exit block"]; + 83 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 52 [label="Exit when branch result"]; - 53 [label="Exit when"]; + 49 [label="Postponed exit from lambda"]; + 50 [label="Function call: String().R|kotlin/let|(...)"]; + 51 [label="Exit block"]; } - 54 [label="Access variable R|/p|"]; - 55 [label="Access variable #"]; + 52 [label="Exit when branch result"]; + 53 [label="Exit when"]; + } + 54 [label="Access variable R|/p|"]; + 55 [label="Access variable #"]; + subgraph cluster_21 { + color=blue + 56 [label="Enter when"]; + 57 [label="Access variable R|/p|"]; subgraph cluster_22 { color=blue - 56 [label="Enter when"]; - 57 [label="Access variable R|/p|"]; - subgraph cluster_23 { - color=blue - 58 [label="Enter when branch condition "]; - 59 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 60 [label="Exit when branch condition"]; - } - subgraph cluster_24 { - color=blue - 61 [label="Enter when branch condition "]; - 62 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 63 [label="Exit when branch condition"]; - } - 64 [label="Enter when branch result"]; - subgraph cluster_25 { - color=blue - 65 [label="Enter block"]; - 66 [label="Const: String(2)"]; - 67 [label="Exit block"]; - } - 68 [label="Exit when branch result"]; - 69 [label="Enter when branch result"]; - subgraph cluster_26 { - color=blue - 70 [label="Enter block"]; - 71 [label="Access variable R|/p|"]; - 72 [label="Access variable R|/SubClass1.t|"]; - 73 [label="Exit block"]; - } - 74 [label="Exit when branch result"]; - 75 [label="Exit when"]; + 58 [label="Enter when branch condition "]; + 59 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 60 [label="Exit when branch condition"]; } - 76 [label="Access variable R|kotlin/String.length|"]; - 77 [label="Exit block"]; + subgraph cluster_23 { + color=blue + 61 [label="Enter when branch condition "]; + 62 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 63 [label="Exit when branch condition"]; + } + 64 [label="Enter when branch result"]; + subgraph cluster_24 { + color=blue + 65 [label="Enter block"]; + 66 [label="Const: String(2)"]; + 67 [label="Exit block"]; + } + 68 [label="Exit when branch result"]; + 69 [label="Enter when branch result"]; + subgraph cluster_25 { + color=blue + 70 [label="Enter block"]; + 71 [label="Access variable R|/p|"]; + 72 [label="Access variable R|/SubClass1.t|"]; + 73 [label="Exit block"]; + } + 74 [label="Exit when branch result"]; + 75 [label="Exit when"]; } - 78 [label="Exit function foo" style="filled" fillcolor=red]; + 76 [label="Access variable R|kotlin/String.length|"]; + 77 [label="Exit block"]; } - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; - 35 -> {36}; - 36 -> {45 37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {42}; - 42 -> {43}; - 43 -> {44}; - 44 -> {53}; - 45 -> {46}; - 46 -> {47}; - 47 -> {48}; - 48 -> {79}; - 48 -> {49} [color=red]; - 48 -> {79} [style=dashed]; - 49 -> {50}; - 50 -> {51}; - 51 -> {52}; - 52 -> {53}; - 53 -> {54}; - 54 -> {55}; - 55 -> {56}; - 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - 59 -> {60}; - 60 -> {69 61}; - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {65}; - 65 -> {66}; - 66 -> {67}; - 67 -> {68}; - 68 -> {75}; - 69 -> {70}; - 70 -> {71}; - 71 -> {72}; - 72 -> {73}; - 73 -> {74}; - 74 -> {75}; - 75 -> {76}; - 76 -> {77}; - 77 -> {78}; - 79 -> {80}; - 80 -> {81}; - 81 -> {82}; - 82 -> {83}; - 83 -> {49} [color=green]; - + 78 [label="Exit function foo" style="filled" fillcolor=red]; } + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + 33 -> {34}; + 34 -> {35}; + 35 -> {36}; + 36 -> {45 37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {42}; + 42 -> {43}; + 43 -> {44}; + 44 -> {53}; + 45 -> {46}; + 46 -> {47}; + 47 -> {48}; + 48 -> {79}; + 48 -> {49} [color=red]; + 48 -> {79} [style=dashed]; + 49 -> {50}; + 50 -> {51}; + 51 -> {52}; + 52 -> {53}; + 53 -> {54}; + 54 -> {55}; + 55 -> {56}; + 56 -> {57}; + 57 -> {58}; + 58 -> {59}; + 59 -> {60}; + 60 -> {69 61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; + 64 -> {65}; + 65 -> {66}; + 66 -> {67}; + 67 -> {68}; + 68 -> {75}; + 69 -> {70}; + 70 -> {71}; + 71 -> {72}; + 72 -> {73}; + 73 -> {74}; + 74 -> {75}; + 75 -> {76}; + 76 -> {77}; + 77 -> {78}; + 79 -> {80}; + 80 -> {81}; + 81 -> {82}; + 82 -> {83}; + 83 -> {49} [color=green]; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot index 0959bc38f09..e387243b9c3 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot @@ -69,1385 +69,1381 @@ digraph nullability_kt { subgraph cluster_9 { color=red 18 [label="Enter class QImpl" style="filled" fillcolor=red]; - subgraph cluster_10 { - color=blue - 19 [label="Part of class initialization"]; - 20 [label="Exit class QImpl" style="filled" fillcolor=red]; - } - 18 -> {19} [color=green]; - 19 -> {20} [style=dotted]; - 19 -> {26} [color=green]; - 19 -> {26} [style=dashed]; + 19 [label="Part of class initialization"]; + 20 [label="Exit class QImpl" style="filled" fillcolor=red]; + } + 18 -> {19} [color=green]; + 19 -> {20} [style=dotted]; + 19 -> {26} [color=green]; + 19 -> {26} [style=dashed]; - subgraph cluster_11 { - color=red - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Delegated constructor call: super()"]; - 23 [label="Exit function " style="filled" fillcolor=red]; - } - 21 -> {22}; - 22 -> {23}; + subgraph cluster_10 { + color=red + 21 [label="Enter function " style="filled" fillcolor=red]; + 22 [label="Delegated constructor call: super()"]; + 23 [label="Exit function " style="filled" fillcolor=red]; + } + 21 -> {22}; + 22 -> {23}; - subgraph cluster_12 { - color=red - 24 [label="Enter function getter" style="filled" fillcolor=red]; - 25 [label="Exit function getter" style="filled" fillcolor=red]; - } - 24 -> {25}; + subgraph cluster_11 { + color=red + 24 [label="Enter function getter" style="filled" fillcolor=red]; + 25 [label="Exit function getter" style="filled" fillcolor=red]; + } + 24 -> {25}; - subgraph cluster_13 { - color=red - 26 [label="Enter property" style="filled" fillcolor=red]; - 27 [label="Access variable R|/data|"]; - 28 [label="Exit property" style="filled" fillcolor=red]; - } - 26 -> {27}; - 27 -> {28}; - 28 -> {20} [color=green]; + subgraph cluster_12 { + color=red + 26 [label="Enter property" style="filled" fillcolor=red]; + 27 [label="Access variable R|/data|"]; + 28 [label="Exit property" style="filled" fillcolor=red]; + } + 26 -> {27}; + 27 -> {28}; + 28 -> {20} [color=green]; + subgraph cluster_13 { + color=red + 29 [label="Enter function fdata" style="filled" fillcolor=red]; subgraph cluster_14 { - color=red - 29 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_15 { - color=blue - 30 [label="Enter block"]; - 31 [label="Const: Null(null)"]; - 32 [label="Jump: ^fdata Null(null)"]; - 33 [label="Stub" style="filled" fillcolor=gray]; - 34 [label="Exit block" style="filled" fillcolor=gray]; - } - 35 [label="Exit function fdata" style="filled" fillcolor=red]; + color=blue + 30 [label="Enter block"]; + 31 [label="Const: Null(null)"]; + 32 [label="Jump: ^fdata Null(null)"]; + 33 [label="Stub" style="filled" fillcolor=gray]; + 34 [label="Exit block" style="filled" fillcolor=gray]; } - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {35}; - 32 -> {33} [style=dotted]; - 33 -> {34} [style=dotted]; - 34 -> {35} [style=dotted]; + 35 [label="Exit function fdata" style="filled" fillcolor=red]; + } + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {35}; + 32 -> {33} [style=dotted]; + 33 -> {34} [style=dotted]; + 34 -> {35} [style=dotted]; - subgraph cluster_16 { - color=red - 36 [label="Enter class QImplMutable" style="filled" fillcolor=red]; - subgraph cluster_17 { - color=blue - 37 [label="Part of class initialization"]; - 38 [label="Exit class QImplMutable" style="filled" fillcolor=red]; - } - 36 -> {37} [color=green]; - 37 -> {38} [style=dotted]; - 37 -> {46} [color=green]; - 37 -> {46} [style=dashed]; + subgraph cluster_15 { + color=red + 36 [label="Enter class QImplMutable" style="filled" fillcolor=red]; + 37 [label="Part of class initialization"]; + 38 [label="Exit class QImplMutable" style="filled" fillcolor=red]; + } + 36 -> {37} [color=green]; + 37 -> {38} [style=dotted]; + 37 -> {46} [color=green]; + 37 -> {46} [style=dashed]; - subgraph cluster_18 { - color=red - 39 [label="Enter function " style="filled" fillcolor=red]; - 40 [label="Delegated constructor call: super()"]; - 41 [label="Exit function " style="filled" fillcolor=red]; - } - 39 -> {40}; - 40 -> {41}; + subgraph cluster_16 { + color=red + 39 [label="Enter function " style="filled" fillcolor=red]; + 40 [label="Delegated constructor call: super()"]; + 41 [label="Exit function " style="filled" fillcolor=red]; + } + 39 -> {40}; + 40 -> {41}; - subgraph cluster_19 { - color=red - 42 [label="Enter function getter" style="filled" fillcolor=red]; - 43 [label="Exit function getter" style="filled" fillcolor=red]; - } - 42 -> {43}; + subgraph cluster_17 { + color=red + 42 [label="Enter function getter" style="filled" fillcolor=red]; + 43 [label="Exit function getter" style="filled" fillcolor=red]; + } + 42 -> {43}; - subgraph cluster_20 { - color=red - 44 [label="Enter function setter" style="filled" fillcolor=red]; - 45 [label="Exit function setter" style="filled" fillcolor=red]; - } - 44 -> {45}; + subgraph cluster_18 { + color=red + 44 [label="Enter function setter" style="filled" fillcolor=red]; + 45 [label="Exit function setter" style="filled" fillcolor=red]; + } + 44 -> {45}; - subgraph cluster_21 { - color=red - 46 [label="Enter property" style="filled" fillcolor=red]; - 47 [label="Access variable R|/data|"]; - 48 [label="Exit property" style="filled" fillcolor=red]; - } - 46 -> {47}; - 47 -> {48}; - 48 -> {38} [color=green]; + subgraph cluster_19 { + color=red + 46 [label="Enter property" style="filled" fillcolor=red]; + 47 [label="Access variable R|/data|"]; + 48 [label="Exit property" style="filled" fillcolor=red]; + } + 46 -> {47}; + 47 -> {48}; + 48 -> {38} [color=green]; - subgraph cluster_22 { - color=red - 49 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_23 { - color=blue - 50 [label="Enter block"]; - 51 [label="Const: Null(null)"]; - 52 [label="Jump: ^fdata Null(null)"]; - 53 [label="Stub" style="filled" fillcolor=gray]; - 54 [label="Exit block" style="filled" fillcolor=gray]; - } - 55 [label="Exit function fdata" style="filled" fillcolor=red]; - } - 49 -> {50}; - 50 -> {51}; - 51 -> {52}; - 52 -> {55}; - 52 -> {53} [style=dotted]; - 53 -> {54} [style=dotted]; - 54 -> {55} [style=dotted]; + subgraph cluster_20 { + color=red + 49 [label="Enter function fdata" style="filled" fillcolor=red]; + subgraph cluster_21 { + color=blue + 50 [label="Enter block"]; + 51 [label="Const: Null(null)"]; + 52 [label="Jump: ^fdata Null(null)"]; + 53 [label="Stub" style="filled" fillcolor=gray]; + 54 [label="Exit block" style="filled" fillcolor=gray]; + } + 55 [label="Exit function fdata" style="filled" fillcolor=red]; + } + 49 -> {50}; + 50 -> {51}; + 51 -> {52}; + 52 -> {55}; + 52 -> {53} [style=dotted]; + 53 -> {54} [style=dotted]; + 54 -> {55} [style=dotted]; - subgraph cluster_24 { - color=red - 56 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; - 57 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; - } - 56 -> {57} [color=green]; + subgraph cluster_22 { + color=red + 56 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; + 57 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; + } + 56 -> {57} [color=green]; - subgraph cluster_25 { - color=red - 58 [label="Enter function " style="filled" fillcolor=red]; - 59 [label="Delegated constructor call: super()"]; - 60 [label="Exit function " style="filled" fillcolor=red]; - } - 58 -> {59}; - 59 -> {60}; + subgraph cluster_23 { + color=red + 58 [label="Enter function " style="filled" fillcolor=red]; + 59 [label="Delegated constructor call: super()"]; + 60 [label="Exit function " style="filled" fillcolor=red]; + } + 58 -> {59}; + 59 -> {60}; - subgraph cluster_26 { - color=red - 61 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_27 { - color=blue - 62 [label="Enter block"]; - 63 [label="Const: Null(null)"]; - 64 [label="Jump: ^ Null(null)"]; - 65 [label="Stub" style="filled" fillcolor=gray]; - 66 [label="Exit block" style="filled" fillcolor=gray]; - } - 67 [label="Exit function getter" style="filled" fillcolor=red]; - } - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {67}; - 64 -> {65} [style=dotted]; - 65 -> {66} [style=dotted]; - 66 -> {67} [style=dotted]; + subgraph cluster_24 { + color=red + 61 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_25 { + color=blue + 62 [label="Enter block"]; + 63 [label="Const: Null(null)"]; + 64 [label="Jump: ^ Null(null)"]; + 65 [label="Stub" style="filled" fillcolor=gray]; + 66 [label="Exit block" style="filled" fillcolor=gray]; + } + 67 [label="Exit function getter" style="filled" fillcolor=red]; + } + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; + 64 -> {67}; + 64 -> {65} [style=dotted]; + 65 -> {66} [style=dotted]; + 66 -> {67} [style=dotted]; - subgraph cluster_28 { - color=red - 68 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_29 { - color=blue - 69 [label="Enter block"]; - 70 [label="Const: Null(null)"]; - 71 [label="Jump: ^fdata Null(null)"]; - 72 [label="Stub" style="filled" fillcolor=gray]; - 73 [label="Exit block" style="filled" fillcolor=gray]; - } - 74 [label="Exit function fdata" style="filled" fillcolor=red]; - } - 68 -> {69}; - 69 -> {70}; - 70 -> {71}; - 71 -> {74}; - 71 -> {72} [style=dotted]; - 72 -> {73} [style=dotted]; - 73 -> {74} [style=dotted]; + subgraph cluster_26 { + color=red + 68 [label="Enter function fdata" style="filled" fillcolor=red]; + subgraph cluster_27 { + color=blue + 69 [label="Enter block"]; + 70 [label="Const: Null(null)"]; + 71 [label="Jump: ^fdata Null(null)"]; + 72 [label="Stub" style="filled" fillcolor=gray]; + 73 [label="Exit block" style="filled" fillcolor=gray]; + } + 74 [label="Exit function fdata" style="filled" fillcolor=red]; + } + 68 -> {69}; + 69 -> {70}; + 70 -> {71}; + 71 -> {74}; + 71 -> {72} [style=dotted]; + 72 -> {73} [style=dotted]; + 73 -> {74} [style=dotted]; + subgraph cluster_28 { + color=red + 75 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_29 { + color=blue + 76 [label="Enter block"]; subgraph cluster_30 { - color=red - 75 [label="Enter function test_1" style="filled" fillcolor=red]; + color=blue + 77 [label="Enter when"]; subgraph cluster_31 { color=blue - 76 [label="Enter block"]; - subgraph cluster_32 { - color=blue - 77 [label="Enter when"]; - subgraph cluster_33 { - color=blue - 78 [label="Enter when branch condition "]; - 79 [label="Access variable R|/x|"]; - 80 [label="Const: Null(null)"]; - 81 [label="Equality operator !="]; - 82 [label="Exit when branch condition"]; - } - subgraph cluster_34 { - color=blue - 83 [label="Enter when branch condition else"]; - 84 [label="Exit when branch condition"]; - } - 85 [label="Enter when branch result"]; - subgraph cluster_35 { - color=blue - 86 [label="Enter block"]; - 87 [label="Access variable R|/x|"]; - 88 [label="Function call: R|/x|.#()"]; - 89 [label="Exit block"]; - } - 90 [label="Exit when branch result"]; - 91 [label="Enter when branch result"]; - subgraph cluster_36 { - color=blue - 92 [label="Enter block"]; - 93 [label="Access variable R|/x|"]; - 94 [label="Function call: R|/x|.R|/A.foo|()"]; - 95 [label="Exit block"]; - } - 96 [label="Exit when branch result"]; - 97 [label="Exit when"]; - } - 98 [label="Access variable R|/x|"]; - 99 [label="Function call: R|/x|.#()"]; - 100 [label="Exit block"]; + 78 [label="Enter when branch condition "]; + 79 [label="Access variable R|/x|"]; + 80 [label="Const: Null(null)"]; + 81 [label="Equality operator !="]; + 82 [label="Exit when branch condition"]; } - 101 [label="Exit function test_1" style="filled" fillcolor=red]; + subgraph cluster_32 { + color=blue + 83 [label="Enter when branch condition else"]; + 84 [label="Exit when branch condition"]; + } + 85 [label="Enter when branch result"]; + subgraph cluster_33 { + color=blue + 86 [label="Enter block"]; + 87 [label="Access variable R|/x|"]; + 88 [label="Function call: R|/x|.#()"]; + 89 [label="Exit block"]; + } + 90 [label="Exit when branch result"]; + 91 [label="Enter when branch result"]; + subgraph cluster_34 { + color=blue + 92 [label="Enter block"]; + 93 [label="Access variable R|/x|"]; + 94 [label="Function call: R|/x|.R|/A.foo|()"]; + 95 [label="Exit block"]; + } + 96 [label="Exit when branch result"]; + 97 [label="Exit when"]; } - 75 -> {76}; - 76 -> {77}; - 77 -> {78}; - 78 -> {79}; - 79 -> {80}; - 80 -> {81}; - 81 -> {82}; - 82 -> {91 83}; - 83 -> {84}; - 84 -> {85}; - 85 -> {86}; - 86 -> {87}; - 87 -> {88}; - 88 -> {89}; - 89 -> {90}; - 90 -> {97}; - 91 -> {92}; - 92 -> {93}; - 93 -> {94}; - 94 -> {95}; - 95 -> {96}; - 96 -> {97}; - 97 -> {98}; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; + 98 [label="Access variable R|/x|"]; + 99 [label="Function call: R|/x|.#()"]; + 100 [label="Exit block"]; + } + 101 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 75 -> {76}; + 76 -> {77}; + 77 -> {78}; + 78 -> {79}; + 79 -> {80}; + 80 -> {81}; + 81 -> {82}; + 82 -> {91 83}; + 83 -> {84}; + 84 -> {85}; + 85 -> {86}; + 86 -> {87}; + 87 -> {88}; + 88 -> {89}; + 89 -> {90}; + 90 -> {97}; + 91 -> {92}; + 92 -> {93}; + 93 -> {94}; + 94 -> {95}; + 95 -> {96}; + 96 -> {97}; + 97 -> {98}; + 98 -> {99}; + 99 -> {100}; + 100 -> {101}; + subgraph cluster_35 { + color=red + 102 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_36 { + color=blue + 103 [label="Enter block"]; subgraph cluster_37 { - color=red - 102 [label="Enter function test_2" style="filled" fillcolor=red]; + color=blue + 104 [label="Enter when"]; subgraph cluster_38 { color=blue - 103 [label="Enter block"]; - subgraph cluster_39 { - color=blue - 104 [label="Enter when"]; - subgraph cluster_40 { - color=blue - 105 [label="Enter when branch condition "]; - 106 [label="Access variable R|/x|"]; - 107 [label="Const: Null(null)"]; - 108 [label="Equality operator =="]; - 109 [label="Exit when branch condition"]; - } - subgraph cluster_41 { - color=blue - 110 [label="Enter when branch condition else"]; - 111 [label="Exit when branch condition"]; - } - 112 [label="Enter when branch result"]; - subgraph cluster_42 { - color=blue - 113 [label="Enter block"]; - 114 [label="Access variable R|/x|"]; - 115 [label="Function call: R|/x|.R|/A.foo|()"]; - 116 [label="Exit block"]; - } - 117 [label="Exit when branch result"]; - 118 [label="Enter when branch result"]; - subgraph cluster_43 { - color=blue - 119 [label="Enter block"]; - 120 [label="Access variable R|/x|"]; - 121 [label="Function call: R|/x|.#()"]; - 122 [label="Exit block"]; - } - 123 [label="Exit when branch result"]; - 124 [label="Exit when"]; - } - 125 [label="Access variable R|/x|"]; - 126 [label="Function call: R|/x|.#()"]; - 127 [label="Exit block"]; + 105 [label="Enter when branch condition "]; + 106 [label="Access variable R|/x|"]; + 107 [label="Const: Null(null)"]; + 108 [label="Equality operator =="]; + 109 [label="Exit when branch condition"]; } - 128 [label="Exit function test_2" style="filled" fillcolor=red]; - } - 102 -> {103}; - 103 -> {104}; - 104 -> {105}; - 105 -> {106}; - 106 -> {107}; - 107 -> {108}; - 108 -> {109}; - 109 -> {118 110}; - 110 -> {111}; - 111 -> {112}; - 112 -> {113}; - 113 -> {114}; - 114 -> {115}; - 115 -> {116}; - 116 -> {117}; - 117 -> {124}; - 118 -> {119}; - 119 -> {120}; - 120 -> {121}; - 121 -> {122}; - 122 -> {123}; - 123 -> {124}; - 124 -> {125}; - 125 -> {126}; - 126 -> {127}; - 127 -> {128}; - - subgraph cluster_44 { - color=red - 129 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_45 { + subgraph cluster_39 { color=blue - 130 [label="Enter block"]; - 131 [label="Access variable R|/x|"]; - 132 [label="Exit lhs of ?:"]; - 133 [label="Enter rhs of ?:"]; - 134 [label="Jump: ^test_3 Unit"]; - 135 [label="Stub" style="filled" fillcolor=gray]; - 136 [label="Lhs of ?: is not null"]; - 137 [label="Exit ?:"]; - 138 [label="Access variable R|/x|"]; - 139 [label="Function call: R|/x|.R|/A.foo|()"]; - 140 [label="Exit block"]; + 110 [label="Enter when branch condition else"]; + 111 [label="Exit when branch condition"]; } - 141 [label="Exit function test_3" style="filled" fillcolor=red]; + 112 [label="Enter when branch result"]; + subgraph cluster_40 { + color=blue + 113 [label="Enter block"]; + 114 [label="Access variable R|/x|"]; + 115 [label="Function call: R|/x|.R|/A.foo|()"]; + 116 [label="Exit block"]; + } + 117 [label="Exit when branch result"]; + 118 [label="Enter when branch result"]; + subgraph cluster_41 { + color=blue + 119 [label="Enter block"]; + 120 [label="Access variable R|/x|"]; + 121 [label="Function call: R|/x|.#()"]; + 122 [label="Exit block"]; + } + 123 [label="Exit when branch result"]; + 124 [label="Exit when"]; } - 129 -> {130}; - 130 -> {131}; - 131 -> {132}; - 132 -> {136 133}; - 133 -> {134}; - 134 -> {141}; - 134 -> {135} [style=dotted]; - 135 -> {137} [style=dotted]; - 136 -> {137}; - 137 -> {138}; - 138 -> {139}; - 139 -> {140}; - 140 -> {141}; + 125 [label="Access variable R|/x|"]; + 126 [label="Function call: R|/x|.#()"]; + 127 [label="Exit block"]; + } + 128 [label="Exit function test_2" style="filled" fillcolor=red]; + } + 102 -> {103}; + 103 -> {104}; + 104 -> {105}; + 105 -> {106}; + 106 -> {107}; + 107 -> {108}; + 108 -> {109}; + 109 -> {118 110}; + 110 -> {111}; + 111 -> {112}; + 112 -> {113}; + 113 -> {114}; + 114 -> {115}; + 115 -> {116}; + 116 -> {117}; + 117 -> {124}; + 118 -> {119}; + 119 -> {120}; + 120 -> {121}; + 121 -> {122}; + 122 -> {123}; + 123 -> {124}; + 124 -> {125}; + 125 -> {126}; + 126 -> {127}; + 127 -> {128}; + subgraph cluster_42 { + color=red + 129 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_43 { + color=blue + 130 [label="Enter block"]; + 131 [label="Access variable R|/x|"]; + 132 [label="Exit lhs of ?:"]; + 133 [label="Enter rhs of ?:"]; + 134 [label="Jump: ^test_3 Unit"]; + 135 [label="Stub" style="filled" fillcolor=gray]; + 136 [label="Lhs of ?: is not null"]; + 137 [label="Exit ?:"]; + 138 [label="Access variable R|/x|"]; + 139 [label="Function call: R|/x|.R|/A.foo|()"]; + 140 [label="Exit block"]; + } + 141 [label="Exit function test_3" style="filled" fillcolor=red]; + } + 129 -> {130}; + 130 -> {131}; + 131 -> {132}; + 132 -> {136 133}; + 133 -> {134}; + 134 -> {141}; + 134 -> {135} [style=dotted]; + 135 -> {137} [style=dotted]; + 136 -> {137}; + 137 -> {138}; + 138 -> {139}; + 139 -> {140}; + 140 -> {141}; + + subgraph cluster_44 { + color=red + 142 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_45 { + color=blue + 143 [label="Enter block"]; subgraph cluster_46 { - color=red - 142 [label="Enter function test_4" style="filled" fillcolor=red]; + color=blue + 144 [label="Enter when"]; subgraph cluster_47 { color=blue - 143 [label="Enter block"]; - subgraph cluster_48 { - color=blue - 144 [label="Enter when"]; - subgraph cluster_49 { - color=blue - 145 [label="Enter when branch condition "]; - 146 [label="Access variable R|/x|"]; - 147 [label="Enter safe call"]; - 148 [label="Function call: $subj$.R|/A.getA|()"]; - 149 [label="Exit safe call"]; - 150 [label="Const: Null(null)"]; - 151 [label="Equality operator =="]; - 152 [label="Exit when branch condition"]; - } - 153 [label="Synthetic else branch"]; - 154 [label="Enter when branch result"]; - subgraph cluster_50 { - color=blue - 155 [label="Enter block"]; - 156 [label="Jump: ^test_4 Unit"]; - 157 [label="Stub" style="filled" fillcolor=gray]; - 158 [label="Exit block" style="filled" fillcolor=gray]; - } - 159 [label="Exit when branch result" style="filled" fillcolor=gray]; - 160 [label="Exit when"]; - } - 161 [label="Access variable R|/x|"]; - 162 [label="Function call: R|/x|.R|/A.foo|()"]; - 163 [label="Exit block"]; + 145 [label="Enter when branch condition "]; + 146 [label="Access variable R|/x|"]; + 147 [label="Enter safe call"]; + 148 [label="Function call: $subj$.R|/A.getA|()"]; + 149 [label="Exit safe call"]; + 150 [label="Const: Null(null)"]; + 151 [label="Equality operator =="]; + 152 [label="Exit when branch condition"]; } - 164 [label="Exit function test_4" style="filled" fillcolor=red]; + 153 [label="Synthetic else branch"]; + 154 [label="Enter when branch result"]; + subgraph cluster_48 { + color=blue + 155 [label="Enter block"]; + 156 [label="Jump: ^test_4 Unit"]; + 157 [label="Stub" style="filled" fillcolor=gray]; + 158 [label="Exit block" style="filled" fillcolor=gray]; + } + 159 [label="Exit when branch result" style="filled" fillcolor=gray]; + 160 [label="Exit when"]; } - 142 -> {143}; - 143 -> {144}; - 144 -> {145}; - 145 -> {146}; - 146 -> {147 149}; - 147 -> {148}; - 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - 151 -> {152}; - 152 -> {154 153}; - 153 -> {160}; - 154 -> {155}; - 155 -> {156}; - 156 -> {164}; - 156 -> {157} [style=dotted]; - 157 -> {158} [style=dotted]; - 158 -> {159} [style=dotted]; - 159 -> {160} [style=dotted]; - 160 -> {161}; - 161 -> {162}; - 162 -> {163}; - 163 -> {164}; + 161 [label="Access variable R|/x|"]; + 162 [label="Function call: R|/x|.R|/A.foo|()"]; + 163 [label="Exit block"]; + } + 164 [label="Exit function test_4" style="filled" fillcolor=red]; + } + 142 -> {143}; + 143 -> {144}; + 144 -> {145}; + 145 -> {146}; + 146 -> {147 149}; + 147 -> {148}; + 148 -> {149}; + 149 -> {150}; + 150 -> {151}; + 151 -> {152}; + 152 -> {154 153}; + 153 -> {160}; + 154 -> {155}; + 155 -> {156}; + 156 -> {164}; + 156 -> {157} [style=dotted]; + 157 -> {158} [style=dotted]; + 158 -> {159} [style=dotted]; + 159 -> {160} [style=dotted]; + 160 -> {161}; + 161 -> {162}; + 162 -> {163}; + 163 -> {164}; + subgraph cluster_49 { + color=red + 165 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_50 { + color=blue + 166 [label="Enter block"]; subgraph cluster_51 { - color=red - 165 [label="Enter function test_5" style="filled" fillcolor=red]; + color=blue + 167 [label="Enter when"]; subgraph cluster_52 { color=blue - 166 [label="Enter block"]; - subgraph cluster_53 { - color=blue - 167 [label="Enter when"]; - subgraph cluster_54 { - color=blue - 168 [label="Enter when branch condition "]; - 169 [label="Access variable R|/q|"]; - 170 [label="Enter safe call"]; - 171 [label="Access variable R|/Q.data|"]; - 172 [label="Exit safe call"]; - 173 [label="Enter safe call"]; - 174 [label="Access variable R|/MyData.s|"]; - 175 [label="Exit safe call"]; - 176 [label="Enter safe call"]; - 177 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 178 [label="Exit safe call"]; - 179 [label="Const: Null(null)"]; - 180 [label="Equality operator !="]; - 181 [label="Exit when branch condition"]; - } - 182 [label="Synthetic else branch"]; - 183 [label="Enter when branch result"]; - subgraph cluster_55 { - color=blue - 184 [label="Enter block"]; - 185 [label="Access variable R|/q|"]; - 186 [label="Access variable R|/Q.data|"]; - 187 [label="Access variable R|/q|"]; - 188 [label="Access variable R|/Q.data|"]; - 189 [label="Access variable #"]; - 190 [label="Access variable R|/q|"]; - 191 [label="Access variable R|/Q.data|"]; - 192 [label="Access variable #"]; - 193 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; - 194 [label="Exit block"]; - } - 195 [label="Exit when branch result"]; - 196 [label="Exit when"]; - } - 197 [label="Exit block"]; + 168 [label="Enter when branch condition "]; + 169 [label="Access variable R|/q|"]; + 170 [label="Enter safe call"]; + 171 [label="Access variable R|/Q.data|"]; + 172 [label="Exit safe call"]; + 173 [label="Enter safe call"]; + 174 [label="Access variable R|/MyData.s|"]; + 175 [label="Exit safe call"]; + 176 [label="Enter safe call"]; + 177 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 178 [label="Exit safe call"]; + 179 [label="Const: Null(null)"]; + 180 [label="Equality operator !="]; + 181 [label="Exit when branch condition"]; } - 198 [label="Exit function test_5" style="filled" fillcolor=red]; - } - 165 -> {166}; - 166 -> {167}; - 167 -> {168}; - 168 -> {169}; - 169 -> {170 172}; - 170 -> {171}; - 171 -> {172}; - 172 -> {173 175}; - 173 -> {174}; - 174 -> {175}; - 175 -> {176 178}; - 176 -> {177}; - 177 -> {178}; - 178 -> {179}; - 179 -> {180}; - 180 -> {181}; - 181 -> {183 182}; - 182 -> {196}; - 183 -> {184}; - 184 -> {185}; - 185 -> {186}; - 186 -> {187}; - 187 -> {188}; - 188 -> {189}; - 189 -> {190}; - 190 -> {191}; - 191 -> {192}; - 192 -> {193}; - 193 -> {194}; - 194 -> {195}; - 195 -> {196}; - 196 -> {197}; - 197 -> {198}; - - subgraph cluster_56 { - color=red - 199 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_57 { + 182 [label="Synthetic else branch"]; + 183 [label="Enter when branch result"]; + subgraph cluster_53 { color=blue - 200 [label="Enter block"]; - 201 [label="Access variable R|/q|"]; - 202 [label="Enter safe call"]; - 203 [label="Access variable R|/Q.data|"]; - 204 [label="Exit safe call"]; - 205 [label="Enter safe call"]; - 206 [label="Access variable R|/MyData.s|"]; - 207 [label="Exit safe call"]; - 208 [label="Enter safe call"]; - 209 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 210 [label="Exit safe call"]; - 211 [label="Exit lhs of ?:"]; - 212 [label="Enter rhs of ?:"]; - 213 [label="Jump: ^test_6 Unit"]; - 214 [label="Stub" style="filled" fillcolor=gray]; - 215 [label="Lhs of ?: is not null"]; - 216 [label="Exit ?:"]; - 217 [label="Access variable R|/q|"]; - 218 [label="Access variable R|/Q.data|"]; - 219 [label="Access variable R|/q|"]; - 220 [label="Access variable R|/Q.data|"]; - 221 [label="Access variable #"]; - 222 [label="Access variable R|/q|"]; - 223 [label="Access variable R|/Q.data|"]; - 224 [label="Access variable #"]; - 225 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; - 226 [label="Exit block"]; + 184 [label="Enter block"]; + 185 [label="Access variable R|/q|"]; + 186 [label="Access variable R|/Q.data|"]; + 187 [label="Access variable R|/q|"]; + 188 [label="Access variable R|/Q.data|"]; + 189 [label="Access variable #"]; + 190 [label="Access variable R|/q|"]; + 191 [label="Access variable R|/Q.data|"]; + 192 [label="Access variable #"]; + 193 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; + 194 [label="Exit block"]; } - 227 [label="Exit function test_6" style="filled" fillcolor=red]; + 195 [label="Exit when branch result"]; + 196 [label="Exit when"]; } - 199 -> {200}; - 200 -> {201}; - 201 -> {202 204}; - 202 -> {203}; - 203 -> {204}; - 204 -> {205 207}; - 205 -> {206}; - 206 -> {207}; - 207 -> {208 210}; - 208 -> {209}; - 209 -> {210}; - 210 -> {211}; - 211 -> {215 212}; - 212 -> {213}; - 213 -> {227}; - 213 -> {214} [style=dotted]; - 214 -> {216} [style=dotted]; - 215 -> {216}; - 216 -> {217}; - 217 -> {218}; - 218 -> {219}; - 219 -> {220}; - 220 -> {221}; - 221 -> {222}; - 222 -> {223}; - 223 -> {224}; - 224 -> {225}; - 225 -> {226}; - 226 -> {227}; + 197 [label="Exit block"]; + } + 198 [label="Exit function test_5" style="filled" fillcolor=red]; + } + 165 -> {166}; + 166 -> {167}; + 167 -> {168}; + 168 -> {169}; + 169 -> {170 172}; + 170 -> {171}; + 171 -> {172}; + 172 -> {173 175}; + 173 -> {174}; + 174 -> {175}; + 175 -> {176 178}; + 176 -> {177}; + 177 -> {178}; + 178 -> {179}; + 179 -> {180}; + 180 -> {181}; + 181 -> {183 182}; + 182 -> {196}; + 183 -> {184}; + 184 -> {185}; + 185 -> {186}; + 186 -> {187}; + 187 -> {188}; + 188 -> {189}; + 189 -> {190}; + 190 -> {191}; + 191 -> {192}; + 192 -> {193}; + 193 -> {194}; + 194 -> {195}; + 195 -> {196}; + 196 -> {197}; + 197 -> {198}; + subgraph cluster_54 { + color=red + 199 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_55 { + color=blue + 200 [label="Enter block"]; + 201 [label="Access variable R|/q|"]; + 202 [label="Enter safe call"]; + 203 [label="Access variable R|/Q.data|"]; + 204 [label="Exit safe call"]; + 205 [label="Enter safe call"]; + 206 [label="Access variable R|/MyData.s|"]; + 207 [label="Exit safe call"]; + 208 [label="Enter safe call"]; + 209 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 210 [label="Exit safe call"]; + 211 [label="Exit lhs of ?:"]; + 212 [label="Enter rhs of ?:"]; + 213 [label="Jump: ^test_6 Unit"]; + 214 [label="Stub" style="filled" fillcolor=gray]; + 215 [label="Lhs of ?: is not null"]; + 216 [label="Exit ?:"]; + 217 [label="Access variable R|/q|"]; + 218 [label="Access variable R|/Q.data|"]; + 219 [label="Access variable R|/q|"]; + 220 [label="Access variable R|/Q.data|"]; + 221 [label="Access variable #"]; + 222 [label="Access variable R|/q|"]; + 223 [label="Access variable R|/Q.data|"]; + 224 [label="Access variable #"]; + 225 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; + 226 [label="Exit block"]; + } + 227 [label="Exit function test_6" style="filled" fillcolor=red]; + } + 199 -> {200}; + 200 -> {201}; + 201 -> {202 204}; + 202 -> {203}; + 203 -> {204}; + 204 -> {205 207}; + 205 -> {206}; + 206 -> {207}; + 207 -> {208 210}; + 208 -> {209}; + 209 -> {210}; + 210 -> {211}; + 211 -> {215 212}; + 212 -> {213}; + 213 -> {227}; + 213 -> {214} [style=dotted]; + 214 -> {216} [style=dotted]; + 215 -> {216}; + 216 -> {217}; + 217 -> {218}; + 218 -> {219}; + 219 -> {220}; + 220 -> {221}; + 221 -> {222}; + 222 -> {223}; + 223 -> {224}; + 224 -> {225}; + 225 -> {226}; + 226 -> {227}; + + subgraph cluster_56 { + color=red + 228 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_57 { + color=blue + 229 [label="Enter block"]; subgraph cluster_58 { - color=red - 228 [label="Enter function test_7" style="filled" fillcolor=red]; + color=blue + 230 [label="Enter when"]; subgraph cluster_59 { color=blue - 229 [label="Enter block"]; - subgraph cluster_60 { - color=blue - 230 [label="Enter when"]; - subgraph cluster_61 { - color=blue - 231 [label="Enter when branch condition "]; - 232 [label="Access variable R|/q|"]; - 233 [label="Enter safe call"]; - 234 [label="Function call: $subj$.R|/Q.fdata|()"]; - 235 [label="Exit safe call"]; - 236 [label="Enter safe call"]; - 237 [label="Function call: $subj$.R|/MyData.fs|()"]; - 238 [label="Exit safe call"]; - 239 [label="Enter safe call"]; - 240 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 241 [label="Exit safe call"]; - 242 [label="Const: Null(null)"]; - 243 [label="Equality operator !="]; - 244 [label="Exit when branch condition"]; - } - 245 [label="Synthetic else branch"]; - 246 [label="Enter when branch result"]; - subgraph cluster_62 { - color=blue - 247 [label="Enter block"]; - 248 [label="Access variable R|/q|"]; - 249 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 250 [label="Access variable R|/q|"]; - 251 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 252 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 253 [label="Access variable R|/q|"]; - 254 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 255 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 256 [label="Function call: R|/q|.R|/Q.fdata|().#().R|kotlin/Int.inc|()"]; - 257 [label="Exit block"]; - } - 258 [label="Exit when branch result"]; - 259 [label="Exit when"]; - } - 260 [label="Exit block"]; + 231 [label="Enter when branch condition "]; + 232 [label="Access variable R|/q|"]; + 233 [label="Enter safe call"]; + 234 [label="Function call: $subj$.R|/Q.fdata|()"]; + 235 [label="Exit safe call"]; + 236 [label="Enter safe call"]; + 237 [label="Function call: $subj$.R|/MyData.fs|()"]; + 238 [label="Exit safe call"]; + 239 [label="Enter safe call"]; + 240 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 241 [label="Exit safe call"]; + 242 [label="Const: Null(null)"]; + 243 [label="Equality operator !="]; + 244 [label="Exit when branch condition"]; } - 261 [label="Exit function test_7" style="filled" fillcolor=red]; + 245 [label="Synthetic else branch"]; + 246 [label="Enter when branch result"]; + subgraph cluster_60 { + color=blue + 247 [label="Enter block"]; + 248 [label="Access variable R|/q|"]; + 249 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 250 [label="Access variable R|/q|"]; + 251 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 252 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 253 [label="Access variable R|/q|"]; + 254 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 255 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 256 [label="Function call: R|/q|.R|/Q.fdata|().#().R|kotlin/Int.inc|()"]; + 257 [label="Exit block"]; + } + 258 [label="Exit when branch result"]; + 259 [label="Exit when"]; } - 228 -> {229}; - 229 -> {230}; - 230 -> {231}; - 231 -> {232}; - 232 -> {233 235}; - 233 -> {234}; - 234 -> {235}; - 235 -> {236 238}; - 236 -> {237}; - 237 -> {238}; - 238 -> {239 241}; - 239 -> {240}; - 240 -> {241}; - 241 -> {242}; - 242 -> {243}; - 243 -> {244}; - 244 -> {246 245}; - 245 -> {259}; - 246 -> {247}; - 247 -> {248}; - 248 -> {249}; - 249 -> {250}; - 250 -> {251}; - 251 -> {252}; - 252 -> {253}; - 253 -> {254}; - 254 -> {255}; - 255 -> {256}; - 256 -> {257}; - 257 -> {258}; - 258 -> {259}; - 259 -> {260}; - 260 -> {261}; + 260 [label="Exit block"]; + } + 261 [label="Exit function test_7" style="filled" fillcolor=red]; + } + 228 -> {229}; + 229 -> {230}; + 230 -> {231}; + 231 -> {232}; + 232 -> {233 235}; + 233 -> {234}; + 234 -> {235}; + 235 -> {236 238}; + 236 -> {237}; + 237 -> {238}; + 238 -> {239 241}; + 239 -> {240}; + 240 -> {241}; + 241 -> {242}; + 242 -> {243}; + 243 -> {244}; + 244 -> {246 245}; + 245 -> {259}; + 246 -> {247}; + 247 -> {248}; + 248 -> {249}; + 249 -> {250}; + 250 -> {251}; + 251 -> {252}; + 252 -> {253}; + 253 -> {254}; + 254 -> {255}; + 255 -> {256}; + 256 -> {257}; + 257 -> {258}; + 258 -> {259}; + 259 -> {260}; + 260 -> {261}; + subgraph cluster_61 { + color=red + 262 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_62 { + color=blue + 263 [label="Enter block"]; subgraph cluster_63 { - color=red - 262 [label="Enter function test_8" style="filled" fillcolor=red]; + color=blue + 264 [label="Enter when"]; subgraph cluster_64 { color=blue - 263 [label="Enter block"]; - subgraph cluster_65 { - color=blue - 264 [label="Enter when"]; - subgraph cluster_66 { - color=blue - 265 [label="Enter when branch condition "]; - 266 [label="Access variable R|/b|"]; - 267 [label="Const: Boolean(true)"]; - 268 [label="Equality operator =="]; - 269 [label="Exit when branch condition"]; - } - 270 [label="Synthetic else branch"]; - 271 [label="Enter when branch result"]; - subgraph cluster_67 { - color=blue - 272 [label="Enter block"]; - 273 [label="Access variable R|/b|"]; - 274 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 275 [label="Exit block"]; - } - 276 [label="Exit when branch result"]; - 277 [label="Exit when"]; - } - 278 [label="Exit block"]; + 265 [label="Enter when branch condition "]; + 266 [label="Access variable R|/b|"]; + 267 [label="Const: Boolean(true)"]; + 268 [label="Equality operator =="]; + 269 [label="Exit when branch condition"]; } - 279 [label="Exit function test_8" style="filled" fillcolor=red]; + 270 [label="Synthetic else branch"]; + 271 [label="Enter when branch result"]; + subgraph cluster_65 { + color=blue + 272 [label="Enter block"]; + 273 [label="Access variable R|/b|"]; + 274 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 275 [label="Exit block"]; + } + 276 [label="Exit when branch result"]; + 277 [label="Exit when"]; } - 262 -> {263}; - 263 -> {264}; - 264 -> {265}; - 265 -> {266}; - 266 -> {267}; - 267 -> {268}; - 268 -> {269}; - 269 -> {271 270}; - 270 -> {277}; - 271 -> {272}; - 272 -> {273}; - 273 -> {274}; - 274 -> {275}; - 275 -> {276}; - 276 -> {277}; - 277 -> {278}; - 278 -> {279}; + 278 [label="Exit block"]; + } + 279 [label="Exit function test_8" style="filled" fillcolor=red]; + } + 262 -> {263}; + 263 -> {264}; + 264 -> {265}; + 265 -> {266}; + 266 -> {267}; + 267 -> {268}; + 268 -> {269}; + 269 -> {271 270}; + 270 -> {277}; + 271 -> {272}; + 272 -> {273}; + 273 -> {274}; + 274 -> {275}; + 275 -> {276}; + 276 -> {277}; + 277 -> {278}; + 278 -> {279}; + subgraph cluster_66 { + color=red + 280 [label="Enter function test_9" style="filled" fillcolor=red]; + subgraph cluster_67 { + color=blue + 281 [label="Enter block"]; subgraph cluster_68 { - color=red - 280 [label="Enter function test_9" style="filled" fillcolor=red]; + color=blue + 282 [label="Enter when"]; subgraph cluster_69 { color=blue - 281 [label="Enter block"]; - subgraph cluster_70 { - color=blue - 282 [label="Enter when"]; - subgraph cluster_71 { - color=blue - 283 [label="Enter when branch condition "]; - 284 [label="Access variable R|/a|"]; - 285 [label="Access variable R|/b|"]; - 286 [label="Equality operator =="]; - 287 [label="Exit when branch condition"]; - } - 288 [label="Synthetic else branch"]; - 289 [label="Enter when branch result"]; - subgraph cluster_72 { - color=blue - 290 [label="Enter block"]; - 291 [label="Access variable R|/b|"]; - 292 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 293 [label="Exit block"]; - } - 294 [label="Exit when branch result"]; - 295 [label="Exit when"]; - } - 296 [label="Access variable R|/b|"]; - 297 [label="Function call: R|/b|.#()"]; - subgraph cluster_73 { - color=blue - 298 [label="Enter when"]; - subgraph cluster_74 { - color=blue - 299 [label="Enter when branch condition "]; - 300 [label="Access variable R|/a|"]; - 301 [label="Access variable R|/b|"]; - 302 [label="Equality operator ==="]; - 303 [label="Exit when branch condition"]; - } - 304 [label="Synthetic else branch"]; - 305 [label="Enter when branch result"]; - subgraph cluster_75 { - color=blue - 306 [label="Enter block"]; - 307 [label="Access variable R|/b|"]; - 308 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 309 [label="Exit block"]; - } - 310 [label="Exit when branch result"]; - 311 [label="Exit when"]; - } - 312 [label="Access variable R|/b|"]; - 313 [label="Function call: R|/b|.#()"]; - subgraph cluster_76 { - color=blue - 314 [label="Enter when"]; - subgraph cluster_77 { - color=blue - 315 [label="Enter when branch condition "]; - 316 [label="Access variable R|/b|"]; - 317 [label="Access variable R|/a|"]; - 318 [label="Equality operator =="]; - 319 [label="Exit when branch condition"]; - } - 320 [label="Synthetic else branch"]; - 321 [label="Enter when branch result"]; - subgraph cluster_78 { - color=blue - 322 [label="Enter block"]; - 323 [label="Access variable R|/b|"]; - 324 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 325 [label="Exit block"]; - } - 326 [label="Exit when branch result"]; - 327 [label="Exit when"]; - } - 328 [label="Access variable R|/b|"]; - 329 [label="Function call: R|/b|.#()"]; - subgraph cluster_79 { - color=blue - 330 [label="Enter when"]; - subgraph cluster_80 { - color=blue - 331 [label="Enter when branch condition "]; - 332 [label="Access variable R|/b|"]; - 333 [label="Access variable R|/a|"]; - 334 [label="Equality operator ==="]; - 335 [label="Exit when branch condition"]; - } - 336 [label="Synthetic else branch"]; - 337 [label="Enter when branch result"]; - subgraph cluster_81 { - color=blue - 338 [label="Enter block"]; - 339 [label="Access variable R|/b|"]; - 340 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 341 [label="Exit block"]; - } - 342 [label="Exit when branch result"]; - 343 [label="Exit when"]; - } - 344 [label="Access variable R|/b|"]; - 345 [label="Function call: R|/b|.#()"]; - 346 [label="Exit block"]; + 283 [label="Enter when branch condition "]; + 284 [label="Access variable R|/a|"]; + 285 [label="Access variable R|/b|"]; + 286 [label="Equality operator =="]; + 287 [label="Exit when branch condition"]; } - 347 [label="Exit function test_9" style="filled" fillcolor=red]; + 288 [label="Synthetic else branch"]; + 289 [label="Enter when branch result"]; + subgraph cluster_70 { + color=blue + 290 [label="Enter block"]; + 291 [label="Access variable R|/b|"]; + 292 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 293 [label="Exit block"]; + } + 294 [label="Exit when branch result"]; + 295 [label="Exit when"]; } - 280 -> {281}; - 281 -> {282}; - 282 -> {283}; - 283 -> {284}; - 284 -> {285}; - 285 -> {286}; - 286 -> {287}; - 287 -> {289 288}; - 288 -> {295}; - 289 -> {290}; - 290 -> {291}; - 291 -> {292}; - 292 -> {293}; - 293 -> {294}; - 294 -> {295}; - 295 -> {296}; - 296 -> {297}; - 297 -> {298}; - 298 -> {299}; - 299 -> {300}; - 300 -> {301}; - 301 -> {302}; - 302 -> {303}; - 303 -> {305 304}; - 304 -> {311}; - 305 -> {306}; - 306 -> {307}; - 307 -> {308}; - 308 -> {309}; - 309 -> {310}; - 310 -> {311}; - 311 -> {312}; - 312 -> {313}; - 313 -> {314}; - 314 -> {315}; - 315 -> {316}; - 316 -> {317}; - 317 -> {318}; - 318 -> {319}; - 319 -> {321 320}; - 320 -> {327}; - 321 -> {322}; - 322 -> {323}; - 323 -> {324}; - 324 -> {325}; - 325 -> {326}; - 326 -> {327}; - 327 -> {328}; - 328 -> {329}; - 329 -> {330}; - 330 -> {331}; - 331 -> {332}; - 332 -> {333}; - 333 -> {334}; - 334 -> {335}; - 335 -> {337 336}; - 336 -> {343}; - 337 -> {338}; - 338 -> {339}; - 339 -> {340}; - 340 -> {341}; - 341 -> {342}; - 342 -> {343}; - 343 -> {344}; - 344 -> {345}; - 345 -> {346}; - 346 -> {347}; + 296 [label="Access variable R|/b|"]; + 297 [label="Function call: R|/b|.#()"]; + subgraph cluster_71 { + color=blue + 298 [label="Enter when"]; + subgraph cluster_72 { + color=blue + 299 [label="Enter when branch condition "]; + 300 [label="Access variable R|/a|"]; + 301 [label="Access variable R|/b|"]; + 302 [label="Equality operator ==="]; + 303 [label="Exit when branch condition"]; + } + 304 [label="Synthetic else branch"]; + 305 [label="Enter when branch result"]; + subgraph cluster_73 { + color=blue + 306 [label="Enter block"]; + 307 [label="Access variable R|/b|"]; + 308 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 309 [label="Exit block"]; + } + 310 [label="Exit when branch result"]; + 311 [label="Exit when"]; + } + 312 [label="Access variable R|/b|"]; + 313 [label="Function call: R|/b|.#()"]; + subgraph cluster_74 { + color=blue + 314 [label="Enter when"]; + subgraph cluster_75 { + color=blue + 315 [label="Enter when branch condition "]; + 316 [label="Access variable R|/b|"]; + 317 [label="Access variable R|/a|"]; + 318 [label="Equality operator =="]; + 319 [label="Exit when branch condition"]; + } + 320 [label="Synthetic else branch"]; + 321 [label="Enter when branch result"]; + subgraph cluster_76 { + color=blue + 322 [label="Enter block"]; + 323 [label="Access variable R|/b|"]; + 324 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 325 [label="Exit block"]; + } + 326 [label="Exit when branch result"]; + 327 [label="Exit when"]; + } + 328 [label="Access variable R|/b|"]; + 329 [label="Function call: R|/b|.#()"]; + subgraph cluster_77 { + color=blue + 330 [label="Enter when"]; + subgraph cluster_78 { + color=blue + 331 [label="Enter when branch condition "]; + 332 [label="Access variable R|/b|"]; + 333 [label="Access variable R|/a|"]; + 334 [label="Equality operator ==="]; + 335 [label="Exit when branch condition"]; + } + 336 [label="Synthetic else branch"]; + 337 [label="Enter when branch result"]; + subgraph cluster_79 { + color=blue + 338 [label="Enter block"]; + 339 [label="Access variable R|/b|"]; + 340 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 341 [label="Exit block"]; + } + 342 [label="Exit when branch result"]; + 343 [label="Exit when"]; + } + 344 [label="Access variable R|/b|"]; + 345 [label="Function call: R|/b|.#()"]; + 346 [label="Exit block"]; + } + 347 [label="Exit function test_9" style="filled" fillcolor=red]; + } + 280 -> {281}; + 281 -> {282}; + 282 -> {283}; + 283 -> {284}; + 284 -> {285}; + 285 -> {286}; + 286 -> {287}; + 287 -> {289 288}; + 288 -> {295}; + 289 -> {290}; + 290 -> {291}; + 291 -> {292}; + 292 -> {293}; + 293 -> {294}; + 294 -> {295}; + 295 -> {296}; + 296 -> {297}; + 297 -> {298}; + 298 -> {299}; + 299 -> {300}; + 300 -> {301}; + 301 -> {302}; + 302 -> {303}; + 303 -> {305 304}; + 304 -> {311}; + 305 -> {306}; + 306 -> {307}; + 307 -> {308}; + 308 -> {309}; + 309 -> {310}; + 310 -> {311}; + 311 -> {312}; + 312 -> {313}; + 313 -> {314}; + 314 -> {315}; + 315 -> {316}; + 316 -> {317}; + 317 -> {318}; + 318 -> {319}; + 319 -> {321 320}; + 320 -> {327}; + 321 -> {322}; + 322 -> {323}; + 323 -> {324}; + 324 -> {325}; + 325 -> {326}; + 326 -> {327}; + 327 -> {328}; + 328 -> {329}; + 329 -> {330}; + 330 -> {331}; + 331 -> {332}; + 332 -> {333}; + 333 -> {334}; + 334 -> {335}; + 335 -> {337 336}; + 336 -> {343}; + 337 -> {338}; + 338 -> {339}; + 339 -> {340}; + 340 -> {341}; + 341 -> {342}; + 342 -> {343}; + 343 -> {344}; + 344 -> {345}; + 345 -> {346}; + 346 -> {347}; + subgraph cluster_80 { + color=red + 348 [label="Enter function test_10" style="filled" fillcolor=red]; + subgraph cluster_81 { + color=blue + 349 [label="Enter block"]; subgraph cluster_82 { - color=red - 348 [label="Enter function test_10" style="filled" fillcolor=red]; + color=blue + 350 [label="Enter when"]; subgraph cluster_83 { color=blue - 349 [label="Enter block"]; - subgraph cluster_84 { - color=blue - 350 [label="Enter when"]; - subgraph cluster_85 { - color=blue - 351 [label="Enter when branch condition "]; - 352 [label="Access variable R|/a|"]; - 353 [label="Access variable R|/b|"]; - 354 [label="Equality operator =="]; - 355 [label="Exit when branch condition"]; - } - 356 [label="Synthetic else branch"]; - 357 [label="Enter when branch result"]; - subgraph cluster_86 { - color=blue - 358 [label="Enter block"]; - 359 [label="Access variable R|/b|"]; - 360 [label="Function call: R|/b|.#()"]; - 361 [label="Exit block"]; - } - 362 [label="Exit when branch result"]; - 363 [label="Exit when"]; - } - 364 [label="Access variable R|/b|"]; - 365 [label="Function call: R|/b|.#()"]; - subgraph cluster_87 { - color=blue - 366 [label="Enter when"]; - subgraph cluster_88 { - 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"]; - } - 372 [label="Synthetic else branch"]; - 373 [label="Enter when branch result"]; - subgraph cluster_89 { - color=blue - 374 [label="Enter block"]; - 375 [label="Access variable R|/b|"]; - 376 [label="Function call: R|/b|.#()"]; - 377 [label="Exit block"]; - } - 378 [label="Exit when branch result"]; - 379 [label="Exit when"]; - } - 380 [label="Access variable R|/b|"]; - 381 [label="Function call: R|/b|.#()"]; - subgraph cluster_90 { - color=blue - 382 [label="Enter when"]; - subgraph cluster_91 { - color=blue - 383 [label="Enter when branch condition "]; - 384 [label="Access variable R|/b|"]; - 385 [label="Access variable R|/a|"]; - 386 [label="Equality operator =="]; - 387 [label="Exit when branch condition"]; - } - 388 [label="Synthetic else branch"]; - 389 [label="Enter when branch result"]; - subgraph cluster_92 { - color=blue - 390 [label="Enter block"]; - 391 [label="Access variable R|/b|"]; - 392 [label="Function call: R|/b|.#()"]; - 393 [label="Exit block"]; - } - 394 [label="Exit when branch result"]; - 395 [label="Exit when"]; - } - 396 [label="Access variable R|/b|"]; - 397 [label="Function call: R|/b|.#()"]; - subgraph cluster_93 { - color=blue - 398 [label="Enter when"]; - subgraph cluster_94 { - 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"]; - } - 404 [label="Synthetic else branch"]; - 405 [label="Enter when branch result"]; - subgraph cluster_95 { - color=blue - 406 [label="Enter block"]; - 407 [label="Access variable R|/b|"]; - 408 [label="Function call: R|/b|.#()"]; - 409 [label="Exit block"]; - } - 410 [label="Exit when branch result"]; - 411 [label="Exit when"]; - } - 412 [label="Access variable R|/b|"]; - 413 [label="Function call: R|/b|.#()"]; - 414 [label="Exit block"]; + 351 [label="Enter when branch condition "]; + 352 [label="Access variable R|/a|"]; + 353 [label="Access variable R|/b|"]; + 354 [label="Equality operator =="]; + 355 [label="Exit when branch condition"]; } - 415 [label="Exit function test_10" style="filled" fillcolor=red]; + 356 [label="Synthetic else branch"]; + 357 [label="Enter when branch result"]; + subgraph cluster_84 { + color=blue + 358 [label="Enter block"]; + 359 [label="Access variable R|/b|"]; + 360 [label="Function call: R|/b|.#()"]; + 361 [label="Exit block"]; + } + 362 [label="Exit when branch result"]; + 363 [label="Exit when"]; } - 348 -> {349}; - 349 -> {350}; - 350 -> {351}; - 351 -> {352}; - 352 -> {353}; - 353 -> {354}; - 354 -> {355}; - 355 -> {357 356}; - 356 -> {363}; - 357 -> {358}; - 358 -> {359}; - 359 -> {360}; - 360 -> {361}; - 361 -> {362}; - 362 -> {363}; - 363 -> {364}; - 364 -> {365}; - 365 -> {366}; - 366 -> {367}; - 367 -> {368}; - 368 -> {369}; - 369 -> {370}; - 370 -> {371}; - 371 -> {373 372}; - 372 -> {379}; - 373 -> {374}; - 374 -> {375}; - 375 -> {376}; - 376 -> {377}; - 377 -> {378}; - 378 -> {379}; - 379 -> {380}; - 380 -> {381}; - 381 -> {382}; - 382 -> {383}; - 383 -> {384}; - 384 -> {385}; - 385 -> {386}; - 386 -> {387}; - 387 -> {389 388}; - 388 -> {395}; - 389 -> {390}; - 390 -> {391}; - 391 -> {392}; - 392 -> {393}; - 393 -> {394}; - 394 -> {395}; - 395 -> {396}; - 396 -> {397}; - 397 -> {398}; - 398 -> {399}; - 399 -> {400}; - 400 -> {401}; - 401 -> {402}; - 402 -> {403}; - 403 -> {405 404}; - 404 -> {411}; - 405 -> {406}; - 406 -> {407}; - 407 -> {408}; - 408 -> {409}; - 409 -> {410}; - 410 -> {411}; - 411 -> {412}; - 412 -> {413}; - 413 -> {414}; - 414 -> {415}; + 364 [label="Access variable R|/b|"]; + 365 [label="Function call: R|/b|.#()"]; + subgraph cluster_85 { + color=blue + 366 [label="Enter when"]; + subgraph cluster_86 { + 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"]; + } + 372 [label="Synthetic else branch"]; + 373 [label="Enter when branch result"]; + subgraph cluster_87 { + color=blue + 374 [label="Enter block"]; + 375 [label="Access variable R|/b|"]; + 376 [label="Function call: R|/b|.#()"]; + 377 [label="Exit block"]; + } + 378 [label="Exit when branch result"]; + 379 [label="Exit when"]; + } + 380 [label="Access variable R|/b|"]; + 381 [label="Function call: R|/b|.#()"]; + subgraph cluster_88 { + color=blue + 382 [label="Enter when"]; + subgraph cluster_89 { + color=blue + 383 [label="Enter when branch condition "]; + 384 [label="Access variable R|/b|"]; + 385 [label="Access variable R|/a|"]; + 386 [label="Equality operator =="]; + 387 [label="Exit when branch condition"]; + } + 388 [label="Synthetic else branch"]; + 389 [label="Enter when branch result"]; + subgraph cluster_90 { + color=blue + 390 [label="Enter block"]; + 391 [label="Access variable R|/b|"]; + 392 [label="Function call: R|/b|.#()"]; + 393 [label="Exit block"]; + } + 394 [label="Exit when branch result"]; + 395 [label="Exit when"]; + } + 396 [label="Access variable R|/b|"]; + 397 [label="Function call: R|/b|.#()"]; + subgraph cluster_91 { + color=blue + 398 [label="Enter when"]; + subgraph cluster_92 { + 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"]; + } + 404 [label="Synthetic else branch"]; + 405 [label="Enter when branch result"]; + subgraph cluster_93 { + color=blue + 406 [label="Enter block"]; + 407 [label="Access variable R|/b|"]; + 408 [label="Function call: R|/b|.#()"]; + 409 [label="Exit block"]; + } + 410 [label="Exit when branch result"]; + 411 [label="Exit when"]; + } + 412 [label="Access variable R|/b|"]; + 413 [label="Function call: R|/b|.#()"]; + 414 [label="Exit block"]; + } + 415 [label="Exit function test_10" style="filled" fillcolor=red]; + } + 348 -> {349}; + 349 -> {350}; + 350 -> {351}; + 351 -> {352}; + 352 -> {353}; + 353 -> {354}; + 354 -> {355}; + 355 -> {357 356}; + 356 -> {363}; + 357 -> {358}; + 358 -> {359}; + 359 -> {360}; + 360 -> {361}; + 361 -> {362}; + 362 -> {363}; + 363 -> {364}; + 364 -> {365}; + 365 -> {366}; + 366 -> {367}; + 367 -> {368}; + 368 -> {369}; + 369 -> {370}; + 370 -> {371}; + 371 -> {373 372}; + 372 -> {379}; + 373 -> {374}; + 374 -> {375}; + 375 -> {376}; + 376 -> {377}; + 377 -> {378}; + 378 -> {379}; + 379 -> {380}; + 380 -> {381}; + 381 -> {382}; + 382 -> {383}; + 383 -> {384}; + 384 -> {385}; + 385 -> {386}; + 386 -> {387}; + 387 -> {389 388}; + 388 -> {395}; + 389 -> {390}; + 390 -> {391}; + 391 -> {392}; + 392 -> {393}; + 393 -> {394}; + 394 -> {395}; + 395 -> {396}; + 396 -> {397}; + 397 -> {398}; + 398 -> {399}; + 399 -> {400}; + 400 -> {401}; + 401 -> {402}; + 402 -> {403}; + 403 -> {405 404}; + 404 -> {411}; + 405 -> {406}; + 406 -> {407}; + 407 -> {408}; + 408 -> {409}; + 409 -> {410}; + 410 -> {411}; + 411 -> {412}; + 412 -> {413}; + 413 -> {414}; + 414 -> {415}; + subgraph cluster_94 { + color=red + 416 [label="Enter function test_11" style="filled" fillcolor=red]; + subgraph cluster_95 { + color=blue + 417 [label="Enter block"]; subgraph cluster_96 { - color=red - 416 [label="Enter function test_11" style="filled" fillcolor=red]; + color=blue + 418 [label="Enter when"]; subgraph cluster_97 { color=blue - 417 [label="Enter block"]; - subgraph cluster_98 { + 419 [label="Enter when branch condition "]; + 420 [label="Access variable R|/q|"]; + 421 [label="Enter safe call"]; + 422 [label="Access variable R|/QImpl.data|"]; + 423 [label="Exit safe call"]; + 424 [label="Enter safe call"]; + 425 [label="Access variable R|/MyData.s|"]; + 426 [label="Exit safe call"]; + 427 [label="Enter safe call"]; + 428 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 429 [label="Exit safe call"]; + 430 [label="Const: Null(null)"]; + 431 [label="Equality operator !="]; + 432 [label="Exit when branch condition"]; + } + 433 [label="Synthetic else branch"]; + 434 [label="Enter when branch result"]; + subgraph cluster_98 { + color=blue + 435 [label="Enter block"]; + 436 [label="Access variable R|/q|"]; + 437 [label="Access variable R|/QImpl.data|"]; + 438 [label="Access variable R|/q|"]; + 439 [label="Access variable R|/QImpl.data|"]; + 440 [label="Access variable R|/MyData.s|"]; + 441 [label="Access variable R|/q|"]; + 442 [label="Access variable R|/QImpl.data|"]; + 443 [label="Access variable R|/MyData.s|"]; + 444 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 445 [label="Access variable R|/q2|"]; + 446 [label="Access variable R|/QImpl.data|"]; + 447 [label="Access variable R|/q2|"]; + 448 [label="Access variable R|/QImpl.data|"]; + 449 [label="Access variable #"]; + 450 [label="Access variable R|/q2|"]; + 451 [label="Access variable R|/QImpl.data|"]; + 452 [label="Access variable #"]; + 453 [label="Function call: R|/q2|.R|/QImpl.data|.#.R|kotlin/Int.inc|()"]; + subgraph cluster_99 { color=blue - 418 [label="Enter when"]; - subgraph cluster_99 { - color=blue - 419 [label="Enter when branch condition "]; - 420 [label="Access variable R|/q|"]; - 421 [label="Enter safe call"]; - 422 [label="Access variable R|/QImpl.data|"]; - 423 [label="Exit safe call"]; - 424 [label="Enter safe call"]; - 425 [label="Access variable R|/MyData.s|"]; - 426 [label="Exit safe call"]; - 427 [label="Enter safe call"]; - 428 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 429 [label="Exit safe call"]; - 430 [label="Const: Null(null)"]; - 431 [label="Equality operator !="]; - 432 [label="Exit when branch condition"]; - } - 433 [label="Synthetic else branch"]; - 434 [label="Enter when branch result"]; + 454 [label="Enter when"]; subgraph cluster_100 { color=blue - 435 [label="Enter block"]; - 436 [label="Access variable R|/q|"]; - 437 [label="Access variable R|/QImpl.data|"]; - 438 [label="Access variable R|/q|"]; - 439 [label="Access variable R|/QImpl.data|"]; - 440 [label="Access variable R|/MyData.s|"]; - 441 [label="Access variable R|/q|"]; - 442 [label="Access variable R|/QImpl.data|"]; - 443 [label="Access variable R|/MyData.s|"]; - 444 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 445 [label="Access variable R|/q2|"]; - 446 [label="Access variable R|/QImpl.data|"]; - 447 [label="Access variable R|/q2|"]; - 448 [label="Access variable R|/QImpl.data|"]; - 449 [label="Access variable #"]; - 450 [label="Access variable R|/q2|"]; - 451 [label="Access variable R|/QImpl.data|"]; - 452 [label="Access variable #"]; - 453 [label="Function call: R|/q2|.R|/QImpl.data|.#.R|kotlin/Int.inc|()"]; - subgraph cluster_101 { - color=blue - 454 [label="Enter when"]; - subgraph cluster_102 { - color=blue - 455 [label="Enter when branch condition "]; - 456 [label="Access variable R|/q2|"]; - 457 [label="Access variable R|/QImpl.data|"]; - 458 [label="Const: Null(null)"]; - 459 [label="Equality operator !="]; - 460 [label="Exit when branch condition"]; - } - 461 [label="Synthetic else branch"]; - 462 [label="Enter when branch result"]; - subgraph cluster_103 { - color=blue - 463 [label="Enter block"]; - 464 [label="Access variable R|/q2|"]; - 465 [label="Access variable R|/QImpl.data|"]; - 466 [label="Access variable R|/MyData.s|"]; - 467 [label="Access variable R|/q2|"]; - 468 [label="Access variable R|/QImpl.data|"]; - 469 [label="Access variable R|/MyData.s|"]; - 470 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 471 [label="Exit block"]; - } - 472 [label="Exit when branch result"]; - 473 [label="Exit when"]; - } - 474 [label="Exit block"]; + 455 [label="Enter when branch condition "]; + 456 [label="Access variable R|/q2|"]; + 457 [label="Access variable R|/QImpl.data|"]; + 458 [label="Const: Null(null)"]; + 459 [label="Equality operator !="]; + 460 [label="Exit when branch condition"]; } - 475 [label="Exit when branch result"]; - 476 [label="Exit when"]; + 461 [label="Synthetic else branch"]; + 462 [label="Enter when branch result"]; + subgraph cluster_101 { + color=blue + 463 [label="Enter block"]; + 464 [label="Access variable R|/q2|"]; + 465 [label="Access variable R|/QImpl.data|"]; + 466 [label="Access variable R|/MyData.s|"]; + 467 [label="Access variable R|/q2|"]; + 468 [label="Access variable R|/QImpl.data|"]; + 469 [label="Access variable R|/MyData.s|"]; + 470 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 471 [label="Exit block"]; + } + 472 [label="Exit when branch result"]; + 473 [label="Exit when"]; } - 477 [label="Exit block"]; + 474 [label="Exit block"]; } - 478 [label="Exit function test_11" style="filled" fillcolor=red]; + 475 [label="Exit when branch result"]; + 476 [label="Exit when"]; } - 416 -> {417}; - 417 -> {418}; - 418 -> {419}; - 419 -> {420}; - 420 -> {421 423}; - 421 -> {422}; - 422 -> {423}; - 423 -> {424 426}; - 424 -> {425}; - 425 -> {426}; - 426 -> {427 429}; - 427 -> {428}; - 428 -> {429}; - 429 -> {430}; - 430 -> {431}; - 431 -> {432}; - 432 -> {434 433}; - 433 -> {476}; - 434 -> {435}; - 435 -> {436}; - 436 -> {437}; - 437 -> {438}; - 438 -> {439}; - 439 -> {440}; - 440 -> {441}; - 441 -> {442}; - 442 -> {443}; - 443 -> {444}; - 444 -> {445}; - 445 -> {446}; - 446 -> {447}; - 447 -> {448}; - 448 -> {449}; - 449 -> {450}; - 450 -> {451}; - 451 -> {452}; - 452 -> {453}; - 453 -> {454}; - 454 -> {455}; - 455 -> {456}; - 456 -> {457}; - 457 -> {458}; - 458 -> {459}; - 459 -> {460}; - 460 -> {462 461}; - 461 -> {473}; - 462 -> {463}; - 463 -> {464}; - 464 -> {465}; - 465 -> {466}; - 466 -> {467}; - 467 -> {468}; - 468 -> {469}; - 469 -> {470}; - 470 -> {471}; - 471 -> {472}; - 472 -> {473}; - 473 -> {474}; - 474 -> {475}; - 475 -> {476}; - 476 -> {477}; - 477 -> {478}; + 477 [label="Exit block"]; + } + 478 [label="Exit function test_11" style="filled" fillcolor=red]; + } + 416 -> {417}; + 417 -> {418}; + 418 -> {419}; + 419 -> {420}; + 420 -> {421 423}; + 421 -> {422}; + 422 -> {423}; + 423 -> {424 426}; + 424 -> {425}; + 425 -> {426}; + 426 -> {427 429}; + 427 -> {428}; + 428 -> {429}; + 429 -> {430}; + 430 -> {431}; + 431 -> {432}; + 432 -> {434 433}; + 433 -> {476}; + 434 -> {435}; + 435 -> {436}; + 436 -> {437}; + 437 -> {438}; + 438 -> {439}; + 439 -> {440}; + 440 -> {441}; + 441 -> {442}; + 442 -> {443}; + 443 -> {444}; + 444 -> {445}; + 445 -> {446}; + 446 -> {447}; + 447 -> {448}; + 448 -> {449}; + 449 -> {450}; + 450 -> {451}; + 451 -> {452}; + 452 -> {453}; + 453 -> {454}; + 454 -> {455}; + 455 -> {456}; + 456 -> {457}; + 457 -> {458}; + 458 -> {459}; + 459 -> {460}; + 460 -> {462 461}; + 461 -> {473}; + 462 -> {463}; + 463 -> {464}; + 464 -> {465}; + 465 -> {466}; + 466 -> {467}; + 467 -> {468}; + 468 -> {469}; + 469 -> {470}; + 470 -> {471}; + 471 -> {472}; + 472 -> {473}; + 473 -> {474}; + 474 -> {475}; + 475 -> {476}; + 476 -> {477}; + 477 -> {478}; + subgraph cluster_102 { + color=red + 479 [label="Enter function test_12" style="filled" fillcolor=red]; + subgraph cluster_103 { + color=blue + 480 [label="Enter block"]; subgraph cluster_104 { - color=red - 479 [label="Enter function test_12" style="filled" fillcolor=red]; + color=blue + 481 [label="Enter when"]; subgraph cluster_105 { color=blue - 480 [label="Enter block"]; - subgraph cluster_106 { - color=blue - 481 [label="Enter when"]; - subgraph cluster_107 { - color=blue - 482 [label="Enter when branch condition "]; - 483 [label="Access variable R|/q|"]; - 484 [label="Enter safe call"]; - 485 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 486 [label="Exit safe call"]; - 487 [label="Enter safe call"]; - 488 [label="Access variable R|/MyData.s|"]; - 489 [label="Exit safe call"]; - 490 [label="Enter safe call"]; - 491 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 492 [label="Exit safe call"]; - 493 [label="Const: Null(null)"]; - 494 [label="Equality operator !="]; - 495 [label="Exit when branch condition"]; - } - 496 [label="Synthetic else branch"]; - 497 [label="Enter when branch result"]; - subgraph cluster_108 { - color=blue - 498 [label="Enter block"]; - 499 [label="Access variable R|/q|"]; - 500 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 501 [label="Access variable R|/q|"]; - 502 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 503 [label="Access variable #"]; - 504 [label="Access variable R|/q|"]; - 505 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 506 [label="Access variable #"]; - 507 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.#.R|kotlin/Int.inc|()"]; - 508 [label="Exit block"]; - } - 509 [label="Exit when branch result"]; - 510 [label="Exit when"]; - } - 511 [label="Exit block"]; + 482 [label="Enter when branch condition "]; + 483 [label="Access variable R|/q|"]; + 484 [label="Enter safe call"]; + 485 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 486 [label="Exit safe call"]; + 487 [label="Enter safe call"]; + 488 [label="Access variable R|/MyData.s|"]; + 489 [label="Exit safe call"]; + 490 [label="Enter safe call"]; + 491 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 492 [label="Exit safe call"]; + 493 [label="Const: Null(null)"]; + 494 [label="Equality operator !="]; + 495 [label="Exit when branch condition"]; } - 512 [label="Exit function test_12" style="filled" fillcolor=red]; + 496 [label="Synthetic else branch"]; + 497 [label="Enter when branch result"]; + subgraph cluster_106 { + color=blue + 498 [label="Enter block"]; + 499 [label="Access variable R|/q|"]; + 500 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 501 [label="Access variable R|/q|"]; + 502 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 503 [label="Access variable #"]; + 504 [label="Access variable R|/q|"]; + 505 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 506 [label="Access variable #"]; + 507 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.#.R|kotlin/Int.inc|()"]; + 508 [label="Exit block"]; + } + 509 [label="Exit when branch result"]; + 510 [label="Exit when"]; } - 479 -> {480}; - 480 -> {481}; - 481 -> {482}; - 482 -> {483}; - 483 -> {484 486}; - 484 -> {485}; - 485 -> {486}; - 486 -> {487 489}; - 487 -> {488}; - 488 -> {489}; - 489 -> {490 492}; - 490 -> {491}; - 491 -> {492}; - 492 -> {493}; - 493 -> {494}; - 494 -> {495}; - 495 -> {497 496}; - 496 -> {510}; - 497 -> {498}; - 498 -> {499}; - 499 -> {500}; - 500 -> {501}; - 501 -> {502}; - 502 -> {503}; - 503 -> {504}; - 504 -> {505}; - 505 -> {506}; - 506 -> {507}; - 507 -> {508}; - 508 -> {509}; - 509 -> {510}; - 510 -> {511}; - 511 -> {512}; + 511 [label="Exit block"]; + } + 512 [label="Exit function test_12" style="filled" fillcolor=red]; + } + 479 -> {480}; + 480 -> {481}; + 481 -> {482}; + 482 -> {483}; + 483 -> {484 486}; + 484 -> {485}; + 485 -> {486}; + 486 -> {487 489}; + 487 -> {488}; + 488 -> {489}; + 489 -> {490 492}; + 490 -> {491}; + 491 -> {492}; + 492 -> {493}; + 493 -> {494}; + 494 -> {495}; + 495 -> {497 496}; + 496 -> {510}; + 497 -> {498}; + 498 -> {499}; + 499 -> {500}; + 500 -> {501}; + 501 -> {502}; + 502 -> {503}; + 503 -> {504}; + 504 -> {505}; + 505 -> {506}; + 506 -> {507}; + 507 -> {508}; + 508 -> {509}; + 509 -> {510}; + 510 -> {511}; + 511 -> {512}; + subgraph cluster_107 { + color=red + 513 [label="Enter function test_13" style="filled" fillcolor=red]; + subgraph cluster_108 { + color=blue + 514 [label="Enter block"]; subgraph cluster_109 { - color=red - 513 [label="Enter function test_13" style="filled" fillcolor=red]; + color=blue + 515 [label="Enter when"]; subgraph cluster_110 { color=blue - 514 [label="Enter block"]; - subgraph cluster_111 { - color=blue - 515 [label="Enter when"]; - subgraph cluster_112 { - color=blue - 516 [label="Enter when branch condition "]; - 517 [label="Access variable R|/q|"]; - 518 [label="Enter safe call"]; - 519 [label="Access variable R|/QImplMutable.data|"]; - 520 [label="Exit safe call"]; - 521 [label="Enter safe call"]; - 522 [label="Access variable R|/MyData.s|"]; - 523 [label="Exit safe call"]; - 524 [label="Enter safe call"]; - 525 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 526 [label="Exit safe call"]; - 527 [label="Const: Null(null)"]; - 528 [label="Equality operator !="]; - 529 [label="Exit when branch condition"]; - } - 530 [label="Synthetic else branch"]; - 531 [label="Enter when branch result"]; - subgraph cluster_113 { - color=blue - 532 [label="Enter block"]; - 533 [label="Access variable R|/q|"]; - 534 [label="Access variable R|/QImplMutable.data|"]; - 535 [label="Access variable R|/q|"]; - 536 [label="Access variable R|/QImplMutable.data|"]; - 537 [label="Access variable #"]; - 538 [label="Access variable R|/q|"]; - 539 [label="Access variable R|/QImplMutable.data|"]; - 540 [label="Access variable #"]; - 541 [label="Function call: R|/q|.R|/QImplMutable.data|.#.R|kotlin/Int.inc|()"]; - 542 [label="Exit block"]; - } - 543 [label="Exit when branch result"]; - 544 [label="Exit when"]; - } - 545 [label="Exit block"]; + 516 [label="Enter when branch condition "]; + 517 [label="Access variable R|/q|"]; + 518 [label="Enter safe call"]; + 519 [label="Access variable R|/QImplMutable.data|"]; + 520 [label="Exit safe call"]; + 521 [label="Enter safe call"]; + 522 [label="Access variable R|/MyData.s|"]; + 523 [label="Exit safe call"]; + 524 [label="Enter safe call"]; + 525 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 526 [label="Exit safe call"]; + 527 [label="Const: Null(null)"]; + 528 [label="Equality operator !="]; + 529 [label="Exit when branch condition"]; } - 546 [label="Exit function test_13" style="filled" fillcolor=red]; + 530 [label="Synthetic else branch"]; + 531 [label="Enter when branch result"]; + subgraph cluster_111 { + color=blue + 532 [label="Enter block"]; + 533 [label="Access variable R|/q|"]; + 534 [label="Access variable R|/QImplMutable.data|"]; + 535 [label="Access variable R|/q|"]; + 536 [label="Access variable R|/QImplMutable.data|"]; + 537 [label="Access variable #"]; + 538 [label="Access variable R|/q|"]; + 539 [label="Access variable R|/QImplMutable.data|"]; + 540 [label="Access variable #"]; + 541 [label="Function call: R|/q|.R|/QImplMutable.data|.#.R|kotlin/Int.inc|()"]; + 542 [label="Exit block"]; + } + 543 [label="Exit when branch result"]; + 544 [label="Exit when"]; } - 513 -> {514}; - 514 -> {515}; - 515 -> {516}; - 516 -> {517}; - 517 -> {518 520}; - 518 -> {519}; - 519 -> {520}; - 520 -> {521 523}; - 521 -> {522}; - 522 -> {523}; - 523 -> {524 526}; - 524 -> {525}; - 525 -> {526}; - 526 -> {527}; - 527 -> {528}; - 528 -> {529}; - 529 -> {531 530}; - 530 -> {544}; - 531 -> {532}; - 532 -> {533}; - 533 -> {534}; - 534 -> {535}; - 535 -> {536}; - 536 -> {537}; - 537 -> {538}; - 538 -> {539}; - 539 -> {540}; - 540 -> {541}; - 541 -> {542}; - 542 -> {543}; - 543 -> {544}; - 544 -> {545}; - 545 -> {546}; - + 545 [label="Exit block"]; } + 546 [label="Exit function test_13" style="filled" fillcolor=red]; + } + 513 -> {514}; + 514 -> {515}; + 515 -> {516}; + 516 -> {517}; + 517 -> {518 520}; + 518 -> {519}; + 519 -> {520}; + 520 -> {521 523}; + 521 -> {522}; + 522 -> {523}; + 523 -> {524 526}; + 524 -> {525}; + 525 -> {526}; + 526 -> {527}; + 527 -> {528}; + 528 -> {529}; + 529 -> {531 530}; + 530 -> {544}; + 531 -> {532}; + 532 -> {533}; + 533 -> {534}; + 534 -> {535}; + 535 -> {536}; + 536 -> {537}; + 537 -> {538}; + 538 -> {539}; + 539 -> {540}; + 540 -> {541}; + 541 -> {542}; + 542 -> {543}; + 543 -> {544}; + 544 -> {545}; + 545 -> {546}; + +} 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 8a7707438d1..6f1f1540ed2 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot @@ -6,429 +6,427 @@ digraph assignSafeCall_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - subgraph cluster_1 { - color=blue - 1 [label="Part of class initialization"]; - 2 [label="Exit class A" style="filled" fillcolor=red]; - } - 0 -> {1} [color=green]; - 1 -> {2} [style=dotted]; - 1 -> {15} [color=green]; - 1 -> {15} [style=dashed]; + 1 [label="Part of class initialization"]; + 2 [label="Exit class A" style="filled" fillcolor=red]; + } + 0 -> {1} [color=green]; + 1 -> {2} [style=dotted]; + 1 -> {15} [color=green]; + 1 -> {15} [style=dashed]; - subgraph cluster_2 { - color=red - 3 [label="Enter function " style="filled" fillcolor=red]; - 4 [label="Delegated constructor call: super()"]; - 5 [label="Exit function " style="filled" fillcolor=red]; - } - 3 -> {4}; - 4 -> {5}; + subgraph cluster_1 { + color=red + 3 [label="Enter function " style="filled" fillcolor=red]; + 4 [label="Delegated constructor call: super()"]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + 3 -> {4}; + 4 -> {5}; + subgraph cluster_2 { + color=red + 6 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_3 { - color=red - 6 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 7 [label="Enter block"]; - 8 [label="Const: Int(1)"]; - 9 [label="Jump: ^foo Int(1)"]; - 10 [label="Stub" style="filled" fillcolor=gray]; - 11 [label="Exit block" style="filled" fillcolor=gray]; - } - 12 [label="Exit function foo" style="filled" fillcolor=red]; + color=blue + 7 [label="Enter block"]; + 8 [label="Const: Int(1)"]; + 9 [label="Jump: ^foo Int(1)"]; + 10 [label="Stub" style="filled" fillcolor=gray]; + 11 [label="Exit block" style="filled" fillcolor=gray]; } - 6 -> {7}; - 7 -> {8}; - 8 -> {9}; - 9 -> {12}; - 9 -> {10} [style=dotted]; - 10 -> {11} [style=dotted]; - 11 -> {12} [style=dotted]; + 12 [label="Exit function foo" style="filled" fillcolor=red]; + } + 6 -> {7}; + 7 -> {8}; + 8 -> {9}; + 9 -> {12}; + 9 -> {10} [style=dotted]; + 10 -> {11} [style=dotted]; + 11 -> {12} [style=dotted]; - subgraph cluster_5 { - color=red - 13 [label="Enter function getter" style="filled" fillcolor=red]; - 14 [label="Exit function getter" style="filled" fillcolor=red]; - } - 13 -> {14}; + subgraph cluster_4 { + color=red + 13 [label="Enter function getter" style="filled" fillcolor=red]; + 14 [label="Exit function getter" style="filled" fillcolor=red]; + } + 13 -> {14}; - subgraph cluster_6 { - color=red - 15 [label="Enter property" style="filled" fillcolor=red]; - 16 [label="Const: Int(1)"]; - 17 [label="Exit property" style="filled" fillcolor=red]; - } - 15 -> {16}; - 16 -> {17}; - 17 -> {2} [color=green]; + subgraph cluster_5 { + color=red + 15 [label="Enter property" style="filled" fillcolor=red]; + 16 [label="Const: Int(1)"]; + 17 [label="Exit property" style="filled" fillcolor=red]; + } + 15 -> {16}; + 16 -> {17}; + 17 -> {2} [color=green]; + subgraph cluster_6 { + color=red + 18 [label="Enter function bar" style="filled" fillcolor=red]; subgraph cluster_7 { - color=red - 18 [label="Enter function bar" style="filled" fillcolor=red]; - subgraph cluster_8 { - color=blue - 19 [label="Enter block"]; - 20 [label="Exit block"]; - } - 21 [label="Exit function bar" style="filled" fillcolor=red]; + color=blue + 19 [label="Enter block"]; + 20 [label="Exit block"]; } - 18 -> {19}; - 19 -> {20}; - 20 -> {21}; + 21 [label="Exit function bar" style="filled" fillcolor=red]; + } + 18 -> {19}; + 19 -> {20}; + 20 -> {21}; + subgraph cluster_8 { + color=red + 22 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_9 { - color=red - 22 [label="Enter function test_1" style="filled" fillcolor=red]; + color=blue + 23 [label="Enter block"]; + 24 [label="Access variable R|/a|"]; + 25 [label="Enter safe call"]; + 26 [label="Access variable R|/A.x|"]; + 27 [label="Exit safe call"]; + 28 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_10 { color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/a|"]; - 25 [label="Enter safe call"]; - 26 [label="Access variable R|/A.x|"]; - 27 [label="Exit safe call"]; - 28 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 29 [label="Enter when"]; subgraph cluster_11 { color=blue - 29 [label="Enter when"]; - subgraph cluster_12 { - color=blue - 30 [label="Enter when branch condition "]; - 31 [label="Access variable R|/x|"]; - 32 [label="Const: Null(null)"]; - 33 [label="Equality operator !="]; - 34 [label="Exit when branch condition"]; - } - 35 [label="Synthetic else branch"]; - 36 [label="Enter when branch result"]; - subgraph cluster_13 { - color=blue - 37 [label="Enter block"]; - 38 [label="Access variable R|/a|"]; - 39 [label="Function call: R|/a|.R|/A.bar|()"]; - 40 [label="Exit block"]; - } - 41 [label="Exit when branch result"]; - 42 [label="Exit when"]; + 30 [label="Enter when branch condition "]; + 31 [label="Access variable R|/x|"]; + 32 [label="Const: Null(null)"]; + 33 [label="Equality operator !="]; + 34 [label="Exit when branch condition"]; } - 43 [label="Exit block"]; + 35 [label="Synthetic else branch"]; + 36 [label="Enter when branch result"]; + subgraph cluster_12 { + color=blue + 37 [label="Enter block"]; + 38 [label="Access variable R|/a|"]; + 39 [label="Function call: R|/a|.R|/A.bar|()"]; + 40 [label="Exit block"]; + } + 41 [label="Exit when branch result"]; + 42 [label="Exit when"]; } - 44 [label="Exit function test_1" style="filled" fillcolor=red]; + 43 [label="Exit block"]; } - 22 -> {23}; - 23 -> {24}; - 24 -> {25 27}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {36 35}; - 35 -> {42}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {42}; - 42 -> {43}; - 43 -> {44}; + 44 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 22 -> {23}; + 23 -> {24}; + 24 -> {25 27}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + 33 -> {34}; + 34 -> {36 35}; + 35 -> {42}; + 36 -> {37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {42}; + 42 -> {43}; + 43 -> {44}; + subgraph cluster_13 { + color=red + 45 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_14 { - color=red - 45 [label="Enter function test_2" style="filled" fillcolor=red]; + color=blue + 46 [label="Enter block"]; + 47 [label="Access variable R|/a|"]; + 48 [label="Enter safe call"]; + 49 [label="Function call: $subj$.R|/A.foo|()"]; + 50 [label="Exit safe call"]; + 51 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_15 { color=blue - 46 [label="Enter block"]; - 47 [label="Access variable R|/a|"]; - 48 [label="Enter safe call"]; - 49 [label="Function call: $subj$.R|/A.foo|()"]; - 50 [label="Exit safe call"]; - 51 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 52 [label="Enter when"]; subgraph cluster_16 { color=blue - 52 [label="Enter when"]; - subgraph cluster_17 { - color=blue - 53 [label="Enter when branch condition "]; - 54 [label="Access variable R|/x|"]; - 55 [label="Const: Null(null)"]; - 56 [label="Equality operator !="]; - 57 [label="Exit when branch condition"]; - } - 58 [label="Synthetic else branch"]; - 59 [label="Enter when branch result"]; - subgraph cluster_18 { - color=blue - 60 [label="Enter block"]; - 61 [label="Access variable R|/a|"]; - 62 [label="Function call: R|/a|.R|/A.bar|()"]; - 63 [label="Exit block"]; - } - 64 [label="Exit when branch result"]; - 65 [label="Exit when"]; + 53 [label="Enter when branch condition "]; + 54 [label="Access variable R|/x|"]; + 55 [label="Const: Null(null)"]; + 56 [label="Equality operator !="]; + 57 [label="Exit when branch condition"]; } - 66 [label="Exit block"]; + 58 [label="Synthetic else branch"]; + 59 [label="Enter when branch result"]; + subgraph cluster_17 { + color=blue + 60 [label="Enter block"]; + 61 [label="Access variable R|/a|"]; + 62 [label="Function call: R|/a|.R|/A.bar|()"]; + 63 [label="Exit block"]; + } + 64 [label="Exit when branch result"]; + 65 [label="Exit when"]; } - 67 [label="Exit function test_2" style="filled" fillcolor=red]; + 66 [label="Exit block"]; } - 45 -> {46}; - 46 -> {47}; - 47 -> {48 50}; - 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {52}; - 52 -> {53}; - 53 -> {54}; - 54 -> {55}; - 55 -> {56}; - 56 -> {57}; - 57 -> {59 58}; - 58 -> {65}; - 59 -> {60}; - 60 -> {61}; - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {65}; - 65 -> {66}; - 66 -> {67}; + 67 [label="Exit function test_2" style="filled" fillcolor=red]; + } + 45 -> {46}; + 46 -> {47}; + 47 -> {48 50}; + 48 -> {49}; + 49 -> {50}; + 50 -> {51}; + 51 -> {52}; + 52 -> {53}; + 53 -> {54}; + 54 -> {55}; + 55 -> {56}; + 56 -> {57}; + 57 -> {59 58}; + 58 -> {65}; + 59 -> {60}; + 60 -> {61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; + 64 -> {65}; + 65 -> {66}; + 66 -> {67}; + subgraph cluster_18 { + color=red + 68 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_19 { - color=red - 68 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_20 { - 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|()"]; - 81 [label="Access variable R|/x|"]; - 82 [label="Function call: R|/x|.R|/A.foo|()"]; - 83 [label="Exit block"]; - } - 84 [label="Exit function test_3" style="filled" fillcolor=red]; + 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|()"]; + 81 [label="Access variable R|/x|"]; + 82 [label="Function call: R|/x|.R|/A.foo|()"]; + 83 [label="Exit block"]; } - 68 -> {69}; - 69 -> {70}; - 70 -> {71}; - 71 -> {72}; - 72 -> {76 73}; - 73 -> {74}; - 74 -> {84}; - 74 -> {75} [style=dotted]; - 75 -> {77} [style=dotted]; - 76 -> {77}; - 77 -> {78}; - 78 -> {79}; - 79 -> {80}; - 80 -> {81}; - 81 -> {82}; - 82 -> {83}; - 83 -> {84}; + 84 [label="Exit function test_3" style="filled" fillcolor=red]; + } + 68 -> {69}; + 69 -> {70}; + 70 -> {71}; + 71 -> {72}; + 72 -> {76 73}; + 73 -> {74}; + 74 -> {84}; + 74 -> {75} [style=dotted]; + 75 -> {77} [style=dotted]; + 76 -> {77}; + 77 -> {78}; + 78 -> {79}; + 79 -> {80}; + 80 -> {81}; + 81 -> {82}; + 82 -> {83}; + 83 -> {84}; - subgraph cluster_21 { - color=red - 85 [label="Enter class B" style="filled" fillcolor=red]; - 86 [label="Exit class B" style="filled" fillcolor=red]; - } - 85 -> {86} [color=green]; + subgraph cluster_20 { + color=red + 85 [label="Enter class B" style="filled" fillcolor=red]; + 86 [label="Exit class B" style="filled" fillcolor=red]; + } + 85 -> {86} [color=green]; - subgraph cluster_22 { - color=red - 87 [label="Enter function foo" style="filled" fillcolor=red]; - 88 [label="Exit function foo" style="filled" fillcolor=red]; - } - 87 -> {88}; + subgraph cluster_21 { + color=red + 87 [label="Enter function foo" style="filled" fillcolor=red]; + 88 [label="Exit function foo" style="filled" fillcolor=red]; + } + 87 -> {88}; - subgraph cluster_23 { - color=red - 89 [label="Enter function getter" style="filled" fillcolor=red]; - 90 [label="Exit function getter" style="filled" fillcolor=red]; - } - 89 -> {90}; + subgraph cluster_22 { + color=red + 89 [label="Enter function getter" style="filled" fillcolor=red]; + 90 [label="Exit function getter" style="filled" fillcolor=red]; + } + 89 -> {90}; - subgraph cluster_24 { - color=red - 91 [label="Enter function bar" style="filled" fillcolor=red]; - 92 [label="Exit function bar" style="filled" fillcolor=red]; - } - 91 -> {92}; + subgraph cluster_23 { + color=red + 91 [label="Enter function bar" style="filled" fillcolor=red]; + 92 [label="Exit function bar" style="filled" fillcolor=red]; + } + 91 -> {92}; + subgraph cluster_24 { + color=red + 93 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_25 { - color=red - 93 [label="Enter function test_1" style="filled" fillcolor=red]; + color=blue + 94 [label="Enter block"]; + 95 [label="Access variable R|/a|"]; + 96 [label="Enter safe call"]; + 97 [label="Access variable R|/B.x|"]; + 98 [label="Exit safe call"]; + 99 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_26 { color=blue - 94 [label="Enter block"]; - 95 [label="Access variable R|/a|"]; - 96 [label="Enter safe call"]; - 97 [label="Access variable R|/B.x|"]; - 98 [label="Exit safe call"]; - 99 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 100 [label="Enter when"]; subgraph cluster_27 { color=blue - 100 [label="Enter when"]; - subgraph cluster_28 { - color=blue - 101 [label="Enter when branch condition "]; - 102 [label="Access variable R|/x|"]; - 103 [label="Const: Null(null)"]; - 104 [label="Equality operator !="]; - 105 [label="Exit when branch condition"]; - } - 106 [label="Synthetic else branch"]; - 107 [label="Enter when branch result"]; - subgraph cluster_29 { - color=blue - 108 [label="Enter block"]; - 109 [label="Access variable R|/a|"]; - 110 [label="Function call: R|/a|.R|/B.bar|()"]; - 111 [label="Exit block"]; - } - 112 [label="Exit when branch result"]; - 113 [label="Exit when"]; + 101 [label="Enter when branch condition "]; + 102 [label="Access variable R|/x|"]; + 103 [label="Const: Null(null)"]; + 104 [label="Equality operator !="]; + 105 [label="Exit when branch condition"]; } - 114 [label="Exit block"]; + 106 [label="Synthetic else branch"]; + 107 [label="Enter when branch result"]; + subgraph cluster_28 { + color=blue + 108 [label="Enter block"]; + 109 [label="Access variable R|/a|"]; + 110 [label="Function call: R|/a|.R|/B.bar|()"]; + 111 [label="Exit block"]; + } + 112 [label="Exit when branch result"]; + 113 [label="Exit when"]; } - 115 [label="Exit function test_1" style="filled" fillcolor=red]; + 114 [label="Exit block"]; } - 93 -> {94}; - 94 -> {95}; - 95 -> {96 98}; - 96 -> {97}; - 97 -> {98}; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; - 101 -> {102}; - 102 -> {103}; - 103 -> {104}; - 104 -> {105}; - 105 -> {107 106}; - 106 -> {113}; - 107 -> {108}; - 108 -> {109}; - 109 -> {110}; - 110 -> {111}; - 111 -> {112}; - 112 -> {113}; - 113 -> {114}; - 114 -> {115}; + 115 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 93 -> {94}; + 94 -> {95}; + 95 -> {96 98}; + 96 -> {97}; + 97 -> {98}; + 98 -> {99}; + 99 -> {100}; + 100 -> {101}; + 101 -> {102}; + 102 -> {103}; + 103 -> {104}; + 104 -> {105}; + 105 -> {107 106}; + 106 -> {113}; + 107 -> {108}; + 108 -> {109}; + 109 -> {110}; + 110 -> {111}; + 111 -> {112}; + 112 -> {113}; + 113 -> {114}; + 114 -> {115}; + subgraph cluster_29 { + color=red + 116 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_30 { - color=red - 116 [label="Enter function test_2" style="filled" fillcolor=red]; + 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|()"]; + 121 [label="Exit safe call"]; + 122 [label="Variable declaration: lval x: R|kotlin/Int?|"]; subgraph cluster_31 { 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|()"]; - 121 [label="Exit safe call"]; - 122 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + 123 [label="Enter when"]; subgraph cluster_32 { color=blue - 123 [label="Enter when"]; - subgraph cluster_33 { - 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"]; - } - 129 [label="Synthetic else branch"]; - 130 [label="Enter when branch result"]; - subgraph cluster_34 { - color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/a|"]; - 133 [label="Function call: R|/a|.R|/B.bar|()"]; - 134 [label="Exit block"]; - } - 135 [label="Exit when branch result"]; - 136 [label="Exit when"]; + 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"]; } - 137 [label="Exit block"]; + 129 [label="Synthetic else branch"]; + 130 [label="Enter when branch result"]; + subgraph cluster_33 { + color=blue + 131 [label="Enter block"]; + 132 [label="Access variable R|/a|"]; + 133 [label="Function call: R|/a|.R|/B.bar|()"]; + 134 [label="Exit block"]; + } + 135 [label="Exit when branch result"]; + 136 [label="Exit when"]; } - 138 [label="Exit function test_2" style="filled" fillcolor=red]; + 137 [label="Exit block"]; } - 116 -> {117}; - 117 -> {118}; - 118 -> {119 121}; - 119 -> {120}; - 120 -> {121}; - 121 -> {122}; - 122 -> {123}; - 123 -> {124}; - 124 -> {125}; - 125 -> {126}; - 126 -> {127}; - 127 -> {128}; - 128 -> {130 129}; - 129 -> {136}; - 130 -> {131}; - 131 -> {132}; - 132 -> {133}; - 133 -> {134}; - 134 -> {135}; - 135 -> {136}; - 136 -> {137}; - 137 -> {138}; - - subgraph cluster_35 { - color=red - 139 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_36 { - color=blue - 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|()"]; - 152 [label="Access variable R|/x|"]; - 153 [label="Function call: R|/x|.R|/B.foo|()"]; - 154 [label="Exit block"]; - } - 155 [label="Exit function test_3" style="filled" fillcolor=red]; - } - 139 -> {140}; - 140 -> {141}; - 141 -> {142}; - 142 -> {143}; - 143 -> {147 144}; - 144 -> {145}; - 145 -> {155}; - 145 -> {146} [style=dotted]; - 146 -> {148} [style=dotted]; - 147 -> {148}; - 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - 151 -> {152}; - 152 -> {153}; - 153 -> {154}; - 154 -> {155}; - + 138 [label="Exit function test_2" style="filled" fillcolor=red]; } + 116 -> {117}; + 117 -> {118}; + 118 -> {119 121}; + 119 -> {120}; + 120 -> {121}; + 121 -> {122}; + 122 -> {123}; + 123 -> {124}; + 124 -> {125}; + 125 -> {126}; + 126 -> {127}; + 127 -> {128}; + 128 -> {130 129}; + 129 -> {136}; + 130 -> {131}; + 131 -> {132}; + 132 -> {133}; + 133 -> {134}; + 134 -> {135}; + 135 -> {136}; + 136 -> {137}; + 137 -> {138}; + + subgraph cluster_34 { + color=red + 139 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_35 { + color=blue + 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|()"]; + 152 [label="Access variable R|/x|"]; + 153 [label="Function call: R|/x|.R|/B.foo|()"]; + 154 [label="Exit block"]; + } + 155 [label="Exit function test_3" style="filled" fillcolor=red]; + } + 139 -> {140}; + 140 -> {141}; + 141 -> {142}; + 142 -> {143}; + 143 -> {147 144}; + 144 -> {145}; + 145 -> {155}; + 145 -> {146} [style=dotted]; + 146 -> {148} [style=dotted]; + 147 -> {148}; + 148 -> {149}; + 149 -> {150}; + 150 -> {151}; + 151 -> {152}; + 152 -> {153}; + 153 -> {154}; + 154 -> {155}; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot index 65571ef78d5..e8cc2cb5027 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot @@ -50,53 +50,51 @@ digraph smartCastInInit_kt { subgraph cluster_5 { color=red 14 [label="Enter class Main" style="filled" fillcolor=red]; - subgraph cluster_6 { - color=blue - 15 [label="Part of class initialization"]; - 16 [label="Exit class Main" style="filled" fillcolor=red]; - } - 14 -> {15} [color=green]; - 15 -> {16} [style=dotted]; - 15 -> {22} [color=green]; - 15 -> {22} [style=dashed]; - - subgraph cluster_7 { - color=red - 17 [label="Enter function " style="filled" fillcolor=red]; - 18 [label="Delegated constructor call: super()"]; - 19 [label="Exit function " style="filled" fillcolor=red]; - } - 17 -> {18}; - 18 -> {19}; - - subgraph cluster_8 { - color=red - 20 [label="Enter function getter" style="filled" fillcolor=red]; - 21 [label="Exit function getter" style="filled" fillcolor=red]; - } - 20 -> {21}; - - subgraph cluster_9 { - color=red - 22 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_10 { - color=blue - 23 [label="Enter block"]; - 24 [label="Function call: R|/s|()"]; - 25 [label="Assignment: R|/Main.x|"]; - 26 [label="Access variable R|/Main.x|"]; - 27 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"]; - 28 [label="Exit block"]; - } - 29 [label="Exit init block" style="filled" fillcolor=red]; - } - 22 -> {23}; - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {16} [color=green]; - + 15 [label="Part of class initialization"]; + 16 [label="Exit class Main" style="filled" fillcolor=red]; } + 14 -> {15} [color=green]; + 15 -> {16} [style=dotted]; + 15 -> {22} [color=green]; + 15 -> {22} [style=dashed]; + + subgraph cluster_6 { + color=red + 17 [label="Enter function " style="filled" fillcolor=red]; + 18 [label="Delegated constructor call: super()"]; + 19 [label="Exit function " style="filled" fillcolor=red]; + } + 17 -> {18}; + 18 -> {19}; + + subgraph cluster_7 { + color=red + 20 [label="Enter function getter" style="filled" fillcolor=red]; + 21 [label="Exit function getter" style="filled" fillcolor=red]; + } + 20 -> {21}; + + subgraph cluster_8 { + color=red + 22 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_9 { + color=blue + 23 [label="Enter block"]; + 24 [label="Function call: R|/s|()"]; + 25 [label="Assignment: R|/Main.x|"]; + 26 [label="Access variable R|/Main.x|"]; + 27 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"]; + 28 [label="Exit block"]; + } + 29 [label="Exit init block" style="filled" fillcolor=red]; + } + 22 -> {23}; + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {16} [color=green]; + +} diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot index 4290dcff5fd..63def262b91 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot @@ -117,206 +117,202 @@ digraph smartcastToNothing_kt { subgraph cluster_10 { color=red 38 [label="Enter class A" style="filled" fillcolor=red]; - subgraph cluster_11 { + 39 [label="Part of class initialization"]; + 40 [label="Part of class initialization"]; + 41 [label="Exit class A" style="filled" fillcolor=red]; + } + 38 -> {39} [color=green]; + 39 -> {40} [style=dotted]; + 39 -> {47} [color=green]; + 39 -> {47} [style=dashed]; + 40 -> {41} [style=dotted]; + 40 -> {52} [color=green]; + 40 -> {52} [style=dashed]; + + subgraph cluster_11 { + color=red + 42 [label="Enter function " style="filled" fillcolor=red]; + 43 [label="Delegated constructor call: super()"]; + 44 [label="Exit function " style="filled" fillcolor=red]; + } + 42 -> {43}; + 43 -> {44}; + + subgraph cluster_12 { + color=red + 45 [label="Enter function getter" style="filled" fillcolor=red]; + 46 [label="Exit function getter" style="filled" fillcolor=red]; + } + 45 -> {46}; + + subgraph cluster_13 { + color=red + 47 [label="Enter property" style="filled" fillcolor=red]; + 48 [label="Const: Int(1)"]; + 49 [label="Exit property" style="filled" fillcolor=red]; + } + 47 -> {48}; + 48 -> {49}; + 49 -> {40} [color=green]; + + subgraph cluster_14 { + color=red + 50 [label="Enter function getter" style="filled" fillcolor=red]; + 51 [label="Exit function getter" style="filled" fillcolor=red]; + } + 50 -> {51}; + + subgraph cluster_15 { + color=red + 52 [label="Enter property" style="filled" fillcolor=red]; + 53 [label="Const: Boolean(true)"]; + 54 [label="Exit property" style="filled" fillcolor=red]; + } + 52 -> {53}; + 53 -> {54}; + 54 -> {41} [color=green]; + + subgraph cluster_16 { + color=red + 55 [label="Enter function test_0" style="filled" fillcolor=red]; + subgraph cluster_17 { color=blue - 39 [label="Part of class initialization"]; - subgraph cluster_12 { - color=blue - 40 [label="Part of class initialization"]; - 41 [label="Exit class A" style="filled" fillcolor=red]; - } - 38 -> {39} [color=green]; - 39 -> {40} [style=dotted]; - 39 -> {47} [color=green]; - 39 -> {47} [style=dashed]; - 40 -> {41} [style=dotted]; - 40 -> {52} [color=green]; - 40 -> {52} [style=dashed]; - - subgraph cluster_13 { - color=red - 42 [label="Enter function " style="filled" fillcolor=red]; - 43 [label="Delegated constructor call: super()"]; - 44 [label="Exit function " style="filled" fillcolor=red]; - } - 42 -> {43}; - 43 -> {44}; - - subgraph cluster_14 { - color=red - 45 [label="Enter function getter" style="filled" fillcolor=red]; - 46 [label="Exit function getter" style="filled" fillcolor=red]; - } - 45 -> {46}; - - subgraph cluster_15 { - color=red - 47 [label="Enter property" style="filled" fillcolor=red]; - 48 [label="Const: Int(1)"]; - 49 [label="Exit property" style="filled" fillcolor=red]; - } - 47 -> {48}; - 48 -> {49}; - 49 -> {40} [color=green]; - - subgraph cluster_16 { - color=red - 50 [label="Enter function getter" style="filled" fillcolor=red]; - 51 [label="Exit function getter" style="filled" fillcolor=red]; - } - 50 -> {51}; - - subgraph cluster_17 { - color=red - 52 [label="Enter property" style="filled" fillcolor=red]; - 53 [label="Const: Boolean(true)"]; - 54 [label="Exit property" style="filled" fillcolor=red]; - } - 52 -> {53}; - 53 -> {54}; - 54 -> {41} [color=green]; - + 56 [label="Enter block"]; + 57 [label="Const: Null(null)"]; + 58 [label="Variable declaration: lvar s: R|A?|"]; + 59 [label="Access variable R|/results|"]; + 60 [label="Function call: R|/results|.R|FakeOverride|>|()"]; + 61 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; subgraph cluster_18 { - color=red - 55 [label="Enter function test_0" style="filled" fillcolor=red]; + color=blue + 62 [label="Enter while loop"]; subgraph cluster_19 { color=blue - 56 [label="Enter block"]; - 57 [label="Const: Null(null)"]; - 58 [label="Variable declaration: lvar s: R|A?|"]; - 59 [label="Access variable R|/results|"]; - 60 [label="Function call: R|/results|.R|FakeOverride|>|()"]; - 61 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; - subgraph cluster_20 { + 63 [label="Enter loop condition"]; + 64 [label="Access variable R|/|"]; + 65 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; + 66 [label="Exit loop condition"]; + } + subgraph cluster_20 { + color=blue + 67 [label="Enter loop block"]; + subgraph cluster_21 { color=blue - 62 [label="Enter while loop"]; - subgraph cluster_21 { - color=blue - 63 [label="Enter loop condition"]; - 64 [label="Access variable R|/|"]; - 65 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; - 66 [label="Exit loop condition"]; - } + 68 [label="Enter block"]; + 69 [label="Access variable R|/|"]; + 70 [label="Function call: R|/|.R|FakeOverride|()"]; + 71 [label="Stub" style="filled" fillcolor=gray]; + 72 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; + 73 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 74 [label="Stub" style="filled" fillcolor=gray]; + 75 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; subgraph cluster_22 { color=blue - 67 [label="Enter loop block"]; + 76 [label="Enter when" style="filled" fillcolor=gray]; subgraph cluster_23 { color=blue - 68 [label="Enter block"]; - 69 [label="Access variable R|/|"]; - 70 [label="Function call: R|/|.R|FakeOverride|()"]; - 71 [label="Stub" style="filled" fillcolor=gray]; - 72 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; - 73 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 74 [label="Stub" style="filled" fillcolor=gray]; - 75 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; - subgraph cluster_24 { - color=blue - 76 [label="Enter when" style="filled" fillcolor=gray]; - subgraph cluster_25 { - color=blue - 77 [label="Enter when branch condition " style="filled" fillcolor=gray]; - 78 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 79 [label="Stub" style="filled" fillcolor=gray]; - 80 [label="Access variable #" style="filled" fillcolor=gray]; - 81 [label="Exit when branch condition" style="filled" fillcolor=gray]; - } - 82 [label="Synthetic else branch" style="filled" fillcolor=gray]; - 83 [label="Enter when branch result" style="filled" fillcolor=gray]; - subgraph cluster_26 { - color=blue - 84 [label="Enter block" style="filled" fillcolor=gray]; - 85 [label="Jump: break@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray]; - 86 [label="Stub" style="filled" fillcolor=gray]; - 87 [label="Exit block" style="filled" fillcolor=gray]; - } - 88 [label="Exit when branch result" style="filled" fillcolor=gray]; - 89 [label="Exit when" style="filled" fillcolor=gray]; - } - 90 [label="Exit block" style="filled" fillcolor=gray]; + 77 [label="Enter when branch condition " style="filled" fillcolor=gray]; + 78 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 79 [label="Stub" style="filled" fillcolor=gray]; + 80 [label="Access variable #" style="filled" fillcolor=gray]; + 81 [label="Exit when branch condition" style="filled" fillcolor=gray]; } - 91 [label="Exit loop block" style="filled" fillcolor=gray]; + 82 [label="Synthetic else branch" style="filled" fillcolor=gray]; + 83 [label="Enter when branch result" style="filled" fillcolor=gray]; + subgraph cluster_24 { + color=blue + 84 [label="Enter block" style="filled" fillcolor=gray]; + 85 [label="Jump: break@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray]; + 86 [label="Stub" style="filled" fillcolor=gray]; + 87 [label="Exit block" style="filled" fillcolor=gray]; + } + 88 [label="Exit when branch result" style="filled" fillcolor=gray]; + 89 [label="Exit when" style="filled" fillcolor=gray]; } - 92 [label="Exit whileloop"]; + 90 [label="Exit block" style="filled" fillcolor=gray]; } - 93 [label="Access variable R|/s|"]; - 94 [label="Enter safe call"]; - 95 [label="Postponed enter to lambda"]; - subgraph cluster_27 { - color=blue - 102 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_28 { - color=blue - 103 [label="Enter block"]; - 104 [label="Access variable R|/it|"]; - 105 [label="Access variable R|/A.a|"]; - 106 [label="Exit block"]; - } - 107 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; - } - 96 [label="Call arguments union" style="filled" fillcolor=yellow]; - 97 [label="Postponed exit from lambda"]; - 98 [label="Function call: $subj$.R|kotlin/let|(...)"]; - 99 [label="Exit safe call"]; - 100 [label="Exit block"]; + 91 [label="Exit loop block" style="filled" fillcolor=gray]; } - 101 [label="Exit function test_0" style="filled" fillcolor=red]; + 92 [label="Exit whileloop"]; } - 55 -> {56}; - 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - 59 -> {60}; - 60 -> {61}; - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {65}; - 65 -> {66}; - 66 -> {92 67}; - 67 -> {68}; - 68 -> {69}; - 69 -> {70}; - 70 -> {101}; - 70 -> {71} [style=dotted]; - 71 -> {72} [style=dotted]; - 72 -> {73} [style=dotted]; - 73 -> {101 74} [style=dotted]; - 74 -> {75} [style=dotted]; - 75 -> {76} [style=dotted]; - 76 -> {77} [style=dotted]; - 77 -> {78} [style=dotted]; - 78 -> {101 79} [style=dotted]; - 79 -> {80} [style=dotted]; - 80 -> {81} [style=dotted]; - 81 -> {83 82} [style=dotted]; - 82 -> {89} [style=dotted]; - 83 -> {84} [style=dotted]; - 84 -> {85} [style=dotted]; - 85 -> {92 86} [style=dotted]; - 86 -> {87} [style=dotted]; - 87 -> {88} [style=dotted]; - 88 -> {89} [style=dotted]; - 89 -> {90} [style=dotted]; - 90 -> {91} [style=dotted]; - 91 -> {63} [color=green style=dotted]; - 92 -> {93}; - 93 -> {94 99}; - 94 -> {95}; - 95 -> {102}; - 95 -> {97} [color=red]; - 95 -> {102} [style=dashed]; - 96 -> {98} [color=red]; - 97 -> {98} [color=green]; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; - 102 -> {103}; - 103 -> {104}; - 104 -> {105}; - 105 -> {106}; - 106 -> {107}; - 107 -> {96} [color=red]; - 107 -> {97} [color=green]; - + 93 [label="Access variable R|/s|"]; + 94 [label="Enter safe call"]; + 95 [label="Postponed enter to lambda"]; + subgraph cluster_25 { + color=blue + 102 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_26 { + color=blue + 103 [label="Enter block"]; + 104 [label="Access variable R|/it|"]; + 105 [label="Access variable R|/A.a|"]; + 106 [label="Exit block"]; + } + 107 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 96 [label="Call arguments union" style="filled" fillcolor=yellow]; + 97 [label="Postponed exit from lambda"]; + 98 [label="Function call: $subj$.R|kotlin/let|(...)"]; + 99 [label="Exit safe call"]; + 100 [label="Exit block"]; } + 101 [label="Exit function test_0" style="filled" fillcolor=red]; + } + 55 -> {56}; + 56 -> {57}; + 57 -> {58}; + 58 -> {59}; + 59 -> {60}; + 60 -> {61}; + 61 -> {62}; + 62 -> {63}; + 63 -> {64}; + 64 -> {65}; + 65 -> {66}; + 66 -> {92 67}; + 67 -> {68}; + 68 -> {69}; + 69 -> {70}; + 70 -> {101}; + 70 -> {71} [style=dotted]; + 71 -> {72} [style=dotted]; + 72 -> {73} [style=dotted]; + 73 -> {101 74} [style=dotted]; + 74 -> {75} [style=dotted]; + 75 -> {76} [style=dotted]; + 76 -> {77} [style=dotted]; + 77 -> {78} [style=dotted]; + 78 -> {101 79} [style=dotted]; + 79 -> {80} [style=dotted]; + 80 -> {81} [style=dotted]; + 81 -> {83 82} [style=dotted]; + 82 -> {89} [style=dotted]; + 83 -> {84} [style=dotted]; + 84 -> {85} [style=dotted]; + 85 -> {92 86} [style=dotted]; + 86 -> {87} [style=dotted]; + 87 -> {88} [style=dotted]; + 88 -> {89} [style=dotted]; + 89 -> {90} [style=dotted]; + 90 -> {91} [style=dotted]; + 91 -> {63} [color=green style=dotted]; + 92 -> {93}; + 93 -> {94 99}; + 94 -> {95}; + 95 -> {102}; + 95 -> {97} [color=red]; + 95 -> {102} [style=dashed]; + 96 -> {98} [color=red]; + 97 -> {98} [color=green]; + 98 -> {99}; + 99 -> {100}; + 100 -> {101}; + 102 -> {103}; + 103 -> {104}; + 104 -> {105}; + 105 -> {106}; + 106 -> {107}; + 107 -> {96} [color=red]; + 107 -> {97} [color=green]; + +} 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 889db36bb9e..a654a2366e5 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot @@ -6,160 +6,158 @@ digraph overridenOpenVal_kt { subgraph cluster_0 { color=red 0 [label="Enter class A" style="filled" fillcolor=red]; - subgraph cluster_1 { - color=blue - 1 [label="Part of class initialization"]; - 2 [label="Exit class A" style="filled" fillcolor=red]; - } - 0 -> {1} [color=green]; - 1 -> {2} [style=dotted]; - 1 -> {8} [color=green]; - 1 -> {8} [style=dashed]; + 1 [label="Part of class initialization"]; + 2 [label="Exit class A" style="filled" fillcolor=red]; + } + 0 -> {1} [color=green]; + 1 -> {2} [style=dotted]; + 1 -> {8} [color=green]; + 1 -> {8} [style=dashed]; - subgraph cluster_2 { - color=red - 3 [label="Enter function " style="filled" fillcolor=red]; - 4 [label="Delegated constructor call: super()"]; - 5 [label="Exit function " style="filled" fillcolor=red]; - } - 3 -> {4}; - 4 -> {5}; + subgraph cluster_1 { + color=red + 3 [label="Enter function " style="filled" fillcolor=red]; + 4 [label="Delegated constructor call: super()"]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + 3 -> {4}; + 4 -> {5}; - subgraph cluster_3 { - color=red - 6 [label="Enter function getter" style="filled" fillcolor=red]; - 7 [label="Exit function getter" style="filled" fillcolor=red]; - } - 6 -> {7}; + subgraph cluster_2 { + color=red + 6 [label="Enter function getter" style="filled" fillcolor=red]; + 7 [label="Exit function getter" style="filled" fillcolor=red]; + } + 6 -> {7}; - subgraph cluster_4 { - color=red - 8 [label="Enter property" style="filled" fillcolor=red]; - 9 [label="Access variable R|/x|"]; - 10 [label="Exit property" style="filled" fillcolor=red]; - } - 8 -> {9}; - 9 -> {10}; - 10 -> {2} [color=green]; + subgraph cluster_3 { + color=red + 8 [label="Enter property" style="filled" fillcolor=red]; + 9 [label="Access variable R|/x|"]; + 10 [label="Exit property" style="filled" fillcolor=red]; + } + 8 -> {9}; + 9 -> {10}; + 10 -> {2} [color=green]; - subgraph cluster_5 { - color=red - 11 [label="Enter class B" style="filled" fillcolor=red]; - 12 [label="Exit class B" style="filled" fillcolor=red]; - } - 11 -> {12} [color=green]; + subgraph cluster_4 { + color=red + 11 [label="Enter class B" style="filled" fillcolor=red]; + 12 [label="Exit class B" style="filled" fillcolor=red]; + } + 11 -> {12} [color=green]; - subgraph cluster_6 { - color=red - 13 [label="Enter function " style="filled" fillcolor=red]; - 14 [label="Access variable R|/x|"]; - 15 [label="Delegated constructor call: super(...)"]; - 16 [label="Exit function " style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - 15 -> {16}; + subgraph cluster_5 { + color=red + 13 [label="Enter function " style="filled" fillcolor=red]; + 14 [label="Access variable R|/x|"]; + 15 [label="Delegated constructor call: super(...)"]; + 16 [label="Exit function " style="filled" fillcolor=red]; + } + 13 -> {14}; + 14 -> {15}; + 15 -> {16}; + subgraph cluster_6 { + color=red + 17 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_7 { - color=red - 17 [label="Enter function test_1" style="filled" fillcolor=red]; + color=blue + 18 [label="Enter block"]; subgraph cluster_8 { color=blue - 18 [label="Enter block"]; + 19 [label="Enter when"]; subgraph cluster_9 { color=blue - 19 [label="Enter when"]; - subgraph cluster_10 { - color=blue - 20 [label="Enter when branch condition "]; - 21 [label="Access variable R|/A.x|"]; - 22 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; - 23 [label="Exit when branch condition"]; - } - 24 [label="Synthetic else branch"]; - 25 [label="Enter when branch result"]; - subgraph cluster_11 { - color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/A.x|"]; - 28 [label="Access variable R|kotlin/String.length|"]; - 29 [label="Exit block"]; - } - 30 [label="Exit when branch result"]; - 31 [label="Exit when"]; + 20 [label="Enter when branch condition "]; + 21 [label="Access variable R|/A.x|"]; + 22 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; + 23 [label="Exit when branch condition"]; } - 32 [label="Exit block"]; + 24 [label="Synthetic else branch"]; + 25 [label="Enter when branch result"]; + subgraph cluster_10 { + color=blue + 26 [label="Enter block"]; + 27 [label="Access variable R|/A.x|"]; + 28 [label="Access variable R|kotlin/String.length|"]; + 29 [label="Exit block"]; + } + 30 [label="Exit when branch result"]; + 31 [label="Exit when"]; } - 33 [label="Exit function test_1" style="filled" fillcolor=red]; + 32 [label="Exit block"]; } - 17 -> {18}; - 18 -> {19}; - 19 -> {20}; - 20 -> {21}; - 21 -> {22}; - 22 -> {23}; - 23 -> {25 24}; - 24 -> {31}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; + 33 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 17 -> {18}; + 18 -> {19}; + 19 -> {20}; + 20 -> {21}; + 21 -> {22}; + 22 -> {23}; + 23 -> {25 24}; + 24 -> {31}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + subgraph cluster_11 { + color=red + 34 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_12 { - color=red - 34 [label="Enter function test_2" style="filled" fillcolor=red]; + color=blue + 35 [label="Enter block"]; subgraph cluster_13 { color=blue - 35 [label="Enter block"]; + 36 [label="Enter when"]; subgraph cluster_14 { color=blue - 36 [label="Enter when"]; - subgraph cluster_15 { - color=blue - 37 [label="Enter when branch condition "]; - 38 [label="Access variable R|/b|"]; - 39 [label="Access variable R|/A.x|"]; - 40 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; - 41 [label="Exit when branch condition"]; - } - 42 [label="Synthetic else branch"]; - 43 [label="Enter when branch result"]; - subgraph cluster_16 { - color=blue - 44 [label="Enter block"]; - 45 [label="Access variable R|/b|"]; - 46 [label="Access variable R|/A.x|"]; - 47 [label="Access variable R|kotlin/String.length|"]; - 48 [label="Exit block"]; - } - 49 [label="Exit when branch result"]; - 50 [label="Exit when"]; + 37 [label="Enter when branch condition "]; + 38 [label="Access variable R|/b|"]; + 39 [label="Access variable R|/A.x|"]; + 40 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; + 41 [label="Exit when branch condition"]; } - 51 [label="Exit block"]; + 42 [label="Synthetic else branch"]; + 43 [label="Enter when branch result"]; + subgraph cluster_15 { + color=blue + 44 [label="Enter block"]; + 45 [label="Access variable R|/b|"]; + 46 [label="Access variable R|/A.x|"]; + 47 [label="Access variable R|kotlin/String.length|"]; + 48 [label="Exit block"]; + } + 49 [label="Exit when branch result"]; + 50 [label="Exit when"]; } - 52 [label="Exit function test_2" style="filled" fillcolor=red]; + 51 [label="Exit block"]; } - 34 -> {35}; - 35 -> {36}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {43 42}; - 42 -> {50}; - 43 -> {44}; - 44 -> {45}; - 45 -> {46}; - 46 -> {47}; - 47 -> {48}; - 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {52}; - + 52 [label="Exit function test_2" style="filled" fillcolor=red]; } + 34 -> {35}; + 35 -> {36}; + 36 -> {37}; + 37 -> {38}; + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {43 42}; + 42 -> {50}; + 43 -> {44}; + 44 -> {45}; + 45 -> {46}; + 46 -> {47}; + 47 -> {48}; + 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 36b0c02f339..4cef5af97aa 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 @@ -21,99 +21,95 @@ digraph inAnonymousObject_kt { subgraph cluster_2 { color=blue 9 [label="Enter class " style="filled" fillcolor=red]; - subgraph cluster_3 { + 10 [label="Part of class initialization"]; + 11 [label="Part of class initialization"]; + 12 [label="Exit class " style="filled" fillcolor=red]; + } + 0 -> {1}; + 1 -> {2}; + 1 -> {13 18 16 21 23 29} [color=red]; + 2 -> {3}; + 2 -> {13 29 9} [color=green]; + 2 -> {13 29 9} [style=dashed]; + 3 -> {4}; + 4 -> {5}; + 5 -> {6}; + 6 -> {7}; + 7 -> {8}; + 9 -> {10} [color=green]; + 10 -> {11} [style=dotted]; + 10 -> {18} [color=green]; + 10 -> {18} [style=dashed]; + 11 -> {12} [style=dotted]; + 11 -> {23} [color=green]; + 11 -> {23} [style=dashed]; + + subgraph cluster_3 { + color=red + 13 [label="Enter function " style="filled" fillcolor=red]; + 14 [label="Delegated constructor call: super()"]; + 15 [label="Exit function " style="filled" fillcolor=red]; + } + 13 -> {14}; + 14 -> {15}; + + subgraph cluster_4 { + color=red + 16 [label="Enter function getter" style="filled" fillcolor=red]; + 17 [label="Exit function getter" style="filled" fillcolor=red]; + } + 16 -> {17}; + + subgraph cluster_5 { + color=red + 18 [label="Enter property" style="filled" fillcolor=red]; + 19 [label="Access variable R|/a|"]; + 20 [label="Exit property" style="filled" fillcolor=red]; + } + 18 -> {19}; + 19 -> {20}; + 20 -> {11} [color=green]; + + subgraph cluster_6 { + color=red + 21 [label="Enter function getter" style="filled" fillcolor=red]; + 22 [label="Exit function getter" style="filled" fillcolor=red]; + } + 21 -> {22}; + + subgraph cluster_7 { + color=red + 23 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 10 [label="Part of class initialization"]; - subgraph cluster_4 { - color=blue - 11 [label="Part of class initialization"]; - 12 [label="Exit class " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - 1 -> {13 18 16 21 23 29} [color=red]; - 2 -> {3}; - 2 -> {13 29 9} [color=green]; - 2 -> {13 29 9} [style=dashed]; - 3 -> {4}; - 4 -> {5}; - 5 -> {6}; - 6 -> {7}; - 7 -> {8}; - 9 -> {10} [color=green]; - 10 -> {11} [style=dotted]; - 10 -> {18} [color=green]; - 10 -> {18} [style=dashed]; - 11 -> {12} [style=dotted]; - 11 -> {23} [color=green]; - 11 -> {23} [style=dashed]; - - subgraph cluster_5 { - color=red - 13 [label="Enter function " style="filled" fillcolor=red]; - 14 [label="Delegated constructor call: super()"]; - 15 [label="Exit function " style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - - subgraph cluster_6 { - color=red - 16 [label="Enter function getter" style="filled" fillcolor=red]; - 17 [label="Exit function getter" style="filled" fillcolor=red]; - } - 16 -> {17}; - - subgraph cluster_7 { - color=red - 18 [label="Enter property" style="filled" fillcolor=red]; - 19 [label="Access variable R|/a|"]; - 20 [label="Exit property" style="filled" fillcolor=red]; - } - 18 -> {19}; - 19 -> {20}; - 20 -> {11} [color=green]; - - subgraph cluster_8 { - color=red - 21 [label="Enter function getter" style="filled" fillcolor=red]; - 22 [label="Exit function getter" style="filled" fillcolor=red]; - } - 21 -> {22}; - - subgraph cluster_9 { - color=red - 23 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_10 { - color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/b|"]; - 26 [label="Assignment: R|/.leaked|"]; - 27 [label="Exit block"]; - } - 28 [label="Exit init block" style="filled" fillcolor=red]; - } - 23 -> {24}; - 24 -> {25}; - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {12} [color=green]; - - subgraph cluster_11 { - color=red - 29 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_12 { - color=blue - 30 [label="Enter block"]; - 31 [label="Function call: R|/c|.R|FakeOverride|()"]; - 32 [label="Exit block"]; - } - 33 [label="Exit function run" style="filled" fillcolor=red]; - } - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - + 24 [label="Enter block"]; + 25 [label="Access variable R|/b|"]; + 26 [label="Assignment: R|/.leaked|"]; + 27 [label="Exit block"]; } + 28 [label="Exit init block" style="filled" fillcolor=red]; + } + 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {12} [color=green]; + + subgraph cluster_9 { + color=red + 29 [label="Enter function run" style="filled" fillcolor=red]; + subgraph cluster_10 { + color=blue + 30 [label="Enter block"]; + 31 [label="Function call: R|/c|.R|FakeOverride|()"]; + 32 [label="Exit block"]; + } + 33 [label="Exit function run" style="filled" fillcolor=red]; + } + 29 -> {30}; + 30 -> {31}; + 31 -> {32}; + 32 -> {33}; + +} 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 83436eaadf4..a353567b619 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 @@ -20,107 +20,103 @@ digraph inLocalClass_kt { subgraph cluster_2 { color=blue 8 [label="Enter class LocalClass" style="filled" fillcolor=red]; - subgraph cluster_3 { + 9 [label="Part of class initialization"]; + 10 [label="Part of class initialization"]; + 11 [label="Exit class LocalClass" style="filled" fillcolor=red]; + } + 0 -> {1}; + 1 -> {2}; + 1 -> {14 12 17 19 25 31} [color=red]; + 2 -> {3}; + 2 -> {19 31 8} [color=green]; + 2 -> {19 31 8} [style=dashed]; + 3 -> {4}; + 4 -> {5}; + 5 -> {6}; + 6 -> {7}; + 8 -> {9} [color=green]; + 9 -> {10} [style=dotted]; + 9 -> {14} [color=green]; + 9 -> {14} [style=dashed]; + 10 -> {11} [style=dotted]; + 10 -> {25} [color=green]; + 10 -> {25} [style=dashed]; + + subgraph cluster_3 { + color=red + 12 [label="Enter function getter" style="filled" fillcolor=red]; + 13 [label="Exit function getter" style="filled" fillcolor=red]; + } + 12 -> {13}; + + subgraph cluster_4 { + color=red + 14 [label="Enter property" style="filled" fillcolor=red]; + 15 [label="Access variable R|/a|"]; + 16 [label="Exit property" style="filled" fillcolor=red]; + } + 14 -> {15}; + 15 -> {16}; + 16 -> {10} [color=green]; + + subgraph cluster_5 { + color=red + 17 [label="Enter function getter" style="filled" fillcolor=red]; + 18 [label="Exit function getter" style="filled" fillcolor=red]; + } + 17 -> {18}; + + subgraph cluster_6 { + color=red + 19 [label="Enter function " style="filled" fillcolor=red]; + 20 [label="Delegated constructor call: super()"]; + subgraph cluster_7 { color=blue - 9 [label="Part of class initialization"]; - subgraph cluster_4 { - color=blue - 10 [label="Part of class initialization"]; - 11 [label="Exit class LocalClass" style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - 1 -> {14 12 17 19 25 31} [color=red]; - 2 -> {3}; - 2 -> {19 31 8} [color=green]; - 2 -> {19 31 8} [style=dashed]; - 3 -> {4}; - 4 -> {5}; - 5 -> {6}; - 6 -> {7}; - 8 -> {9} [color=green]; - 9 -> {10} [style=dotted]; - 9 -> {14} [color=green]; - 9 -> {14} [style=dashed]; - 10 -> {11} [style=dotted]; - 10 -> {25} [color=green]; - 10 -> {25} [style=dashed]; - - subgraph cluster_5 { - color=red - 12 [label="Enter function getter" style="filled" fillcolor=red]; - 13 [label="Exit function getter" style="filled" fillcolor=red]; - } - 12 -> {13}; - - subgraph cluster_6 { - color=red - 14 [label="Enter property" style="filled" fillcolor=red]; - 15 [label="Access variable R|/a|"]; - 16 [label="Exit property" style="filled" fillcolor=red]; - } - 14 -> {15}; - 15 -> {16}; - 16 -> {10} [color=green]; - - subgraph cluster_7 { - color=red - 17 [label="Enter function getter" style="filled" fillcolor=red]; - 18 [label="Exit function getter" style="filled" fillcolor=red]; - } - 17 -> {18}; - - subgraph cluster_8 { - color=red - 19 [label="Enter function " style="filled" fillcolor=red]; - 20 [label="Delegated constructor call: super()"]; - subgraph cluster_9 { - color=blue - 21 [label="Enter block"]; - 22 [label="Function call: R|/b|.R|FakeOverride|()"]; - 23 [label="Exit block"]; - } - 24 [label="Exit function " style="filled" fillcolor=red]; - } - 19 -> {20}; - 20 -> {21}; - 21 -> {22}; - 22 -> {23}; - 23 -> {24}; - - subgraph cluster_10 { - color=red - 25 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_11 { - color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/c|"]; - 28 [label="Assignment: R|/LocalClass.leaked|"]; - 29 [label="Exit block"]; - } - 30 [label="Exit init block" style="filled" fillcolor=red]; - } - 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {11} [color=green]; - - subgraph cluster_12 { - color=red - 31 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_13 { - color=blue - 32 [label="Enter block"]; - 33 [label="Function call: R|/d|.R|FakeOverride|()"]; - 34 [label="Exit block"]; - } - 35 [label="Exit function run" style="filled" fillcolor=red]; - } - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; - + 21 [label="Enter block"]; + 22 [label="Function call: R|/b|.R|FakeOverride|()"]; + 23 [label="Exit block"]; } + 24 [label="Exit function " style="filled" fillcolor=red]; + } + 19 -> {20}; + 20 -> {21}; + 21 -> {22}; + 22 -> {23}; + 23 -> {24}; + + subgraph cluster_8 { + color=red + 25 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_9 { + color=blue + 26 [label="Enter block"]; + 27 [label="Access variable R|/c|"]; + 28 [label="Assignment: R|/LocalClass.leaked|"]; + 29 [label="Exit block"]; + } + 30 [label="Exit init block" style="filled" fillcolor=red]; + } + 25 -> {26}; + 26 -> {27}; + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {11} [color=green]; + + subgraph cluster_10 { + color=red + 31 [label="Enter function run" style="filled" fillcolor=red]; + subgraph cluster_11 { + color=blue + 32 [label="Enter block"]; + 33 [label="Function call: R|/d|.R|FakeOverride|()"]; + 34 [label="Exit block"]; + } + 35 [label="Exit function run" style="filled" fillcolor=red]; + } + 31 -> {32}; + 32 -> {33}; + 33 -> {34}; + 34 -> {35}; + +} diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot index f603d6d2ce5..f34ce65fbcc 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot @@ -75,175 +75,173 @@ digraph delegateWithAnonymousObject_kt { subgraph cluster_8 { color=red 22 [label="Enter class IssuesListUserProfile" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 23 [label="Part of class initialization"]; - 24 [label="Exit class IssuesListUserProfile" style="filled" fillcolor=red]; - } - 22 -> {23} [color=green]; - 23 -> {24} [style=dotted]; - 23 -> {71} [color=green]; - 23 -> {71} [style=dashed]; + 23 [label="Part of class initialization"]; + 24 [label="Exit class IssuesListUserProfile" style="filled" fillcolor=red]; + } + 22 -> {23} [color=green]; + 23 -> {24} [style=dotted]; + 23 -> {71} [color=green]; + 23 -> {71} [style=dashed]; - subgraph cluster_10 { - color=red - 25 [label="Enter function " style="filled" fillcolor=red]; - 26 [label="Delegated constructor call: super|>()"]; - 27 [label="Exit function " style="filled" fillcolor=red]; - } - 25 -> {26}; - 26 -> {27}; + subgraph cluster_9 { + color=red + 25 [label="Enter function " style="filled" fillcolor=red]; + 26 [label="Delegated constructor call: super|>()"]; + 27 [label="Exit function " style="filled" fillcolor=red]; + } + 25 -> {26}; + 26 -> {27}; - subgraph cluster_11 { - color=red - 35 [label="Enter function " style="filled" fillcolor=red]; - 36 [label="Delegated constructor call: super()"]; - 37 [label="Exit function " style="filled" fillcolor=red]; - } - 35 -> {36}; - 36 -> {37}; + subgraph cluster_10 { + color=red + 35 [label="Enter function " style="filled" fillcolor=red]; + 36 [label="Delegated constructor call: super()"]; + 37 [label="Exit function " style="filled" fillcolor=red]; + } + 35 -> {36}; + 36 -> {37}; + subgraph cluster_11 { + color=red + 38 [label="Enter function getValue" style="filled" fillcolor=red]; subgraph cluster_12 { - color=red - 38 [label="Enter function getValue" style="filled" fillcolor=red]; - subgraph cluster_13 { - color=blue - 39 [label="Enter block"]; - 40 [label="Function call: R|/IssueListView.IssueListView|()"]; - 41 [label="Jump: ^getValue R|/IssueListView.IssueListView|()"]; - 42 [label="Stub" style="filled" fillcolor=gray]; - 43 [label="Exit block" style="filled" fillcolor=gray]; - } - 44 [label="Exit function getValue" style="filled" fillcolor=red]; + color=blue + 39 [label="Enter block"]; + 40 [label="Function call: R|/IssueListView.IssueListView|()"]; + 41 [label="Jump: ^getValue R|/IssueListView.IssueListView|()"]; + 42 [label="Stub" style="filled" fillcolor=gray]; + 43 [label="Exit block" style="filled" fillcolor=gray]; } - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {44}; - 41 -> {42} [style=dotted]; - 42 -> {43} [style=dotted]; - 43 -> {44} [style=dotted]; + 44 [label="Exit function getValue" style="filled" fillcolor=red]; + } + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {44}; + 41 -> {42} [style=dotted]; + 42 -> {43} [style=dotted]; + 43 -> {44} [style=dotted]; + subgraph cluster_13 { + color=red + 45 [label="Enter function setValue" style="filled" fillcolor=red]; subgraph cluster_14 { - color=red - 45 [label="Enter function setValue" style="filled" fillcolor=red]; - subgraph cluster_15 { - color=blue - 46 [label="Enter block"]; - 47 [label="Function call: R|/IssueListView.IssueListView|()"]; - 48 [label="Access variable R|/value|"]; - 49 [label="Function call: R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(...)"]; - 50 [label="Jump: ^setValue R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(R|/value|)"]; - 51 [label="Stub" style="filled" fillcolor=gray]; - 52 [label="Exit block" style="filled" fillcolor=gray]; - } - 53 [label="Exit function setValue" style="filled" fillcolor=red]; + color=blue + 46 [label="Enter block"]; + 47 [label="Function call: R|/IssueListView.IssueListView|()"]; + 48 [label="Access variable R|/value|"]; + 49 [label="Function call: R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(...)"]; + 50 [label="Jump: ^setValue R|/IssueListView.IssueListView|().R|/IssueListView.updateFrom|(R|/value|)"]; + 51 [label="Stub" style="filled" fillcolor=gray]; + 52 [label="Exit block" style="filled" fillcolor=gray]; } - 45 -> {46}; - 46 -> {47}; - 47 -> {48}; - 48 -> {49}; - 49 -> {50}; - 50 -> {53}; - 50 -> {51} [style=dotted]; - 51 -> {52} [style=dotted]; - 52 -> {53} [style=dotted]; + 53 [label="Exit function setValue" style="filled" fillcolor=red]; + } + 45 -> {46}; + 46 -> {47}; + 47 -> {48}; + 48 -> {49}; + 49 -> {50}; + 50 -> {53}; + 50 -> {51} [style=dotted]; + 51 -> {52} [style=dotted]; + 52 -> {53} [style=dotted]; + subgraph cluster_15 { + color=red + 54 [label="Enter function getter" style="filled" fillcolor=red]; subgraph cluster_16 { - color=red - 54 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_17 { - color=blue - 55 [label="Enter block"]; - 56 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; - 57 [label="Access variable this@R|/IssuesListUserProfile|"]; - 58 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(...)"]; - 59 [label="Jump: ^ this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(this@R|/IssuesListUserProfile|, ::R|/IssuesListUserProfile.issueListView|)"]; - 60 [label="Stub" style="filled" fillcolor=gray]; - 61 [label="Exit block" style="filled" fillcolor=gray]; - } - 62 [label="Exit function getter" style="filled" fillcolor=red]; + color=blue + 55 [label="Enter block"]; + 56 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; + 57 [label="Access variable this@R|/IssuesListUserProfile|"]; + 58 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(...)"]; + 59 [label="Jump: ^ this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(this@R|/IssuesListUserProfile|, ::R|/IssuesListUserProfile.issueListView|)"]; + 60 [label="Stub" style="filled" fillcolor=gray]; + 61 [label="Exit block" style="filled" fillcolor=gray]; } - 54 -> {55}; - 55 -> {56}; - 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - 59 -> {62}; - 59 -> {60} [style=dotted]; - 60 -> {61} [style=dotted]; - 61 -> {62} [style=dotted]; + 62 [label="Exit function getter" style="filled" fillcolor=red]; + } + 54 -> {55}; + 55 -> {56}; + 56 -> {57}; + 57 -> {58}; + 58 -> {59}; + 59 -> {62}; + 59 -> {60} [style=dotted]; + 60 -> {61} [style=dotted]; + 61 -> {62} [style=dotted]; + subgraph cluster_17 { + color=red + 63 [label="Enter function setter" style="filled" fillcolor=red]; subgraph cluster_18 { - color=red - 63 [label="Enter function setter" style="filled" fillcolor=red]; - subgraph cluster_19 { - color=blue - 64 [label="Enter block"]; - 65 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; - 66 [label="Access variable this@R|/IssuesListUserProfile|"]; - 67 [label="Access variable R|/issueListView|"]; - 68 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(...)"]; - 69 [label="Exit block"]; - } - 70 [label="Exit function setter" style="filled" fillcolor=red]; + color=blue + 64 [label="Enter block"]; + 65 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; + 66 [label="Access variable this@R|/IssuesListUserProfile|"]; + 67 [label="Access variable R|/issueListView|"]; + 68 [label="Function call: this@R|/IssuesListUserProfile|.D|/IssuesListUserProfile.issueListView|.R|FakeOverride|(...)"]; + 69 [label="Exit block"]; } - 63 -> {64}; - 64 -> {65}; - 65 -> {66}; - 66 -> {67}; - 67 -> {68}; - 68 -> {69}; - 69 -> {70}; + 70 [label="Exit function setter" style="filled" fillcolor=red]; + } + 63 -> {64}; + 64 -> {65}; + 65 -> {66}; + 66 -> {67}; + 67 -> {68}; + 68 -> {69}; + 69 -> {70}; + subgraph cluster_19 { + color=red + 71 [label="Enter property" style="filled" fillcolor=red]; + 72 [label="Postponed enter to lambda"]; + 73 [label="Postponed exit from lambda"]; + 74 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)"]; + 75 [label="Access variable this@R|/IssuesListUserProfile|"]; + 76 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...).#(...)"]; + 77 [label="Postponed enter to lambda"]; subgraph cluster_20 { - color=red - 71 [label="Enter property" style="filled" fillcolor=red]; - 72 [label="Postponed enter to lambda"]; - 73 [label="Postponed exit from lambda"]; - 74 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)"]; - 75 [label="Access variable this@R|/IssuesListUserProfile|"]; - 76 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...).#(...)"]; - 77 [label="Postponed enter to lambda"]; + color=blue + 28 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue - 28 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_22 { - color=blue - 29 [label="Enter block"]; - 30 [label="Exit anonymous object"]; - 31 [label="Exit block"]; - } - 32 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 29 [label="Enter block"]; + 30 [label="Exit anonymous object"]; + 31 [label="Exit block"]; } - subgraph cluster_23 { - color=blue - 33 [label="Enter class " style="filled" fillcolor=red]; - 34 [label="Exit class " style="filled" fillcolor=red]; - } - 78 [label="Postponed exit from lambda"]; - 79 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)"]; - 80 [label="Exit property" style="filled" fillcolor=red]; + 32 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 71 -> {72}; - 72 -> {73}; - 72 -> {} [style=dashed]; - 73 -> {74}; - 74 -> {75}; - 75 -> {76}; - 76 -> {77}; - 77 -> {78 28}; - 77 -> {28} [style=dashed]; - 78 -> {79}; - 79 -> {80}; - 80 -> {24} [color=green]; - 28 -> {29}; - 29 -> {30}; - 29 -> {35 38 45} [color=red]; - 30 -> {31}; - 30 -> {35 38 45 33} [color=green]; - 30 -> {35 38 45 33} [style=dashed]; - 31 -> {32}; - 33 -> {34} [color=green]; - + subgraph cluster_22 { + color=blue + 33 [label="Enter class " style="filled" fillcolor=red]; + 34 [label="Exit class " style="filled" fillcolor=red]; + } + 78 [label="Postponed exit from lambda"]; + 79 [label="Function call: this@R|/IssuesListUserProfile|.R|/delegate|(...)"]; + 80 [label="Exit property" style="filled" fillcolor=red]; } + 71 -> {72}; + 72 -> {73}; + 72 -> {} [style=dashed]; + 73 -> {74}; + 74 -> {75}; + 75 -> {76}; + 76 -> {77}; + 77 -> {78 28}; + 77 -> {28} [style=dashed]; + 78 -> {79}; + 79 -> {80}; + 80 -> {24} [color=green]; + 28 -> {29}; + 29 -> {30}; + 29 -> {35 38 45} [color=red]; + 30 -> {31}; + 30 -> {35 38 45 33} [color=green]; + 30 -> {35 38 45 33} [style=dashed]; + 31 -> {32}; + 33 -> {34} [color=green]; + +} diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot index c86705eaf13..a767f58a989 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot @@ -53,118 +53,116 @@ digraph plusAssignWithLambdaInRhs_kt { subgraph cluster_4 { color=red 16 [label="Enter class A" style="filled" fillcolor=red]; - subgraph cluster_5 { - color=blue - 17 [label="Part of class initialization"]; - 18 [label="Exit class A" style="filled" fillcolor=red]; - } - 16 -> {17} [color=green]; - 17 -> {18} [style=dotted]; - 17 -> {24} [color=green]; - 17 -> {24} [style=dashed]; + 17 [label="Part of class initialization"]; + 18 [label="Exit class A" style="filled" fillcolor=red]; + } + 16 -> {17} [color=green]; + 17 -> {18} [style=dotted]; + 17 -> {24} [color=green]; + 17 -> {24} [style=dashed]; - subgraph cluster_6 { - color=red - 19 [label="Enter function " style="filled" fillcolor=red]; - 20 [label="Delegated constructor call: super()"]; - 21 [label="Exit function " style="filled" fillcolor=red]; - } - 19 -> {20}; - 20 -> {21}; + subgraph cluster_5 { + color=red + 19 [label="Enter function " style="filled" fillcolor=red]; + 20 [label="Delegated constructor call: super()"]; + 21 [label="Exit function " style="filled" fillcolor=red]; + } + 19 -> {20}; + 20 -> {21}; - subgraph cluster_7 { - color=red - 22 [label="Enter function getter" style="filled" fillcolor=red]; - 23 [label="Exit function getter" style="filled" fillcolor=red]; - } - 22 -> {23}; + subgraph cluster_6 { + color=red + 22 [label="Enter function getter" style="filled" fillcolor=red]; + 23 [label="Exit function getter" style="filled" fillcolor=red]; + } + 22 -> {23}; - subgraph cluster_8 { - color=red - 24 [label="Enter property" style="filled" fillcolor=red]; - 25 [label="Access variable R|/executor|"]; - 26 [label="Exit property" style="filled" fillcolor=red]; - } - 24 -> {25}; - 25 -> {26}; - 26 -> {18} [color=green]; + subgraph cluster_7 { + color=red + 24 [label="Enter property" style="filled" fillcolor=red]; + 25 [label="Access variable R|/executor|"]; + 26 [label="Exit property" style="filled" fillcolor=red]; + } + 24 -> {25}; + 25 -> {26}; + 26 -> {18} [color=green]; + subgraph cluster_8 { + color=red + 27 [label="Enter function postpone" style="filled" fillcolor=red]; subgraph cluster_9 { - color=red - 27 [label="Enter function postpone" style="filled" fillcolor=red]; + color=blue + 28 [label="Enter block"]; + 29 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()"]; + 30 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; + 31 [label="Postponed enter to lambda"]; subgraph cluster_10 { color=blue - 28 [label="Enter block"]; - 29 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()"]; - 30 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; - 31 [label="Postponed enter to lambda"]; + 38 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_11 { color=blue - 38 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 39 [label="Enter block"]; + 40 [label="Access variable R|/queue|"]; + 41 [label="Postponed enter to lambda"]; subgraph cluster_12 { color=blue - 39 [label="Enter block"]; - 40 [label="Access variable R|/queue|"]; - 41 [label="Postponed enter to lambda"]; + 46 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; subgraph cluster_13 { color=blue - 46 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_14 { - color=blue - 47 [label="Enter block"]; - 48 [label="Function call: R|/computation|.R|FakeOverride|()"]; - 49 [label="Function call: R|/resolve|.R|FakeOverride|(...)"]; - 50 [label="Exit block"]; - } - 51 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 47 [label="Enter block"]; + 48 [label="Function call: R|/computation|.R|FakeOverride|()"]; + 49 [label="Function call: R|/resolve|.R|FakeOverride|(...)"]; + 50 [label="Exit block"]; } - 42 [label="Postponed exit from lambda"]; - 43 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)"]; - 44 [label="Exit block"]; + 51 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 45 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 42 [label="Postponed exit from lambda"]; + 43 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)"]; + 44 [label="Exit block"]; } - 32 [label="Postponed exit from lambda"]; - 33 [label="Function call: R|/A.A|(...)"]; - 34 [label="Jump: ^postpone R|/A.A|( = A@fun (resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { + 45 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 32 [label="Postponed exit from lambda"]; + 33 [label="Function call: R|/A.A|(...)"]; + 34 [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|FakeOverride|(R|/computation|.R|FakeOverride|()) } ) } )"]; - 35 [label="Stub" style="filled" fillcolor=gray]; - 36 [label="Exit block" style="filled" fillcolor=gray]; - } - 37 [label="Exit function postpone" style="filled" fillcolor=red]; + 35 [label="Stub" style="filled" fillcolor=gray]; + 36 [label="Exit block" style="filled" fillcolor=gray]; } - 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32 38}; - 31 -> {38} [style=dashed]; - 32 -> {33}; - 33 -> {34}; - 34 -> {37}; - 34 -> {35} [style=dotted]; - 35 -> {36} [style=dotted]; - 36 -> {37} [style=dotted]; - 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {46}; - 41 -> {42} [color=red]; - 41 -> {46} [style=dashed]; - 42 -> {43}; - 43 -> {44}; - 44 -> {45}; - 46 -> {51 47}; - 47 -> {48}; - 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {42} [color=green]; - 51 -> {46} [color=green style=dashed]; - + 37 [label="Exit function postpone" style="filled" fillcolor=red]; } + 27 -> {28}; + 28 -> {29}; + 29 -> {30}; + 30 -> {31}; + 31 -> {32 38}; + 31 -> {38} [style=dashed]; + 32 -> {33}; + 33 -> {34}; + 34 -> {37}; + 34 -> {35} [style=dotted]; + 35 -> {36} [style=dotted]; + 36 -> {37} [style=dotted]; + 38 -> {39}; + 39 -> {40}; + 40 -> {41}; + 41 -> {46}; + 41 -> {42} [color=red]; + 41 -> {46} [style=dashed]; + 42 -> {43}; + 43 -> {44}; + 44 -> {45}; + 46 -> {51 47}; + 47 -> {48}; + 48 -> {49}; + 49 -> {50}; + 50 -> {51}; + 51 -> {42} [color=green]; + 51 -> {46} [color=green style=dashed]; + +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt index 60f795f7e80..d79914ad85c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt @@ -232,7 +232,7 @@ class AnonymousObjectExitNode(owner: ControlFlowGraph, override val fir: FirAnon // ----------------------------------- Initialization ----------------------------------- -class PartOfClassInitializationNode(owner: ControlFlowGraph, override val fir: FirControlFlowGraphOwner, level: Int, id: Int) : CFGNodeWithCfgOwner(owner, level, id), EnterNodeMarker { +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) }