From 74758278d79316931f44ce8e388271277456e2be Mon Sep 17 00:00:00 2001 From: pyos Date: Fri, 9 Dec 2022 13:22:17 +0100 Subject: [PATCH] FIR CFA: attach method graphs to class exit node Even for non-local classes. This ensures that the CFG edges in this case will only go to a subgraph, not to an unrelated graph. --- .../resolve/cfg/annotatedLocalClass.dot | 21 +- .../testData/resolve/cfg/complex.dot | 15 +- .../testData/resolve/cfg/initBlock.dot | 46 +- .../resolve/cfg/initBlockAndInPlaceLambda.dot | 27 +- .../cfg/innerClassInAnonymousObject.dot | 33 +- .../resolve/cfg/lambdaReturningObject.dot | 15 +- .../resolve/cfg/localClassesWithImplicit.dot | 11 +- .../cfg/postponedLambdaInConstructor.dot | 87 +-- .../resolve/cfg/postponedLambdaInReturn.dot | 15 +- .../resolve/cfg/propertiesAndInitBlocks.dot | 16 +- .../resolve/cfg/returnValuesFromLambda.dot | 34 +- .../testData/resolve/cfg/safeCalls.dot | 28 +- .../positive/exhaustiveWhenAndDNNType.dot | 34 +- .../problems/secondaryConstructorCfg.dot | 70 +- .../testData/resolve/smartcasts/bangbang.dot | 15 +- .../smartcasts/booleans/booleanOperators.dot | 58 +- .../smartcasts/booleans/equalsToBoolean.dot | 15 +- .../booleans/jumpFromRhsOfOperator.dot | 15 +- .../boundSmartcasts/boundSmartcasts.dot | 51 +- .../boundSmartcastsInBranches.dot | 21 +- .../boundSmartcasts/functionCallBound.dot | 36 +- .../smartcasts/controlStructures/elvis.dot | 15 +- .../smartcasts/controlStructures/returns.dot | 45 +- .../smartcastFromArgument.dot | 15 +- .../smartcasts/controlStructures/when.dot | 30 +- .../resolve/smartcasts/equalsAndIdentity.dot | 15 +- .../smartcasts/lambdas/inPlaceLambdas.dot | 30 +- .../smartcasts/lambdas/lambdaInWhenBranch.dot | 112 ++-- .../loops/dataFlowInfoFromWhileCondition.dot | 15 +- .../resolve/smartcasts/loops/endlessLoops.dot | 15 +- .../resolve/smartcasts/multipleCasts.dot | 30 +- .../resolve/smartcasts/nullability.dot | 210 +++--- .../receivers/implicitReceivers.dot | 56 +- .../smartcasts/safeCalls/assignSafeCall.dot | 107 ++- .../smartcasts/safeCalls/safeCalls.dot | 41 +- .../resolve/smartcasts/smartCastInInit.dot | 38 +- .../smartcasts/smartcastInByClause.dot | 49 +- .../resolve/smartcasts/smartcastToNothing.dot | 23 +- .../smartcasts/stability/overridenOpenVal.dot | 53 +- .../variables/delayedAssignment.dot | 28 +- .../bad/callsInPlace/inAnonymousObject.dot | 5 +- .../bad/callsInPlace/inLocalClass.dot | 56 +- .../delegates/delegateWithAnonymousObject.dot | 93 +-- .../inference/plusAssignWithLambdaInRhs.dot | 21 +- .../dfa/cfg/ControlFlowGraphBuilder.kt | 39 +- .../kotlin/fir/resolve/dfa/cfg/CFGNode.kt | 4 +- .../codegen/box/smartCasts/kt44814.dot | 618 +++++++++--------- 47 files changed, 1245 insertions(+), 1181 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/annotatedLocalClass.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/annotatedLocalClass.dot index 85e1de12083..7937b68d580 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/annotatedLocalClass.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/annotatedLocalClass.dot @@ -5,20 +5,21 @@ digraph annotatedLocalClass_kt { subgraph cluster_0 { color=red + 3 [label="Enter class Ann" style="filled" fillcolor=red]; + 4 [label="Exit class Ann" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class Ann" style="filled" fillcolor=red]; - 4 [label="Exit class Ann" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { color=red 5 [label="Enter function foo" style="filled" fillcolor=red]; @@ -80,11 +81,13 @@ digraph annotatedLocalClass_kt { 18 -> {19}; 18 -> {25} [color=red]; 19 -> {20}; - 19 -> {23 25} [color=green]; - 19 -> {23 25} [style=dashed]; + 19 -> {23} [color=green]; + 19 -> {23} [style=dashed]; 20 -> {21}; 21 -> {22}; 23 -> {24} [color=green]; + 24 -> {25} [color=green]; + 24 -> {25} [style=dashed]; 25 -> {26}; 26 -> {27}; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/complex.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/complex.dot index 5947d6ab254..e34258e620f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/complex.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/complex.dot @@ -4,18 +4,19 @@ digraph complex_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function close" style="filled" fillcolor=red]; - 1 [label="Exit function close" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class AutoCloseable" style="filled" fillcolor=red]; 3 [label="Exit class AutoCloseable" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function close" style="filled" fillcolor=red]; + 1 [label="Exit function close" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot index 16d414e9bdf..bc0a1e6fa03 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlock.dot @@ -4,22 +4,13 @@ digraph initBlock_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { color=red 9 [label="Enter class Foo" style="filled" fillcolor=red]; 10 [label="Part of class initialization"]; - subgraph cluster_2 { + subgraph cluster_1 { color=blue 3 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_3 { + subgraph cluster_2 { color=blue 4 [label="Enter block"]; 5 [label="Const: Int(1)"]; @@ -30,34 +21,35 @@ digraph initBlock_kt { } 11 [label="Exit class Foo" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } 9 -> {10} [color=green]; 10 -> {3} [color=green]; 10 -> {11} [style=dotted]; 10 -> {3} [style=dashed]; + 11 -> {0} [color=green]; + 11 -> {0} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {6}; 6 -> {7}; 7 -> {8}; 8 -> {11} [color=green]; + 0 -> {1}; + 1 -> {2}; subgraph cluster_4 { - color=red - 12 [label="Enter function " style="filled" fillcolor=red]; - 13 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 14 [label="Exit function " style="filled" fillcolor=red]; - } - 12 -> {13}; - 13 -> {14}; - - subgraph cluster_5 { color=red 26 [label="Enter class Bar" style="filled" fillcolor=red]; 27 [label="Part of class initialization"]; - subgraph cluster_6 { + subgraph cluster_5 { color=blue 15 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_7 { + subgraph cluster_6 { color=blue 16 [label="Enter block"]; 17 [label="Const: Int(1)"]; @@ -73,10 +65,18 @@ digraph initBlock_kt { } 28 [label="Exit class Bar" style="filled" fillcolor=red style="filled" fillcolor=gray]; } + subgraph cluster_7 { + color=blue + 12 [label="Enter function " style="filled" fillcolor=red style="filled" fillcolor=gray]; + 13 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 14 [label="Exit function " style="filled" fillcolor=red]; + } 26 -> {27} [color=green]; 27 -> {15} [color=green]; 27 -> {28} [style=dotted]; 27 -> {15} [style=dashed]; + 28 -> {12} [style=dotted]; + 28 -> {12} [style=dashed]; 15 -> {16}; 16 -> {17}; 17 -> {18}; @@ -88,5 +88,7 @@ digraph initBlock_kt { 23 -> {24} [style=dotted]; 24 -> {25} [style=dotted]; 25 -> {28} [style=dotted]; + 12 -> {13}; + 13 -> {14}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 008c157614c..59371e10aeb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -18,32 +18,23 @@ digraph initBlockAndInPlaceLambda_kt { 2 -> {3} [color=green]; subgraph cluster_2 { - color=red - 4 [label="Enter function " style="filled" fillcolor=red]; - 5 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 6 [label="Exit function " style="filled" fillcolor=red]; - } - 4 -> {5}; - 5 -> {6}; - - subgraph cluster_3 { color=red 26 [label="Enter class C" style="filled" fillcolor=red]; 27 [label="Part of class initialization"]; - subgraph cluster_4 { + subgraph cluster_3 { color=blue 7 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_5 { + subgraph cluster_4 { color=blue 8 [label="Enter block"]; 9 [label="Access variable R|/a|"]; 10 [label="Access variable R|/A.b|"]; 11 [label="Enter safe call"]; 12 [label="Postponed enter to lambda"]; - subgraph cluster_6 { + subgraph cluster_5 { color=blue 19 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_7 { + subgraph cluster_6 { color=blue 20 [label="Enter block"]; 21 [label="Access variable R|/a|"]; @@ -63,10 +54,18 @@ digraph initBlockAndInPlaceLambda_kt { } 28 [label="Exit class C" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 4 [label="Enter function " style="filled" fillcolor=red]; + 5 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 6 [label="Exit function " style="filled" fillcolor=red]; + } 26 -> {27} [color=green]; 27 -> {7} [color=green]; 27 -> {28} [style=dotted]; 27 -> {7} [style=dashed]; + 28 -> {4} [color=green]; + 28 -> {4} [style=dashed]; 7 -> {8}; 8 -> {9}; 9 -> {10}; @@ -88,5 +87,7 @@ digraph initBlockAndInPlaceLambda_kt { 23 -> {24}; 24 -> {25}; 25 -> {13}; + 4 -> {5}; + 5 -> {6}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot index 70ec9dd2ee4..0cd687a7d2c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot @@ -5,15 +5,11 @@ digraph innerClassInAnonymousObject_kt { subgraph cluster_0 { color=red - 3 [label="Enter function " style="filled" fillcolor=red]; - 4 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 5 [label="Exit function " style="filled" fillcolor=red]; + 10 [label="Enter class Nested" style="filled" fillcolor=red]; + 11 [label="Exit class Nested" style="filled" fillcolor=red]; } - 3 -> {4}; - 4 -> {5}; - subgraph cluster_1 { - color=red + color=blue 6 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_2 { color=blue @@ -22,17 +18,21 @@ digraph innerClassInAnonymousObject_kt { } 9 [label="Exit function foo" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 3 [label="Enter function " style="filled" fillcolor=red]; + 4 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + 10 -> {11} [color=green]; + 11 -> {3 6} [color=green]; + 11 -> {3 6} [style=dashed]; + 3 -> {4}; + 4 -> {5}; 6 -> {7}; 7 -> {8}; 8 -> {9}; - subgraph cluster_3 { - color=red - 10 [label="Enter class Nested" style="filled" fillcolor=red]; - 11 [label="Exit class Nested" style="filled" fillcolor=red]; - } - 10 -> {11} [color=green]; - subgraph cluster_4 { color=red 14 [label="Enter property" style="filled" fillcolor=red]; @@ -58,11 +58,10 @@ digraph innerClassInAnonymousObject_kt { 15 -> {16} [color=red]; 15 -> {12} [style=dashed]; 16 -> {17}; - 16 -> {0} [color=green]; - 16 -> {0} [style=dashed]; 17 -> {18}; 12 -> {13} [color=green]; - 13 -> {16} [color=green]; + 13 -> {0 16} [color=green]; + 13 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaReturningObject.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaReturningObject.dot index a7cf10c846d..738aa3df170 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaReturningObject.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaReturningObject.dot @@ -33,20 +33,21 @@ digraph lambdaReturningObject_kt { subgraph cluster_4 { color=red + 11 [label="Enter class IrStarProjectionImpl" style="filled" fillcolor=red]; + 12 [label="Exit class IrStarProjectionImpl" style="filled" fillcolor=red]; + } + subgraph cluster_5 { + color=blue 8 [label="Enter function " style="filled" fillcolor=red]; 9 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 10 [label="Exit function " style="filled" fillcolor=red]; } + 11 -> {12} [color=green]; + 12 -> {8} [color=green]; + 12 -> {8} [style=dashed]; 8 -> {9}; 9 -> {10}; - subgraph cluster_5 { - color=red - 11 [label="Enter class IrStarProjectionImpl" style="filled" fillcolor=red]; - 12 [label="Exit class IrStarProjectionImpl" style="filled" fillcolor=red]; - } - 11 -> {12} [color=green]; - subgraph cluster_6 { color=red 13 [label="Enter function MyOut" style="filled" fillcolor=red]; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot index 14b0122a135..88c0389b64c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot @@ -353,19 +353,19 @@ digraph localClassesWithImplicit_kt { 21 -> {22}; 21 -> {31 34 71 90} [color=red]; 22 -> {23}; - 22 -> {29 31 34 71 90} [color=green]; + 22 -> {29} [color=green]; 22 -> {99 102 139 158} [color=red]; - 22 -> {29 31 34 71 90} [style=dashed]; + 22 -> {29} [style=dashed]; 23 -> {97} [color=green]; 23 -> {24} [color=red]; 23 -> {97} [style=dashed]; 24 -> {25}; - 24 -> {99 102 139 158} [color=green]; - 24 -> {99 102 139 158} [style=dashed]; 25 -> {26}; 26 -> {27}; 27 -> {28}; 29 -> {30} [color=green]; + 30 -> {31 34 71 90} [color=green]; + 30 -> {31 34 71 90} [style=dashed]; 31 -> {32}; 32 -> {33}; 34 -> {35}; @@ -436,7 +436,8 @@ digraph localClassesWithImplicit_kt { 94 -> {95} [style=dotted]; 95 -> {96} [style=dotted]; 97 -> {98} [color=green]; - 98 -> {24} [color=green]; + 98 -> {24 99 102 139 158} [color=green]; + 98 -> {99 102 139 158} [style=dashed]; 99 -> {100}; 100 -> {101}; 102 -> {103}; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot index 8be3092512c..c73bb38af45 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot @@ -5,36 +5,60 @@ digraph postponedLambdaInConstructor_kt { subgraph cluster_0 { color=red + 3 [label="Enter class A" style="filled" fillcolor=red]; + 4 [label="Exit class A" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class A" style="filled" fillcolor=red]; - 4 [label="Exit class A" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { color=red + 30 [label="Enter class B" style="filled" fillcolor=red]; + 31 [label="Part of class initialization"]; + subgraph cluster_3 { + color=blue + 22 [label="Enter property" style="filled" fillcolor=red]; + 23 [label="Access variable R|/s|"]; + 24 [label="Exit property" style="filled" fillcolor=red]; + } + 32 [label="Exit class B" style="filled" fillcolor=red]; + } + subgraph cluster_4 { + color=blue + 25 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_5 { + color=blue + 26 [label="Enter block"]; + 27 [label="Function call: this@R|/B|.R|/B.foo|()" style="filled" fillcolor=yellow]; + 28 [label="Exit block"]; + } + 29 [label="Exit function foo" style="filled" fillcolor=red]; + } + subgraph cluster_6 { + color=blue 5 [label="Enter function " style="filled" fillcolor=red]; 6 [label="Access variable R|/s|"]; 7 [label="Postponed enter to lambda"]; - subgraph cluster_3 { + subgraph cluster_7 { color=blue 12 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_4 { + subgraph cluster_8 { color=blue 13 [label="Enter block"]; 14 [label="Exit anonymous function expression"]; - subgraph cluster_5 { + subgraph cluster_9 { color=blue 17 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_6 { + subgraph cluster_10 { color=blue 18 [label="Enter block"]; 19 [label="Access variable R|/it|"]; @@ -51,6 +75,15 @@ digraph postponedLambdaInConstructor_kt { 10 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; 11 [label="Exit function " style="filled" fillcolor=red]; } + 30 -> {31} [color=green]; + 31 -> {22} [color=green]; + 31 -> {32} [style=dotted]; + 31 -> {22} [style=dashed]; + 32 -> {5 25} [color=green]; + 32 -> {5 25} [style=dashed]; + 22 -> {23}; + 23 -> {24}; + 24 -> {32} [color=green]; 5 -> {6}; 6 -> {7}; 7 -> {9 12}; @@ -70,41 +103,9 @@ digraph postponedLambdaInConstructor_kt { 18 -> {19}; 19 -> {20}; 20 -> {21}; - - subgraph cluster_7 { - color=red - 25 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_8 { - color=blue - 26 [label="Enter block"]; - 27 [label="Function call: this@R|/B|.R|/B.foo|()" style="filled" fillcolor=yellow]; - 28 [label="Exit block"]; - } - 29 [label="Exit function foo" style="filled" fillcolor=red]; - } 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; - subgraph cluster_9 { - color=red - 30 [label="Enter class B" style="filled" fillcolor=red]; - 31 [label="Part of class initialization"]; - subgraph cluster_10 { - color=blue - 22 [label="Enter property" style="filled" fillcolor=red]; - 23 [label="Access variable R|/s|"]; - 24 [label="Exit property" style="filled" fillcolor=red]; - } - 32 [label="Exit class B" style="filled" fillcolor=red]; - } - 30 -> {31} [color=green]; - 31 -> {22} [color=green]; - 31 -> {32} [style=dotted]; - 31 -> {22} [style=dashed]; - 22 -> {23}; - 23 -> {24}; - 24 -> {32} [color=green]; - } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInReturn.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInReturn.dot index 92fb48fda64..f8335db48da 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInReturn.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInReturn.dot @@ -5,20 +5,21 @@ digraph postponedLambdaInReturn_kt { subgraph cluster_0 { color=red + 3 [label="Enter class Lateinit" style="filled" fillcolor=red]; + 4 [label="Exit class Lateinit" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class Lateinit" style="filled" fillcolor=red]; - 4 [label="Exit class Lateinit" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { color=red 5 [label="Enter function build" style="filled" fillcolor=red]; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot index 5274ed40eb6..be878697e93 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -136,7 +136,7 @@ digraph propertiesAndInitBlocks_kt { } subgraph cluster_15 { color=blue - 72 [label="Enter function " style="filled" fillcolor=red]; + 72 [label="Enter function " style="filled" fillcolor=red style="filled" fillcolor=gray]; 73 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 74 [label="Exit function " style="filled" fillcolor=red]; } @@ -144,13 +144,15 @@ digraph propertiesAndInitBlocks_kt { 58 -> {59}; 58 -> {65 72} [color=red]; 59 -> {60}; - 59 -> {62 72} [color=green]; - 59 -> {62 72} [style=dashed]; + 59 -> {62} [color=green]; + 59 -> {62} [style=dashed]; 60 -> {61}; 62 -> {63} [color=green]; 63 -> {65} [color=green]; 63 -> {64} [style=dotted]; 63 -> {65} [style=dashed]; + 64 -> {72} [style=dotted]; + 64 -> {72} [style=dashed]; 65 -> {66}; 66 -> {67}; 67 -> {68}; @@ -201,7 +203,7 @@ digraph propertiesAndInitBlocks_kt { } subgraph cluster_22 { color=blue - 43 [label="Enter function " style="filled" fillcolor=red]; + 43 [label="Enter function " style="filled" fillcolor=red style="filled" fillcolor=gray]; 44 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 45 [label="Exit function " style="filled" fillcolor=red]; } @@ -219,8 +221,8 @@ digraph propertiesAndInitBlocks_kt { 25 -> {26}; 25 -> {35 43 46} [color=red]; 26 -> {27}; - 26 -> {32 43} [color=green]; - 26 -> {32 43} [style=dashed]; + 26 -> {32} [color=green]; + 26 -> {32} [style=dashed]; 27 -> {28}; 28 -> {29} [style=dotted]; 29 -> {30} [style=dotted]; @@ -230,6 +232,8 @@ digraph propertiesAndInitBlocks_kt { 33 -> {35} [color=green]; 33 -> {34} [style=dotted]; 33 -> {35} [style=dashed]; + 34 -> {43} [style=dotted]; + 34 -> {43} [style=dashed]; 35 -> {36}; 36 -> {37}; 37 -> {38}; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot index ebe882e5ae5..bc79cf35f8e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/returnValuesFromLambda.dot @@ -12,35 +12,37 @@ digraph returnValuesFromLambda_kt { subgraph cluster_1 { color=red + 5 [label="Enter class B" style="filled" fillcolor=red]; + 6 [label="Exit class B" style="filled" fillcolor=red]; + } + subgraph cluster_2 { + color=blue 2 [label="Enter function " style="filled" fillcolor=red]; 3 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 4 [label="Exit function " style="filled" fillcolor=red]; } + 5 -> {6} [color=green]; + 6 -> {2} [color=green]; + 6 -> {2} [style=dashed]; 2 -> {3}; 3 -> {4}; - subgraph cluster_2 { - color=red - 5 [label="Enter class B" style="filled" fillcolor=red]; - 6 [label="Exit class B" style="filled" fillcolor=red]; - } - 5 -> {6} [color=green]; - subgraph cluster_3 { - color=red - 7 [label="Enter function " style="filled" fillcolor=red]; - 8 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 9 [label="Exit function " style="filled" fillcolor=red]; - } - 7 -> {8}; - 8 -> {9}; - - subgraph cluster_4 { color=red 10 [label="Enter class C" style="filled" fillcolor=red]; 11 [label="Exit class C" style="filled" fillcolor=red]; } + subgraph cluster_4 { + color=blue + 7 [label="Enter function " style="filled" fillcolor=red]; + 8 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 9 [label="Exit function " style="filled" fillcolor=red]; + } 10 -> {11} [color=green]; + 11 -> {7} [color=green]; + 11 -> {7} [style=dashed]; + 7 -> {8}; + 8 -> {9}; subgraph cluster_5 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot index 26aaed553df..e6552ef4fd9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot @@ -4,25 +4,25 @@ digraph safeCalls_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { - color=red - 2 [label="Enter function bar" style="filled" fillcolor=red]; - 3 [label="Exit function bar" style="filled" fillcolor=red]; - } - 2 -> {3}; - - subgraph cluster_2 { color=red 4 [label="Enter class A" style="filled" fillcolor=red]; 5 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 2 [label="Enter function bar" style="filled" fillcolor=red]; + 3 [label="Exit function bar" style="filled" fillcolor=red]; + } + subgraph cluster_2 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 4 -> {5} [color=green]; + 5 -> {0 2} [color=green]; + 5 -> {0 2} [style=dashed]; + 0 -> {1}; + 2 -> {3}; subgraph cluster_3 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness/positive/exhaustiveWhenAndDNNType.dot b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness/positive/exhaustiveWhenAndDNNType.dot index eec921b4809..30840c55324 100644 --- a/compiler/fir/analysis-tests/testData/resolve/exhaustiveness/positive/exhaustiveWhenAndDNNType.dot +++ b/compiler/fir/analysis-tests/testData/resolve/exhaustiveness/positive/exhaustiveWhenAndDNNType.dot @@ -5,35 +5,37 @@ digraph exhaustiveWhenAndDNNType_kt { subgraph cluster_0 { color=red + 3 [label="Enter class SomeEnum" style="filled" fillcolor=red]; + 4 [label="Exit class SomeEnum" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class SomeEnum" style="filled" fillcolor=red]; - 4 [label="Exit class SomeEnum" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { - color=red - 5 [label="Enter function " style="filled" fillcolor=red]; - 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 7 [label="Exit function " style="filled" fillcolor=red]; - } - 5 -> {6}; - 6 -> {7}; - - subgraph cluster_3 { color=red 8 [label="Enter class B" style="filled" fillcolor=red]; 9 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 7 [label="Exit function " style="filled" fillcolor=red]; + } 8 -> {9} [color=green]; + 9 -> {5} [color=green]; + 9 -> {5} [style=dashed]; + 5 -> {6}; + 6 -> {7}; subgraph cluster_4 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot index a74202a9081..99b34fe912b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot +++ b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot @@ -4,48 +4,17 @@ digraph secondaryConstructorCfg_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { - color=red - 10 [label="Enter function " style="filled" fillcolor=red]; - 11 [label="Access variable R|/p0|"]; - 12 [label="Delegated constructor call: this(...)" style="filled" fillcolor=yellow]; - subgraph cluster_2 { - color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/p1|"]; - 15 [label="Assignment: R|/B.p3|"]; - 16 [label="Exit block"]; - } - 17 [label="Exit function " style="filled" fillcolor=red]; - } - 10 -> {11}; - 11 -> {12}; - 12 -> {13}; - 13 -> {14}; - 14 -> {15}; - 15 -> {16}; - 16 -> {17}; - - subgraph cluster_3 { color=red 27 [label="Enter class B" style="filled" fillcolor=red]; 28 [label="Part of class initialization"]; - subgraph cluster_4 { + subgraph cluster_1 { color=blue 3 [label="Enter property" style="filled" fillcolor=red]; 4 [label="Access variable R|/p0|"]; 5 [label="Exit property" style="filled" fillcolor=red]; } 29 [label="Part of class initialization"]; - subgraph cluster_5 { + subgraph cluster_2 { color=blue 6 [label="Enter property" style="filled" fillcolor=red]; 7 [label="Access variable R|/p0|"]; @@ -53,10 +22,10 @@ digraph secondaryConstructorCfg_kt { 9 [label="Exit property" style="filled" fillcolor=red]; } 30 [label="Part of class initialization"]; - subgraph cluster_6 { + subgraph cluster_3 { color=blue 18 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_7 { + subgraph cluster_4 { color=blue 19 [label="Enter block"]; 20 [label="Access variable R|/p0|"]; @@ -70,6 +39,26 @@ digraph secondaryConstructorCfg_kt { } 31 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_5 { + color=blue + 10 [label="Enter function " style="filled" fillcolor=red]; + 11 [label="Access variable R|/p0|"]; + 12 [label="Delegated constructor call: this(...)" style="filled" fillcolor=yellow]; + subgraph cluster_6 { + color=blue + 13 [label="Enter block"]; + 14 [label="Access variable R|/p1|"]; + 15 [label="Assignment: R|/B.p3|"]; + 16 [label="Exit block"]; + } + 17 [label="Exit function " style="filled" fillcolor=red]; + } + subgraph cluster_7 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } 27 -> {28} [color=green]; 28 -> {3} [color=green]; 28 -> {29} [style=dotted]; @@ -80,6 +69,8 @@ digraph secondaryConstructorCfg_kt { 30 -> {18} [color=green]; 30 -> {31} [style=dotted]; 30 -> {18} [style=dashed]; + 31 -> {0 10} [color=green]; + 31 -> {0 10} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {29} [color=green]; @@ -96,5 +87,14 @@ digraph secondaryConstructorCfg_kt { 24 -> {25}; 25 -> {26}; 26 -> {31} [color=green]; + 0 -> {1}; + 1 -> {2}; + 10 -> {11}; + 11 -> {12}; + 12 -> {13}; + 13 -> {14}; + 14 -> {15}; + 15 -> {16}; + 16 -> {17}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/bangbang.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/bangbang.dot index 8d95fae361b..9bccd8da1e8 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/bangbang.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/bangbang.dot @@ -4,18 +4,19 @@ digraph bangbang_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/booleanOperators.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/booleanOperators.dot index 9fd8bfcb637..8812d850c9e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/booleanOperators.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/booleanOperators.dot @@ -4,53 +4,55 @@ digraph booleanOperators_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { - color=red - 2 [label="Enter function bool" style="filled" fillcolor=red]; - 3 [label="Exit function bool" style="filled" fillcolor=red]; - } - 2 -> {3}; - - subgraph cluster_2 { color=red 4 [label="Enter class A" style="filled" fillcolor=red]; 5 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 2 [label="Enter function bool" style="filled" fillcolor=red]; + 3 [label="Exit function bool" style="filled" fillcolor=red]; + } + subgraph cluster_2 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 4 -> {5} [color=green]; + 5 -> {0 2} [color=green]; + 5 -> {0 2} [style=dashed]; + 0 -> {1}; + 2 -> {3}; subgraph cluster_3 { - color=red - 6 [label="Enter function bar" style="filled" fillcolor=red]; - 7 [label="Exit function bar" style="filled" fillcolor=red]; - } - 6 -> {7}; - - subgraph cluster_4 { color=red 8 [label="Enter class B" style="filled" fillcolor=red]; 9 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_4 { + color=blue + 6 [label="Enter function bar" style="filled" fillcolor=red]; + 7 [label="Exit function bar" style="filled" fillcolor=red]; + } 8 -> {9} [color=green]; + 9 -> {6} [color=green]; + 9 -> {6} [style=dashed]; + 6 -> {7}; subgraph cluster_5 { - color=red - 10 [label="Enter function baz" style="filled" fillcolor=red]; - 11 [label="Exit function baz" style="filled" fillcolor=red]; - } - 10 -> {11}; - - subgraph cluster_6 { color=red 12 [label="Enter class C" style="filled" fillcolor=red]; 13 [label="Exit class C" style="filled" fillcolor=red]; } + subgraph cluster_6 { + color=blue + 10 [label="Enter function baz" style="filled" fillcolor=red]; + 11 [label="Exit function baz" style="filled" fillcolor=red]; + } 12 -> {13} [color=green]; + 13 -> {10} [color=green]; + 13 -> {10} [style=dashed]; + 10 -> {11}; subgraph cluster_7 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot index 1a4152810c5..f6b0eb21e91 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot @@ -4,18 +4,19 @@ digraph equalsToBoolean_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/jumpFromRhsOfOperator.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/jumpFromRhsOfOperator.dot index b04bac13a22..9265433d18d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/jumpFromRhsOfOperator.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/jumpFromRhsOfOperator.dot @@ -4,18 +4,19 @@ digraph jumpFromRhsOfOperator_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red 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 5d781d22500..588fff036fb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot @@ -4,32 +4,34 @@ digraph boundSmartcasts_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { - color=red - 4 [label="Enter function bar" style="filled" fillcolor=red]; - 5 [label="Exit function bar" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { color=red 6 [label="Enter class B" style="filled" fillcolor=red]; 7 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 4 [label="Enter function bar" style="filled" fillcolor=red]; + 5 [label="Exit function bar" style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; + 7 -> {4} [color=green]; + 7 -> {4} [style=dashed]; + 4 -> {5}; subgraph cluster_4 { color=red @@ -335,19 +337,10 @@ digraph boundSmartcasts_kt { 123 -> {124}; subgraph cluster_27 { - color=red - 125 [label="Enter function " style="filled" fillcolor=red]; - 126 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 127 [label="Exit function " style="filled" fillcolor=red]; - } - 125 -> {126}; - 126 -> {127}; - - subgraph cluster_28 { color=red 131 [label="Enter class D" style="filled" fillcolor=red]; 132 [label="Part of class initialization"]; - subgraph cluster_29 { + subgraph cluster_28 { color=blue 128 [label="Enter property" style="filled" fillcolor=red]; 129 [label="Access variable R|/any|"]; @@ -355,13 +348,23 @@ digraph boundSmartcasts_kt { } 133 [label="Exit class D" style="filled" fillcolor=red]; } + subgraph cluster_29 { + color=blue + 125 [label="Enter function " style="filled" fillcolor=red]; + 126 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 127 [label="Exit function " style="filled" fillcolor=red]; + } 131 -> {132} [color=green]; 132 -> {128} [color=green]; 132 -> {133} [style=dotted]; 132 -> {128} [style=dashed]; + 133 -> {125} [color=green]; + 133 -> {125} [style=dashed]; 128 -> {129}; 129 -> {130}; 130 -> {133} [color=green]; + 125 -> {126}; + 126 -> {127}; subgraph cluster_30 { color=red 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 3287af23d76..64aa675858b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot @@ -4,19 +4,10 @@ digraph boundSmartcastsInBranches_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { color=red 6 [label="Enter class A" style="filled" fillcolor=red]; 7 [label="Part of class initialization"]; - subgraph cluster_2 { + subgraph cluster_1 { color=blue 3 [label="Enter property" style="filled" fillcolor=red]; 4 [label="Const: String()"]; @@ -24,13 +15,23 @@ digraph boundSmartcastsInBranches_kt { } 8 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_2 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; 7 -> {3} [color=green]; 7 -> {8} [style=dotted]; 7 -> {3} [style=dashed]; + 8 -> {0} [color=green]; + 8 -> {0} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {8} [color=green]; + 0 -> {1}; + 1 -> {2}; subgraph cluster_3 { color=red 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 e410b753796..79351a282f0 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot @@ -5,34 +5,26 @@ digraph functionCallBound_kt { subgraph cluster_0 { color=red + 3 [label="Enter class Base" style="filled" fillcolor=red]; + 4 [label="Exit class Base" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class Base" style="filled" fillcolor=red]; - 4 [label="Exit class Base" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { - color=red - 5 [label="Enter function " style="filled" fillcolor=red]; - 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 7 [label="Exit function " style="filled" fillcolor=red]; - } - 5 -> {6}; - 6 -> {7}; - - subgraph cluster_3 { color=red 11 [label="Enter class Sub" style="filled" fillcolor=red]; 12 [label="Part of class initialization"]; - subgraph cluster_4 { + subgraph cluster_3 { color=blue 8 [label="Enter property" style="filled" fillcolor=red]; 9 [label="Access variable R|/data|"]; @@ -40,13 +32,23 @@ digraph functionCallBound_kt { } 13 [label="Exit class Sub" style="filled" fillcolor=red]; } + subgraph cluster_4 { + color=blue + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 7 [label="Exit function " style="filled" fillcolor=red]; + } 11 -> {12} [color=green]; 12 -> {8} [color=green]; 12 -> {13} [style=dotted]; 12 -> {8} [style=dashed]; + 13 -> {5} [color=green]; + 13 -> {5} [style=dashed]; 8 -> {9}; 9 -> {10}; 10 -> {13} [color=green]; + 5 -> {6}; + 6 -> {7}; subgraph cluster_5 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot index 0d390d9fe47..7b61a97a367 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot @@ -4,18 +4,19 @@ digraph elvis_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/returns.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/returns.dot index 09f04044b01..7c5d2a99262 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/returns.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/returns.dot @@ -153,46 +153,49 @@ digraph returns_kt { 51 -> {52}; subgraph cluster_14 { - color=red - 53 [label="Enter function foo" style="filled" fillcolor=red]; - 54 [label="Exit function foo" style="filled" fillcolor=red]; - } - 53 -> {54}; - - subgraph cluster_15 { color=red 55 [label="Enter class A" style="filled" fillcolor=red]; 56 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_15 { + color=blue + 53 [label="Enter function foo" style="filled" fillcolor=red]; + 54 [label="Exit function foo" style="filled" fillcolor=red]; + } 55 -> {56} [color=green]; + 56 -> {53} [color=green]; + 56 -> {53} [style=dashed]; + 53 -> {54}; subgraph cluster_16 { - color=red - 57 [label="Enter function bar" style="filled" fillcolor=red]; - 58 [label="Exit function bar" style="filled" fillcolor=red]; - } - 57 -> {58}; - - subgraph cluster_17 { color=red 59 [label="Enter class B" style="filled" fillcolor=red]; 60 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_17 { + color=blue + 57 [label="Enter function bar" style="filled" fillcolor=red]; + 58 [label="Exit function bar" style="filled" fillcolor=red]; + } 59 -> {60} [color=green]; + 60 -> {57} [color=green]; + 60 -> {57} [style=dashed]; + 57 -> {58}; subgraph cluster_18 { - color=red - 61 [label="Enter function baz" style="filled" fillcolor=red]; - 62 [label="Exit function baz" style="filled" fillcolor=red]; - } - 61 -> {62}; - - subgraph cluster_19 { color=red 63 [label="Enter class C" style="filled" fillcolor=red]; 64 [label="Exit class C" style="filled" fillcolor=red]; } + subgraph cluster_19 { + color=blue + 61 [label="Enter function baz" style="filled" fillcolor=red]; + 62 [label="Exit function baz" style="filled" fillcolor=red]; + } 63 -> {64} [color=green]; + 64 -> {61} [color=green]; + 64 -> {61} [style=dashed]; + 61 -> {62}; subgraph cluster_20 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/smartcastFromArgument.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/smartcastFromArgument.dot index 67cfc9be481..5db7b9fd159 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/smartcastFromArgument.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/smartcastFromArgument.dot @@ -4,18 +4,19 @@ digraph smartcastFromArgument_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/when.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/when.dot index 32f77414912..686d0c9606c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/when.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/when.dot @@ -4,32 +4,34 @@ digraph when_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { - color=red - 4 [label="Enter function bar" style="filled" fillcolor=red]; - 5 [label="Exit function bar" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { color=red 6 [label="Enter class B" style="filled" fillcolor=red]; 7 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 4 [label="Enter function bar" style="filled" fillcolor=red]; + 5 [label="Exit function bar" style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; + 7 -> {4} [color=green]; + 7 -> {4} [style=dashed]; + 4 -> {5}; subgraph cluster_4 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.dot index 0622b1a3f35..ca72f7efd26 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.dot @@ -4,18 +4,19 @@ digraph equalsAndIdentity_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot index da1bcb47bb4..4d11e0de077 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/inPlaceLambdas.dot @@ -4,32 +4,34 @@ digraph inPlaceLambdas_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { - color=red - 4 [label="Enter function bar" style="filled" fillcolor=red]; - 5 [label="Exit function bar" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { color=red 6 [label="Enter class B" style="filled" fillcolor=red]; 7 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 4 [label="Enter function bar" style="filled" fillcolor=red]; + 5 [label="Exit function bar" style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; + 7 -> {4} [color=green]; + 7 -> {4} [style=dashed]; + 4 -> {5}; subgraph cluster_4 { color=red 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 ed7d35fb551..fbd7920ca53 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot @@ -5,57 +5,26 @@ digraph lambdaInWhenBranch_kt { subgraph cluster_0 { color=red + 3 [label="Enter class Sealed" style="filled" fillcolor=red]; + 4 [label="Exit class Sealed" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class Sealed" style="filled" fillcolor=red]; - 4 [label="Exit class Sealed" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { - color=red - 5 [label="Enter function " style="filled" fillcolor=red]; - 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 7 [label="Exit function " style="filled" fillcolor=red]; - } - 5 -> {6}; - 6 -> {7}; - - subgraph cluster_3 { - color=red - 11 [label="Enter function component1" style="filled" fillcolor=red]; - 12 [label="Exit function component1" style="filled" fillcolor=red]; - } - 11 -> {12}; - - subgraph cluster_4 { - color=red - 13 [label="Enter function copy" style="filled" fillcolor=red]; - subgraph cluster_5 { - color=blue - 15 [label="Enter default value of t" style="filled" fillcolor=red]; - 16 [label="Access variable R|/SubClass1.t|"]; - 17 [label="Exit default value of t" style="filled" fillcolor=red]; - } - 14 [label="Exit function copy" style="filled" fillcolor=red]; - } - 13 -> {14 15}; - 15 -> {16}; - 15 -> {15} [style=dashed]; - 16 -> {17}; - - subgraph cluster_6 { color=red 18 [label="Enter class SubClass1" style="filled" fillcolor=red]; 19 [label="Part of class initialization"]; - subgraph cluster_7 { + subgraph cluster_3 { color=blue 8 [label="Enter property" style="filled" fillcolor=red]; 9 [label="Access variable R|/t|"]; @@ -63,36 +32,67 @@ digraph lambdaInWhenBranch_kt { } 20 [label="Exit class SubClass1" style="filled" fillcolor=red]; } + subgraph cluster_4 { + color=blue + 13 [label="Enter function copy" style="filled" fillcolor=red]; + 14 [label="Exit function copy" style="filled" fillcolor=red]; + } + subgraph cluster_5 { + color=blue + 15 [label="Enter default value of t" style="filled" fillcolor=red]; + 16 [label="Access variable R|/SubClass1.t|"]; + 17 [label="Exit default value of t" style="filled" fillcolor=red]; + } + subgraph cluster_6 { + color=blue + 11 [label="Enter function component1" style="filled" fillcolor=red]; + 12 [label="Exit function component1" style="filled" fillcolor=red]; + } + subgraph cluster_7 { + color=blue + 5 [label="Enter function " style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 7 [label="Exit function " style="filled" fillcolor=red]; + } 18 -> {19} [color=green]; 19 -> {8} [color=green]; 19 -> {20} [style=dotted]; 19 -> {8} [style=dashed]; + 20 -> {5 11 13} [color=green]; + 20 -> {5 11 13} [style=dashed]; 8 -> {9}; 9 -> {10}; 10 -> {20} [color=green]; + 5 -> {6}; + 6 -> {7}; + 11 -> {12}; + 13 -> {14 15}; + 15 -> {16}; + 15 -> {15} [style=dashed]; + 16 -> {17}; subgraph cluster_8 { - color=red - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 23 [label="Exit function " style="filled" fillcolor=red]; - } - 21 -> {22}; - 22 -> {23}; - - subgraph cluster_9 { - color=red - 24 [label="Enter function copy" style="filled" fillcolor=red]; - 25 [label="Exit function copy" style="filled" fillcolor=red]; - } - 24 -> {25}; - - subgraph cluster_10 { color=red 26 [label="Enter class SubClass2" style="filled" fillcolor=red]; 27 [label="Exit class SubClass2" style="filled" fillcolor=red]; } + subgraph cluster_9 { + color=blue + 24 [label="Enter function copy" style="filled" fillcolor=red]; + 25 [label="Exit function copy" style="filled" fillcolor=red]; + } + subgraph cluster_10 { + color=blue + 21 [label="Enter function " style="filled" fillcolor=red]; + 22 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 23 [label="Exit function " style="filled" fillcolor=red]; + } 26 -> {27} [color=green]; + 27 -> {21 24} [color=green]; + 27 -> {21 24} [style=dashed]; + 21 -> {22}; + 22 -> {23}; + 24 -> {25}; subgraph cluster_11 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/dataFlowInfoFromWhileCondition.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/dataFlowInfoFromWhileCondition.dot index 78c1a75421a..c0fa6636fb4 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/dataFlowInfoFromWhileCondition.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/dataFlowInfoFromWhileCondition.dot @@ -4,18 +4,19 @@ digraph dataFlowInfoFromWhileCondition_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/endlessLoops.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/endlessLoops.dot index f6951f8c031..70c48836c2e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/endlessLoops.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/loops/endlessLoops.dot @@ -4,18 +4,19 @@ digraph endlessLoops_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/multipleCasts.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/multipleCasts.dot index 20be9b6c9b7..514ba5c72b9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/multipleCasts.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/multipleCasts.dot @@ -4,32 +4,34 @@ digraph multipleCasts_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { color=red 2 [label="Enter class A" style="filled" fillcolor=red]; 3 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 2 -> {3} [color=green]; + 3 -> {0} [color=green]; + 3 -> {0} [style=dashed]; + 0 -> {1}; subgraph cluster_2 { - color=red - 4 [label="Enter function foo" style="filled" fillcolor=red]; - 5 [label="Exit function foo" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { color=red 6 [label="Enter class B" style="filled" fillcolor=red]; 7 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 4 [label="Enter function foo" style="filled" fillcolor=red]; + 5 [label="Exit function foo" style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; + 7 -> {4} [color=green]; + 7 -> {4} [style=dashed]; + 4 -> {5}; subgraph cluster_4 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot index 66b6311854c..27b73e01e24 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot @@ -4,67 +4,72 @@ digraph nullability_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function foo" style="filled" fillcolor=red]; - 1 [label="Exit function foo" style="filled" fillcolor=red]; - } - 0 -> {1}; - - subgraph cluster_1 { - color=red - 2 [label="Enter function getA" style="filled" fillcolor=red]; - 3 [label="Exit function getA" style="filled" fillcolor=red]; - } - 2 -> {3}; - - subgraph cluster_2 { color=red 4 [label="Enter class A" style="filled" fillcolor=red]; 5 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_1 { + color=blue + 2 [label="Enter function getA" style="filled" fillcolor=red]; + 3 [label="Exit function getA" style="filled" fillcolor=red]; + } + subgraph cluster_2 { + color=blue + 0 [label="Enter function foo" style="filled" fillcolor=red]; + 1 [label="Exit function foo" style="filled" fillcolor=red]; + } 4 -> {5} [color=green]; + 5 -> {0 2} [color=green]; + 5 -> {0 2} [style=dashed]; + 0 -> {1}; + 2 -> {3}; subgraph cluster_3 { - color=red - 6 [label="Enter function fs" style="filled" fillcolor=red]; - 7 [label="Exit function fs" style="filled" fillcolor=red]; - } - 6 -> {7}; - - subgraph cluster_4 { color=red 8 [label="Enter class MyData" style="filled" fillcolor=red]; 9 [label="Exit class MyData" style="filled" fillcolor=red]; } + subgraph cluster_4 { + color=blue + 6 [label="Enter function fs" style="filled" fillcolor=red]; + 7 [label="Exit function fs" style="filled" fillcolor=red]; + } 8 -> {9} [color=green]; + 9 -> {6} [color=green]; + 9 -> {6} [style=dashed]; + 6 -> {7}; subgraph cluster_5 { - color=red - 10 [label="Enter function fdata" style="filled" fillcolor=red]; - 11 [label="Exit function fdata" style="filled" fillcolor=red]; - } - 10 -> {11}; - - subgraph cluster_6 { color=red 12 [label="Enter class Q" style="filled" fillcolor=red]; 13 [label="Exit class Q" style="filled" fillcolor=red]; } + subgraph cluster_6 { + color=blue + 10 [label="Enter function fdata" style="filled" fillcolor=red]; + 11 [label="Exit function fdata" style="filled" fillcolor=red]; + } 12 -> {13} [color=green]; + 13 -> {10} [color=green]; + 13 -> {10} [style=dashed]; + 10 -> {11}; subgraph cluster_7 { color=red - 14 [label="Enter function " style="filled" fillcolor=red]; - 15 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 16 [label="Exit function " style="filled" fillcolor=red]; + 27 [label="Enter class QImpl" style="filled" fillcolor=red]; + 28 [label="Part of class initialization"]; + subgraph cluster_8 { + color=blue + 17 [label="Enter property" style="filled" fillcolor=red]; + 18 [label="Access variable R|/data|"]; + 19 [label="Exit property" style="filled" fillcolor=red]; + } + 29 [label="Exit class QImpl" style="filled" fillcolor=red]; } - 14 -> {15}; - 15 -> {16}; - - subgraph cluster_8 { - color=red + subgraph cluster_9 { + color=blue 20 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_9 { + subgraph cluster_10 { color=blue 21 [label="Enter block"]; 22 [label="Const: Null(null)"]; @@ -74,6 +79,23 @@ digraph nullability_kt { } 26 [label="Exit function fdata" style="filled" fillcolor=red]; } + subgraph cluster_11 { + color=blue + 14 [label="Enter function " style="filled" fillcolor=red]; + 15 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 16 [label="Exit function " style="filled" fillcolor=red]; + } + 27 -> {28} [color=green]; + 28 -> {17} [color=green]; + 28 -> {29} [style=dotted]; + 28 -> {17} [style=dashed]; + 29 -> {14 20} [color=green]; + 29 -> {14 20} [style=dashed]; + 17 -> {18}; + 18 -> {19}; + 19 -> {29} [color=green]; + 14 -> {15}; + 15 -> {16}; 20 -> {21}; 21 -> {22}; 22 -> {23}; @@ -82,39 +104,22 @@ digraph nullability_kt { 24 -> {25} [style=dotted]; 25 -> {26} [style=dotted]; - subgraph cluster_10 { - color=red - 27 [label="Enter class QImpl" style="filled" fillcolor=red]; - 28 [label="Part of class initialization"]; - subgraph cluster_11 { - color=blue - 17 [label="Enter property" style="filled" fillcolor=red]; - 18 [label="Access variable R|/data|"]; - 19 [label="Exit property" style="filled" fillcolor=red]; - } - 29 [label="Exit class QImpl" style="filled" fillcolor=red]; - } - 27 -> {28} [color=green]; - 28 -> {17} [color=green]; - 28 -> {29} [style=dotted]; - 28 -> {17} [style=dashed]; - 17 -> {18}; - 18 -> {19}; - 19 -> {29} [color=green]; - subgraph cluster_12 { color=red - 30 [label="Enter function " style="filled" fillcolor=red]; - 31 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 32 [label="Exit function " style="filled" fillcolor=red]; + 43 [label="Enter class QImplMutable" style="filled" fillcolor=red]; + 44 [label="Part of class initialization"]; + subgraph cluster_13 { + color=blue + 33 [label="Enter property" style="filled" fillcolor=red]; + 34 [label="Access variable R|/data|"]; + 35 [label="Exit property" style="filled" fillcolor=red]; + } + 45 [label="Exit class QImplMutable" style="filled" fillcolor=red]; } - 30 -> {31}; - 31 -> {32}; - - subgraph cluster_13 { - color=red + subgraph cluster_14 { + color=blue 36 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_14 { + subgraph cluster_15 { color=blue 37 [label="Enter block"]; 38 [label="Const: Null(null)"]; @@ -124,6 +129,23 @@ digraph nullability_kt { } 42 [label="Exit function fdata" style="filled" fillcolor=red]; } + subgraph cluster_16 { + color=blue + 30 [label="Enter function " style="filled" fillcolor=red]; + 31 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 32 [label="Exit function " style="filled" fillcolor=red]; + } + 43 -> {44} [color=green]; + 44 -> {33} [color=green]; + 44 -> {45} [style=dotted]; + 44 -> {33} [style=dashed]; + 45 -> {30 36} [color=green]; + 45 -> {30 36} [style=dashed]; + 33 -> {34}; + 34 -> {35}; + 35 -> {45} [color=green]; + 30 -> {31}; + 31 -> {32}; 36 -> {37}; 37 -> {38}; 38 -> {39}; @@ -132,39 +154,10 @@ digraph nullability_kt { 40 -> {41} [style=dotted]; 41 -> {42} [style=dotted]; - subgraph cluster_15 { - color=red - 43 [label="Enter class QImplMutable" style="filled" fillcolor=red]; - 44 [label="Part of class initialization"]; - subgraph cluster_16 { - color=blue - 33 [label="Enter property" style="filled" fillcolor=red]; - 34 [label="Access variable R|/data|"]; - 35 [label="Exit property" style="filled" fillcolor=red]; - } - 45 [label="Exit class QImplMutable" style="filled" fillcolor=red]; - } - 43 -> {44} [color=green]; - 44 -> {33} [color=green]; - 44 -> {45} [style=dotted]; - 44 -> {33} [style=dashed]; - 33 -> {34}; - 34 -> {35}; - 35 -> {45} [color=green]; - subgraph cluster_17 { - color=red - 46 [label="Enter function " style="filled" fillcolor=red]; - 47 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 48 [label="Exit function " style="filled" fillcolor=red]; - } - 46 -> {47}; - 47 -> {48}; - - subgraph cluster_18 { color=red 49 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_19 { + subgraph cluster_18 { color=blue 50 [label="Enter block"]; 51 [label="Const: Null(null)"]; @@ -182,8 +175,13 @@ digraph nullability_kt { 53 -> {54} [style=dotted]; 54 -> {55} [style=dotted]; - subgraph cluster_20 { + subgraph cluster_19 { color=red + 63 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; + 64 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; + } + subgraph cluster_20 { + color=blue 56 [label="Enter function fdata" style="filled" fillcolor=red]; subgraph cluster_21 { color=blue @@ -195,6 +193,17 @@ digraph nullability_kt { } 62 [label="Exit function fdata" style="filled" fillcolor=red]; } + subgraph cluster_22 { + color=blue + 46 [label="Enter function " style="filled" fillcolor=red]; + 47 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 48 [label="Exit function " style="filled" fillcolor=red]; + } + 63 -> {64} [color=green]; + 64 -> {46 56} [color=green]; + 64 -> {46 56} [style=dashed]; + 46 -> {47}; + 47 -> {48}; 56 -> {57}; 57 -> {58}; 58 -> {59}; @@ -203,13 +212,6 @@ digraph nullability_kt { 60 -> {61} [style=dotted]; 61 -> {62} [style=dotted]; - subgraph cluster_22 { - color=red - 63 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; - 64 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; - } - 63 -> {64} [color=green]; - subgraph cluster_23 { color=red 65 [label="Enter function test_1" style="filled" fillcolor=red]; diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot index 7791cfd9e04..2bd30514fba 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/implicitReceivers.dot @@ -5,15 +5,11 @@ digraph implicitReceivers_kt { subgraph cluster_0 { color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; + 7 [label="Enter class A" style="filled" fillcolor=red]; + 8 [label="Exit class A" style="filled" fillcolor=red]; } - 0 -> {1}; - 1 -> {2}; - subgraph cluster_1 { - color=red + color=blue 3 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_2 { color=blue @@ -22,28 +18,28 @@ digraph implicitReceivers_kt { } 6 [label="Exit function foo" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } + 7 -> {8} [color=green]; + 8 -> {0 3} [color=green]; + 8 -> {0 3} [style=dashed]; + 0 -> {1}; + 1 -> {2}; 3 -> {4}; 4 -> {5}; 5 -> {6}; - subgraph cluster_3 { - color=red - 7 [label="Enter class A" style="filled" fillcolor=red]; - 8 [label="Exit class A" style="filled" fillcolor=red]; - } - 7 -> {8} [color=green]; - subgraph cluster_4 { color=red - 9 [label="Enter function " style="filled" fillcolor=red]; - 10 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 11 [label="Exit function " style="filled" fillcolor=red]; + 16 [label="Enter class B" style="filled" fillcolor=red]; + 17 [label="Exit class B" style="filled" fillcolor=red]; } - 9 -> {10}; - 10 -> {11}; - subgraph cluster_5 { - color=red + color=blue 12 [label="Enter function bar" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue @@ -52,17 +48,21 @@ digraph implicitReceivers_kt { } 15 [label="Exit function bar" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 9 [label="Enter function " style="filled" fillcolor=red]; + 10 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 11 [label="Exit function " style="filled" fillcolor=red]; + } + 16 -> {17} [color=green]; + 17 -> {9 12} [color=green]; + 17 -> {9 12} [style=dashed]; + 9 -> {10}; + 10 -> {11}; 12 -> {13}; 13 -> {14}; 14 -> {15}; - subgraph cluster_7 { - color=red - 16 [label="Enter class B" style="filled" fillcolor=red]; - 17 [label="Exit class B" style="filled" fillcolor=red]; - } - 16 -> {17} [color=green]; - subgraph cluster_8 { color=red 18 [label="Enter function with" style="filled" fillcolor=red]; 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 21d83868481..d0710c41895 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot @@ -5,17 +5,30 @@ digraph assignSafeCall_kt { subgraph cluster_0 { color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; + 17 [label="Enter class A" style="filled" fillcolor=red]; + 18 [label="Part of class initialization"]; + subgraph cluster_1 { + color=blue + 10 [label="Enter property" style="filled" fillcolor=red]; + 11 [label="Const: Int(1)"]; + 12 [label="Exit property" style="filled" fillcolor=red]; + } + 19 [label="Exit class A" style="filled" fillcolor=red]; } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { - color=red + subgraph cluster_2 { + color=blue + 13 [label="Enter function bar" style="filled" fillcolor=red]; + subgraph cluster_3 { + color=blue + 14 [label="Enter block"]; + 15 [label="Exit block"]; + } + 16 [label="Exit function bar" style="filled" fillcolor=red]; + } + subgraph cluster_4 { + color=blue 3 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_2 { + subgraph cluster_5 { color=blue 4 [label="Enter block"]; 5 [label="Const: Int(1)"]; @@ -25,6 +38,23 @@ digraph assignSafeCall_kt { } 9 [label="Exit function foo" style="filled" fillcolor=red]; } + subgraph cluster_6 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } + 17 -> {18} [color=green]; + 18 -> {10} [color=green]; + 18 -> {19} [style=dotted]; + 18 -> {10} [style=dashed]; + 19 -> {0 3 13} [color=green]; + 19 -> {0 3 13} [style=dashed]; + 10 -> {11}; + 11 -> {12}; + 12 -> {19} [color=green]; + 0 -> {1}; + 1 -> {2}; 3 -> {4}; 4 -> {5}; 5 -> {6}; @@ -32,41 +62,10 @@ digraph assignSafeCall_kt { 6 -> {7} [style=dotted]; 7 -> {8} [style=dotted]; 8 -> {9} [style=dotted]; - - subgraph cluster_3 { - color=red - 13 [label="Enter function bar" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 14 [label="Enter block"]; - 15 [label="Exit block"]; - } - 16 [label="Exit function bar" style="filled" fillcolor=red]; - } 13 -> {14}; 14 -> {15}; 15 -> {16}; - subgraph cluster_5 { - color=red - 17 [label="Enter class A" style="filled" fillcolor=red]; - 18 [label="Part of class initialization"]; - subgraph cluster_6 { - color=blue - 10 [label="Enter property" style="filled" fillcolor=red]; - 11 [label="Const: Int(1)"]; - 12 [label="Exit property" style="filled" fillcolor=red]; - } - 19 [label="Exit class A" style="filled" fillcolor=red]; - } - 17 -> {18} [color=green]; - 18 -> {10} [color=green]; - 18 -> {19} [style=dotted]; - 18 -> {10} [style=dashed]; - 10 -> {11}; - 11 -> {12}; - 12 -> {19} [color=green]; - subgraph cluster_7 { color=red 20 [label="Enter function test_1" style="filled" fillcolor=red]; @@ -237,25 +236,25 @@ digraph assignSafeCall_kt { 84 -> {85}; subgraph cluster_19 { - color=red - 86 [label="Enter function foo" style="filled" fillcolor=red]; - 87 [label="Exit function foo" style="filled" fillcolor=red]; - } - 86 -> {87}; - - subgraph cluster_20 { - color=red - 88 [label="Enter function bar" style="filled" fillcolor=red]; - 89 [label="Exit function bar" style="filled" fillcolor=red]; - } - 88 -> {89}; - - subgraph cluster_21 { color=red 90 [label="Enter class B" style="filled" fillcolor=red]; 91 [label="Exit class B" style="filled" fillcolor=red]; } + subgraph cluster_20 { + color=blue + 88 [label="Enter function bar" style="filled" fillcolor=red]; + 89 [label="Exit function bar" style="filled" fillcolor=red]; + } + subgraph cluster_21 { + color=blue + 86 [label="Enter function foo" style="filled" fillcolor=red]; + 87 [label="Exit function foo" style="filled" fillcolor=red]; + } 90 -> {91} [color=green]; + 91 -> {86 88} [color=green]; + 91 -> {86 88} [style=dashed]; + 86 -> {87}; + 88 -> {89}; subgraph cluster_22 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot index 84af1a7e810..4c85c464809 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/safeCalls.dot @@ -75,32 +75,31 @@ digraph safeCalls_kt { 24 -> {25}; subgraph cluster_6 { - color=red - 26 [label="Enter function bar" style="filled" fillcolor=red]; - 27 [label="Exit function bar" style="filled" fillcolor=red]; - } - 26 -> {27}; - - subgraph cluster_7 { - color=red - 28 [label="Enter function bool" style="filled" fillcolor=red]; - 29 [label="Exit function bool" style="filled" fillcolor=red]; - } - 28 -> {29}; - - subgraph cluster_8 { - color=red - 30 [label="Enter function id" style="filled" fillcolor=red]; - 31 [label="Exit function id" style="filled" fillcolor=red]; - } - 30 -> {31}; - - subgraph cluster_9 { color=red 32 [label="Enter class A" style="filled" fillcolor=red]; 33 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 30 [label="Enter function id" style="filled" fillcolor=red]; + 31 [label="Exit function id" style="filled" fillcolor=red]; + } + subgraph cluster_8 { + color=blue + 28 [label="Enter function bool" style="filled" fillcolor=red]; + 29 [label="Exit function bool" style="filled" fillcolor=red]; + } + subgraph cluster_9 { + color=blue + 26 [label="Enter function bar" style="filled" fillcolor=red]; + 27 [label="Exit function bar" style="filled" fillcolor=red]; + } 32 -> {33} [color=green]; + 33 -> {26 28 30} [color=green]; + 33 -> {26 28 30} [style=dashed]; + 26 -> {27}; + 28 -> {29}; + 30 -> {31}; subgraph cluster_10 { color=red diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot index 357bd9dde49..75af9aed0aa 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot @@ -11,18 +11,19 @@ digraph smartCastInInit_kt { 0 -> {1} [color=green]; subgraph cluster_1 { - color=red - 2 [label="Enter function foo" style="filled" fillcolor=red]; - 3 [label="Exit function foo" style="filled" fillcolor=red]; - } - 2 -> {3}; - - subgraph cluster_2 { color=red 4 [label="Enter class S" style="filled" fillcolor=red]; 5 [label="Exit class S" style="filled" fillcolor=red]; } + subgraph cluster_2 { + color=blue + 2 [label="Enter function foo" style="filled" fillcolor=red]; + 3 [label="Exit function foo" style="filled" fillcolor=red]; + } 4 -> {5} [color=green]; + 5 -> {2} [color=green]; + 5 -> {2} [style=dashed]; + 2 -> {3}; subgraph cluster_3 { color=red @@ -47,22 +48,13 @@ digraph smartCastInInit_kt { 12 -> {13} [style=dotted]; subgraph cluster_5 { - color=red - 14 [label="Enter function " style="filled" fillcolor=red]; - 15 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 16 [label="Exit function " style="filled" fillcolor=red]; - } - 14 -> {15}; - 15 -> {16}; - - subgraph cluster_6 { color=red 26 [label="Enter class Main" style="filled" fillcolor=red]; 27 [label="Part of class initialization"]; - subgraph cluster_7 { + subgraph cluster_6 { color=blue 17 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_8 { + subgraph cluster_7 { color=blue 18 [label="Enter block"]; 19 [label="Function call: R|/s|()" style="filled" fillcolor=yellow]; @@ -76,10 +68,18 @@ digraph smartCastInInit_kt { } 28 [label="Exit class Main" style="filled" fillcolor=red]; } + subgraph cluster_8 { + color=blue + 14 [label="Enter function " style="filled" fillcolor=red]; + 15 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 16 [label="Exit function " style="filled" fillcolor=red]; + } 26 -> {27} [color=green]; 27 -> {17} [color=green]; 27 -> {28} [style=dotted]; 27 -> {17} [style=dashed]; + 28 -> {14} [color=green]; + 28 -> {14} [style=dashed]; 17 -> {18}; 18 -> {19}; 19 -> {20}; @@ -89,5 +89,7 @@ digraph smartCastInInit_kt { 23 -> {24}; 24 -> {25}; 25 -> {28} [color=green]; + 14 -> {15}; + 15 -> {16}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot index fb2223cf49c..1adeb27688c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastInByClause.dot @@ -4,26 +4,17 @@ digraph smartcastInByClause_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { color=red 9 [label="Enter class A" style="filled" fillcolor=red]; 10 [label="Part of class initialization"]; - subgraph cluster_2 { + subgraph cluster_1 { color=blue 3 [label="Enter property" style="filled" fillcolor=red]; 4 [label="Access variable R|/path|"]; 5 [label="Exit property" style="filled" fillcolor=red]; } 11 [label="Part of class initialization"]; - subgraph cluster_3 { + subgraph cluster_2 { color=blue 6 [label="Enter property" style="filled" fillcolor=red]; 7 [label="Access variable R|/index|"]; @@ -31,6 +22,12 @@ digraph smartcastInByClause_kt { } 12 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } 9 -> {10} [color=green]; 10 -> {3} [color=green]; 10 -> {11} [style=dotted]; @@ -38,12 +35,16 @@ digraph smartcastInByClause_kt { 11 -> {6} [color=green]; 11 -> {12} [style=dotted]; 11 -> {6} [style=dashed]; + 12 -> {0} [color=green]; + 12 -> {0} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {11} [color=green]; 6 -> {7}; 7 -> {8}; 8 -> {12} [color=green]; + 0 -> {1}; + 1 -> {2}; subgraph cluster_4 { color=red @@ -53,19 +54,10 @@ digraph smartcastInByClause_kt { 13 -> {14} [color=green]; subgraph cluster_5 { - color=red - 15 [label="Enter function " style="filled" fillcolor=red]; - 16 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 17 [label="Exit function " style="filled" fillcolor=red]; - } - 15 -> {16}; - 16 -> {17}; - - subgraph cluster_6 { color=red 21 [label="Enter class Derived" style="filled" fillcolor=red]; 22 [label="Part of class initialization"]; - subgraph cluster_7 { + subgraph cluster_6 { color=blue 18 [label="Enter property" style="filled" fillcolor=red]; 19 [label="Access variable R|/index|"]; @@ -73,13 +65,23 @@ digraph smartcastInByClause_kt { } 23 [label="Exit class Derived" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 15 [label="Enter function " style="filled" fillcolor=red]; + 16 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 17 [label="Exit function " style="filled" fillcolor=red]; + } 21 -> {22} [color=green]; 22 -> {18} [color=green]; 22 -> {23} [style=dotted]; 22 -> {18} [style=dashed]; + 23 -> {15} [color=green]; + 23 -> {15} [style=dashed]; 18 -> {19}; 19 -> {20}; 20 -> {23} [color=green]; + 15 -> {16}; + 16 -> {17}; subgraph cluster_8 { color=red @@ -195,8 +197,6 @@ digraph smartcastInByClause_kt { 42 -> {43} [color=red]; 42 -> {49} [style=dashed]; 43 -> {44}; - 43 -> {64 67} [color=green]; - 43 -> {64 67} [style=dashed]; 44 -> {45}; 45 -> {48}; 45 -> {46} [style=dotted]; @@ -209,7 +209,8 @@ digraph smartcastInByClause_kt { 51 -> {59} [color=green]; 51 -> {52} [style=dotted]; 51 -> {59} [style=dashed]; - 52 -> {43} [color=green]; + 52 -> {43 64 67} [color=green]; + 52 -> {64 67} [style=dashed]; 53 -> {54}; 54 -> {55}; 55 -> {56}; diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot index 50a72e9edd4..183f0787bda 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot @@ -115,26 +115,17 @@ digraph smartcastToNothing_kt { 37 -> {38} [style=dotted]; subgraph cluster_10 { - color=red - 39 [label="Enter function " style="filled" fillcolor=red]; - 40 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 41 [label="Exit function " style="filled" fillcolor=red]; - } - 39 -> {40}; - 40 -> {41}; - - subgraph cluster_11 { color=red 48 [label="Enter class A" style="filled" fillcolor=red]; 49 [label="Part of class initialization"]; - subgraph cluster_12 { + subgraph cluster_11 { color=blue 42 [label="Enter property" style="filled" fillcolor=red]; 43 [label="Const: Int(1)"]; 44 [label="Exit property" style="filled" fillcolor=red]; } 50 [label="Part of class initialization"]; - subgraph cluster_13 { + subgraph cluster_12 { color=blue 45 [label="Enter property" style="filled" fillcolor=red]; 46 [label="Const: Boolean(true)"]; @@ -142,6 +133,12 @@ digraph smartcastToNothing_kt { } 51 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_13 { + color=blue + 39 [label="Enter function " style="filled" fillcolor=red]; + 40 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 41 [label="Exit function " style="filled" fillcolor=red]; + } 48 -> {49} [color=green]; 49 -> {42} [color=green]; 49 -> {50} [style=dotted]; @@ -149,12 +146,16 @@ digraph smartcastToNothing_kt { 50 -> {45} [color=green]; 50 -> {51} [style=dotted]; 50 -> {45} [style=dashed]; + 51 -> {39} [color=green]; + 51 -> {39} [style=dashed]; 42 -> {43}; 43 -> {44}; 44 -> {50} [color=green]; 45 -> {46}; 46 -> {47}; 47 -> {51} [color=green]; + 39 -> {40}; + 40 -> {41}; subgraph cluster_14 { color=red 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 5babd342796..6b5d5f54d94 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot @@ -4,19 +4,10 @@ digraph overridenOpenVal_kt { edge [penwidth=2] subgraph cluster_0 { - color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; - } - 0 -> {1}; - 1 -> {2}; - - subgraph cluster_1 { color=red 6 [label="Enter class A" style="filled" fillcolor=red]; 7 [label="Part of class initialization"]; - subgraph cluster_2 { + subgraph cluster_1 { color=blue 3 [label="Enter property" style="filled" fillcolor=red]; 4 [label="Access variable R|/x|"]; @@ -24,27 +15,31 @@ digraph overridenOpenVal_kt { } 8 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_2 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } 6 -> {7} [color=green]; 7 -> {3} [color=green]; 7 -> {8} [style=dotted]; 7 -> {3} [style=dashed]; + 8 -> {0} [color=green]; + 8 -> {0} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {8} [color=green]; + 0 -> {1}; + 1 -> {2}; subgraph cluster_3 { color=red - 9 [label="Enter function " style="filled" fillcolor=red]; - 10 [label="Access variable R|/x|"]; - 11 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; - 12 [label="Exit function " style="filled" fillcolor=red]; + 31 [label="Enter class B" style="filled" fillcolor=red]; + 32 [label="Exit class B" style="filled" fillcolor=red]; } - 9 -> {10}; - 10 -> {11}; - 11 -> {12}; - subgraph cluster_4 { - color=red + color=blue 13 [label="Enter function test_1" style="filled" fillcolor=red]; subgraph cluster_5 { color=blue @@ -76,6 +71,19 @@ digraph overridenOpenVal_kt { } 30 [label="Exit function test_1" style="filled" fillcolor=red]; } + subgraph cluster_9 { + color=blue + 9 [label="Enter function " style="filled" fillcolor=red]; + 10 [label="Access variable R|/x|"]; + 11 [label="Delegated constructor call: super(...)" style="filled" fillcolor=yellow]; + 12 [label="Exit function " style="filled" fillcolor=red]; + } + 31 -> {32} [color=green]; + 32 -> {9 13} [color=green]; + 32 -> {9 13} [style=dashed]; + 9 -> {10}; + 10 -> {11}; + 11 -> {12}; 13 -> {14}; 14 -> {15}; 15 -> {16}; @@ -94,13 +102,6 @@ digraph overridenOpenVal_kt { 28 -> {29}; 29 -> {30}; - subgraph cluster_9 { - color=red - 31 [label="Enter class B" style="filled" fillcolor=red]; - 32 [label="Exit class B" style="filled" fillcolor=red]; - } - 31 -> {32} [color=green]; - subgraph cluster_10 { color=red 33 [label="Enter function test_2" style="filled" fillcolor=red]; diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/variables/delayedAssignment.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/variables/delayedAssignment.dot index da601d6e69f..938274b8b41 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/variables/delayedAssignment.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/variables/delayedAssignment.dot @@ -5,15 +5,11 @@ digraph delayedAssignment_kt { subgraph cluster_0 { color=red - 0 [label="Enter function " style="filled" fillcolor=red]; - 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 2 [label="Exit function " style="filled" fillcolor=red]; + 7 [label="Enter class A" style="filled" fillcolor=red]; + 8 [label="Exit class A" style="filled" fillcolor=red]; } - 0 -> {1}; - 1 -> {2}; - subgraph cluster_1 { - color=red + color=blue 3 [label="Enter function foo" style="filled" fillcolor=red]; subgraph cluster_2 { color=blue @@ -22,17 +18,21 @@ digraph delayedAssignment_kt { } 6 [label="Exit function foo" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 0 [label="Enter function " style="filled" fillcolor=red]; + 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 2 [label="Exit function " style="filled" fillcolor=red]; + } + 7 -> {8} [color=green]; + 8 -> {0 3} [color=green]; + 8 -> {0 3} [style=dashed]; + 0 -> {1}; + 1 -> {2}; 3 -> {4}; 4 -> {5}; 5 -> {6}; - subgraph cluster_3 { - color=red - 7 [label="Enter class A" style="filled" fillcolor=red]; - 8 [label="Exit class A" style="filled" fillcolor=red]; - } - 7 -> {8} [color=green]; - subgraph cluster_4 { color=red 9 [label="Enter function test" style="filled" fillcolor=red]; 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 163bccae457..d05f3daf0f8 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 @@ -76,8 +76,6 @@ digraph inAnonymousObject_kt { 4 -> {5} [color=red]; 4 -> {13} [style=dashed]; 5 -> {6}; - 5 -> {26 29} [color=green]; - 5 -> {26 29} [style=dashed]; 6 -> {7}; 7 -> {8}; 8 -> {9}; @@ -91,7 +89,8 @@ digraph inAnonymousObject_kt { 15 -> {20} [color=green]; 15 -> {16} [style=dotted]; 15 -> {20} [style=dashed]; - 16 -> {5} [color=green]; + 16 -> {5 26 29} [color=green]; + 16 -> {26 29} [style=dashed]; 17 -> {18}; 18 -> {19}; 19 -> {15} [color=green]; 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 e23e9716b1c..4d560127dbf 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 @@ -27,39 +27,16 @@ digraph inLocalClass_kt { 10 [label="Enter class LocalClass" style="filled" fillcolor=red]; 11 [label="Part of class initialization"]; subgraph cluster_4 { - color=blue - 29 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_5 { - color=blue - 30 [label="Enter block"]; - 31 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 32 [label="Exit block"]; - } - 33 [label="Exit function run" style="filled" fillcolor=red]; - } - subgraph cluster_6 { - color=blue - 23 [label="Enter function " style="filled" fillcolor=red]; - 24 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - subgraph cluster_7 { - color=blue - 25 [label="Enter block"]; - 26 [label="Function call: R|/b|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; - 27 [label="Exit block"]; - } - 28 [label="Exit function " style="filled" fillcolor=red]; - } - subgraph cluster_8 { color=blue 14 [label="Enter property" style="filled" fillcolor=red]; 15 [label="Access variable R|/a|"]; 16 [label="Exit property" style="filled" fillcolor=red]; } 12 [label="Part of class initialization"]; - subgraph cluster_9 { + subgraph cluster_5 { color=blue 17 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_10 { + subgraph cluster_6 { color=blue 18 [label="Enter block"]; 19 [label="Access variable R|/c|"]; @@ -70,14 +47,37 @@ digraph inLocalClass_kt { } 13 [label="Exit class LocalClass" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 29 [label="Enter function run" style="filled" fillcolor=red]; + subgraph cluster_8 { + color=blue + 30 [label="Enter block"]; + 31 [label="Function call: R|/d|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 32 [label="Exit block"]; + } + 33 [label="Exit function run" style="filled" fillcolor=red]; + } + subgraph cluster_9 { + color=blue + 23 [label="Enter function " style="filled" fillcolor=red]; + 24 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + subgraph cluster_10 { + color=blue + 25 [label="Enter block"]; + 26 [label="Function call: R|/b|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; + 27 [label="Exit block"]; + } + 28 [label="Exit function " style="filled" fillcolor=red]; + } 0 -> {1}; 1 -> {2}; 2 -> {3}; 3 -> {4}; 3 -> {14 17 23 29} [color=red]; 4 -> {5}; - 4 -> {10 23 29} [color=green]; - 4 -> {10 23 29} [style=dashed]; + 4 -> {10} [color=green]; + 4 -> {10} [style=dashed]; 5 -> {6}; 6 -> {7}; 7 -> {8}; @@ -89,6 +89,8 @@ digraph inLocalClass_kt { 12 -> {17} [color=green]; 12 -> {13} [style=dotted]; 12 -> {17} [style=dashed]; + 13 -> {23 29} [color=green]; + 13 -> {23 29} [style=dashed]; 14 -> {15}; 15 -> {16}; 16 -> {12} [color=green]; diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot index 77e080ce427..b78de7f6045 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/delegateWithAnonymousObject.dot @@ -5,20 +5,21 @@ digraph delegateWithAnonymousObject_kt { subgraph cluster_0 { color=red + 3 [label="Enter class DelegateProvider" style="filled" fillcolor=red]; + 4 [label="Exit class DelegateProvider" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function " style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; 2 [label="Exit function " style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class DelegateProvider" style="filled" fillcolor=red]; - 4 [label="Exit class DelegateProvider" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { color=red 5 [label="Enter function delegate" style="filled" fillcolor=red]; @@ -45,15 +46,11 @@ digraph delegateWithAnonymousObject_kt { subgraph cluster_4 { color=red - 14 [label="Enter function " style="filled" fillcolor=red]; - 15 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; - 16 [label="Exit function " style="filled" fillcolor=red]; + 21 [label="Enter class IssueListView" style="filled" fillcolor=red]; + 22 [label="Exit class IssueListView" style="filled" fillcolor=red]; } - 14 -> {15}; - 15 -> {16}; - subgraph cluster_5 { - color=red + color=blue 17 [label="Enter function updateFrom" style="filled" fillcolor=red]; subgraph cluster_6 { color=blue @@ -62,30 +59,25 @@ digraph delegateWithAnonymousObject_kt { } 20 [label="Exit function updateFrom" style="filled" fillcolor=red]; } + subgraph cluster_7 { + color=blue + 14 [label="Enter function " style="filled" fillcolor=red]; + 15 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; + 16 [label="Exit function " style="filled" fillcolor=red]; + } + 21 -> {22} [color=green]; + 22 -> {14 17} [color=green]; + 22 -> {14 17} [style=dashed]; + 14 -> {15}; + 15 -> {16}; 17 -> {18}; 18 -> {19}; 19 -> {20}; - subgraph cluster_7 { - color=red - 21 [label="Enter class IssueListView" style="filled" fillcolor=red]; - 22 [label="Exit class IssueListView" style="filled" fillcolor=red]; - } - 21 -> {22} [color=green]; - subgraph cluster_8 { - color=red - 23 [label="Enter function " style="filled" fillcolor=red]; - 24 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; - 25 [label="Exit function " style="filled" fillcolor=red]; - } - 23 -> {24}; - 24 -> {25}; - - subgraph cluster_9 { color=red 54 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_10 { + subgraph cluster_9 { color=blue 55 [label="Enter block"]; 56 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; @@ -107,10 +99,10 @@ digraph delegateWithAnonymousObject_kt { 60 -> {61} [style=dotted]; 61 -> {62} [style=dotted]; - subgraph cluster_11 { + subgraph cluster_10 { color=red 63 [label="Enter function setter" style="filled" fillcolor=red]; - subgraph cluster_12 { + subgraph cluster_11 { color=blue 64 [label="Enter block"]; 65 [label="Access variable D|/IssuesListUserProfile.issueListView|"]; @@ -129,22 +121,22 @@ digraph delegateWithAnonymousObject_kt { 68 -> {69}; 69 -> {70}; - subgraph cluster_13 { + subgraph cluster_12 { color=red 79 [label="Enter class IssuesListUserProfile" style="filled" fillcolor=red]; 80 [label="Part of class initialization"]; - subgraph cluster_14 { + subgraph cluster_13 { color=blue 71 [label="Enter property" style="filled" fillcolor=red]; 72 [label="Postponed enter to lambda"]; - subgraph cluster_15 { + subgraph cluster_14 { color=blue 26 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_16 { + subgraph cluster_15 { color=blue 27 [label="Enter block"]; 28 [label="Enter anonymous object"]; - subgraph cluster_17 { + subgraph cluster_16 { color=blue 33 [label="Enter class " style="filled" fillcolor=red]; 34 [label="Exit class " style="filled" fillcolor=red]; @@ -155,10 +147,10 @@ digraph delegateWithAnonymousObject_kt { } 32 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - subgraph cluster_18 { + subgraph cluster_17 { color=blue 45 [label="Enter function setValue" style="filled" fillcolor=red]; - subgraph cluster_19 { + subgraph cluster_18 { color=blue 46 [label="Enter block"]; 47 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; @@ -170,10 +162,10 @@ digraph delegateWithAnonymousObject_kt { } 53 [label="Exit function setValue" style="filled" fillcolor=red]; } - subgraph cluster_20 { + subgraph cluster_19 { color=blue 38 [label="Enter function getValue" style="filled" fillcolor=red]; - subgraph cluster_21 { + subgraph cluster_20 { color=blue 39 [label="Enter block"]; 40 [label="Function call: R|/IssueListView.IssueListView|()" style="filled" fillcolor=yellow]; @@ -183,7 +175,7 @@ digraph delegateWithAnonymousObject_kt { } 44 [label="Exit function getValue" style="filled" fillcolor=red]; } - subgraph cluster_22 { + subgraph cluster_21 { color=blue 35 [label="Enter function " style="filled" fillcolor=red]; 36 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; @@ -198,10 +190,18 @@ digraph delegateWithAnonymousObject_kt { } 81 [label="Exit class IssuesListUserProfile" style="filled" fillcolor=red]; } + subgraph cluster_22 { + color=blue + 23 [label="Enter function " style="filled" fillcolor=red]; + 24 [label="Delegated constructor call: super|>()" style="filled" fillcolor=yellow]; + 25 [label="Exit function " style="filled" fillcolor=red]; + } 79 -> {80} [color=green]; 80 -> {71} [color=green]; 80 -> {81} [style=dotted]; 80 -> {71} [style=dashed]; + 81 -> {23} [color=green]; + 81 -> {23} [style=dashed]; 71 -> {72}; 72 -> {26 73 74}; 72 -> {26} [style=dashed]; @@ -219,12 +219,11 @@ digraph delegateWithAnonymousObject_kt { 28 -> {29} [color=red]; 28 -> {33} [style=dashed]; 29 -> {30}; - 29 -> {35 38 45} [color=green]; - 29 -> {35 38 45} [style=dashed]; 30 -> {31}; 31 -> {32}; 33 -> {34} [color=green]; - 34 -> {29} [color=green]; + 34 -> {29 35 38 45} [color=green]; + 34 -> {35 38 45} [style=dashed]; 35 -> {36}; 36 -> {37}; 38 -> {39}; @@ -243,5 +242,7 @@ digraph delegateWithAnonymousObject_kt { 50 -> {51} [style=dotted]; 51 -> {52} [style=dotted]; 52 -> {53} [style=dotted]; + 23 -> {24}; + 24 -> {25}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot index b89a00e9046..8076ce117f4 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot @@ -50,19 +50,10 @@ digraph plusAssignWithLambdaInRhs_kt { 15 -> {16} [style=dotted]; subgraph cluster_4 { - color=red - 17 [label="Enter function " style="filled" fillcolor=red]; - 18 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; - 19 [label="Exit function " style="filled" fillcolor=red]; - } - 17 -> {18}; - 18 -> {19}; - - subgraph cluster_5 { color=red 23 [label="Enter class A" style="filled" fillcolor=red]; 24 [label="Part of class initialization"]; - subgraph cluster_6 { + subgraph cluster_5 { color=blue 20 [label="Enter property" style="filled" fillcolor=red]; 21 [label="Access variable R|/executor|"]; @@ -70,13 +61,23 @@ digraph plusAssignWithLambdaInRhs_kt { } 25 [label="Exit class A" style="filled" fillcolor=red]; } + subgraph cluster_6 { + color=blue + 17 [label="Enter function " style="filled" fillcolor=red]; + 18 [label="Delegated constructor call: super()" style="filled" fillcolor=yellow]; + 19 [label="Exit function " style="filled" fillcolor=red]; + } 23 -> {24} [color=green]; 24 -> {20} [color=green]; 24 -> {25} [style=dotted]; 24 -> {20} [style=dashed]; + 25 -> {17} [color=green]; + 25 -> {17} [style=dashed]; 20 -> {21}; 21 -> {22}; 22 -> {25} [color=green]; + 17 -> {18}; + 18 -> {19}; subgraph cluster_7 { color=red diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index c47df0532a0..b67fbab2a87 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -426,6 +426,7 @@ class ControlFlowGraphBuilder { var prevInitPartNode: CFGNode<*>? = null for (declaration in klass.declarations) { val graph = when (declaration) { + // TODO: property accessors? is FirProperty -> declaration.controlFlowGraphReference?.controlFlowGraph is FirField -> declaration.controlFlowGraphReference?.controlFlowGraph is FirAnonymousInitializer -> declaration.controlFlowGraphReference?.controlFlowGraph @@ -446,6 +447,23 @@ class ControlFlowGraphBuilder { addEdge(node, exitNode, preferredKind = EdgeKind.CfgForward) if (prevInitPartNode != null) addEdge(prevInitPartNode!!, exitNode, preferredKind = EdgeKind.DeadForward) exitNode.updateDeadStatus() + + // TODO: Here we're assuming that the methods are called after the object is constructed, which is really not true + // (init blocks can call them). But FE1.0 did so too, hence the following code compiles and prints 0: + // val x: Int + // object { + // fun bar() = x + // init { x = bar() } + // } + // println(x) + for (declaration in klass.declarations) { + if (declaration !is FirFunction) continue + val graph = declaration.controlFlowGraphReference?.controlFlowGraph ?: continue + addEdge(exitNode, graph.enterNode, preferredKind = EdgeKind.CfgForward) + exitNode.addSubGraph(graph) + currentGraph.addSubGraph(graph) + } + return popGraph() } @@ -468,7 +486,6 @@ class ControlFlowGraphBuilder { val node = createLocalClassExitNode(klass).also { addNewSimpleNodeIfPossible(it) } - visitLocalClassFunctions(klass, node) addEdge(node, graph.enterNode, preferredKind = EdgeKind.CfgForward) return node to graph } @@ -497,15 +514,6 @@ class ControlFlowGraphBuilder { addEdge(graph.exitNode, exitNode, preferredKind = EdgeKind.CfgForward) } addEdge(enterNode, exitNode, preferredKind = EdgeKind.DfgForward) - // TODO: Here we're assuming that the methods are called after the object is constructed, which is really not true - // (init blocks can call them). But FE1.0 did so too, hence the following code compiles and prints 0: - // val x: Int - // object { - // fun bar() = x - // init { x = bar() } - // } - // println(x) - visitLocalClassFunctions(anonymousObject, exitNode) lastNodes.push(exitNode) return exitNode to graph } @@ -532,17 +540,6 @@ class ControlFlowGraphBuilder { } } - private fun visitLocalClassFunctions(klass: FirClass, node: CFGNodeWithSubgraphs<*>) { - klass.declarations.filterIsInstance().forEach { function -> - val functionGraph = function.controlFlowGraphReference?.controlFlowGraph - if (functionGraph != null && functionGraph.owner == null) { - addEdge(node, functionGraph.enterNode, preferredKind = EdgeKind.CfgForward) - node.addSubGraph(functionGraph) - currentGraph.addSubGraph(functionGraph) - } - } - } - // ----------------------------------- Value parameters (and it's defaults) ----------------------------------- fun enterValueParameter(valueParameter: FirValueParameter): EnterDefaultArgumentsNode? { diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt index b9c138b9876..a1a86086b5e 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/CFGNode.kt @@ -248,7 +248,7 @@ class ClassEnterNode(owner: ControlFlowGraph, override val fir: FirClass, level: } @OptIn(CfgInternals::class) -class ClassExitNode(owner: ControlFlowGraph, override val fir: FirClass, level: Int, id: Int) : CFGNode(owner, level, id), +class ClassExitNode(owner: ControlFlowGraph, override val fir: FirClass, level: Int, id: Int) : CFGNodeWithSubgraphs(owner, level, id), ExitNodeMarker { init { owner.exitNode = this @@ -271,7 +271,7 @@ class AnonymousObjectEnterNode(owner: ControlFlowGraph, override val fir: FirAno } } -class AnonymousObjectExitNode(owner: ControlFlowGraph, override val fir: FirAnonymousObject, level: Int, id: Int) : CFGNodeWithSubgraphs(owner, level, id) { +class AnonymousObjectExitNode(owner: ControlFlowGraph, override val fir: FirAnonymousObject, level: Int, id: Int) : CFGNode(owner, level, id) { override fun accept(visitor: ControlFlowGraphVisitor, data: D): R { return visitor.visitAnonymousObjectExitNode(this, data) } diff --git a/compiler/testData/codegen/box/smartCasts/kt44814.dot b/compiler/testData/codegen/box/smartCasts/kt44814.dot index 3e69fcea035..8dd1e0e51e7 100644 --- a/compiler/testData/codegen/box/smartCasts/kt44814.dot +++ b/compiler/testData/codegen/box/smartCasts/kt44814.dot @@ -5,64 +5,57 @@ digraph kt44814_kt { subgraph cluster_0 { color=red + 3 [label="Enter class FlyweightCapableTreeStructure [1]" style="filled" fillcolor=red]; + 4 [label="Exit class FlyweightCapableTreeStructure [1]" style="filled" fillcolor=red]; + } + subgraph cluster_1 { + color=blue 0 [label="Enter function [2]" style="filled" fillcolor=red]; 1 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; 2 [label="Exit function [2]" style="filled" fillcolor=red]; } + 3 -> {4} [color=green]; + 4 -> {0} [color=green]; + 4 -> {0} [style=dashed]; 0 -> {1}; 1 -> {2}; - subgraph cluster_1 { - color=red - 3 [label="Enter class FlyweightCapableTreeStructure [1]" style="filled" fillcolor=red]; - 4 [label="Exit class FlyweightCapableTreeStructure [1]" style="filled" fillcolor=red]; - } - 3 -> {4} [color=green]; - subgraph cluster_2 { - color=red - 5 [label="Enter function [2]" style="filled" fillcolor=red]; - 6 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 7 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 5 -> {6}; - 6 -> {7}; - - subgraph cluster_3 { color=red 8 [label="Enter class FirSourceElement [1]" style="filled" fillcolor=red]; 9 [label="Exit class FirSourceElement [1]" style="filled" fillcolor=red]; } + subgraph cluster_3 { + color=blue + 5 [label="Enter function [2]" style="filled" fillcolor=red]; + 6 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 7 [label="Exit function [2]" style="filled" fillcolor=red]; + } 8 -> {9} [color=green]; + 9 -> {5} [color=green]; + 9 -> {5} [style=dashed]; + 5 -> {6}; + 6 -> {7}; subgraph cluster_4 { - color=red - 10 [label="Enter function [2]" style="filled" fillcolor=red]; - 11 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 12 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 10 -> {11}; - 11 -> {12}; - - subgraph cluster_5 { color=red 22 [label="Enter class FirPsiSourceElement [1]" style="filled" fillcolor=red]; 23 [label="Part of class initialization [1]"]; - subgraph cluster_6 { + subgraph cluster_5 { color=blue 13 [label="Enter property [2]" style="filled" fillcolor=red]; 14 [label="Access variable R|/psi| [2]"]; 15 [label="Exit property [2]" style="filled" fillcolor=red]; } 24 [label="Part of class initialization [1]"]; - subgraph cluster_7 { + subgraph cluster_6 { color=blue 16 [label="Enter property [2]" style="filled" fillcolor=red]; 17 [label="Access variable R|/lighterASTNode| [2]"]; 18 [label="Exit property [2]" style="filled" fillcolor=red]; } 25 [label="Part of class initialization [1]"]; - subgraph cluster_8 { + subgraph cluster_7 { color=blue 19 [label="Enter property [2]" style="filled" fillcolor=red]; 20 [label="Access variable R|/treeStructure| [2]"]; @@ -70,6 +63,12 @@ digraph kt44814_kt { } 26 [label="Exit class FirPsiSourceElement [1]" style="filled" fillcolor=red]; } + subgraph cluster_8 { + color=blue + 10 [label="Enter function [2]" style="filled" fillcolor=red]; + 11 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 12 [label="Exit function [2]" style="filled" fillcolor=red]; + } 22 -> {23} [color=green]; 23 -> {13} [color=green]; 23 -> {24} [style=dotted]; @@ -80,6 +79,8 @@ digraph kt44814_kt { 25 -> {19} [color=green]; 25 -> {26} [style=dotted]; 25 -> {19} [style=dashed]; + 26 -> {10} [color=green]; + 26 -> {10} [style=dashed]; 13 -> {14}; 14 -> {15}; 15 -> {24} [color=green]; @@ -89,28 +90,21 @@ digraph kt44814_kt { 19 -> {20}; 20 -> {21}; 21 -> {26} [color=green]; + 10 -> {11}; + 11 -> {12}; subgraph cluster_9 { - color=red - 27 [label="Enter function [2]" style="filled" fillcolor=red]; - 28 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 29 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 27 -> {28}; - 28 -> {29}; - - subgraph cluster_10 { color=red 36 [label="Enter class FirLightSourceElement [1]" style="filled" fillcolor=red]; 37 [label="Part of class initialization [1]"]; - subgraph cluster_11 { + subgraph cluster_10 { color=blue 30 [label="Enter property [2]" style="filled" fillcolor=red]; 31 [label="Access variable R|/lighterASTNode| [2]"]; 32 [label="Exit property [2]" style="filled" fillcolor=red]; } 38 [label="Part of class initialization [1]"]; - subgraph cluster_12 { + subgraph cluster_11 { color=blue 33 [label="Enter property [2]" style="filled" fillcolor=red]; 34 [label="Access variable R|/treeStructure| [2]"]; @@ -118,6 +112,12 @@ digraph kt44814_kt { } 39 [label="Exit class FirLightSourceElement [1]" style="filled" fillcolor=red]; } + subgraph cluster_12 { + color=blue + 27 [label="Enter function [2]" style="filled" fillcolor=red]; + 28 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 29 [label="Exit function [2]" style="filled" fillcolor=red]; + } 36 -> {37} [color=green]; 37 -> {30} [color=green]; 37 -> {38} [style=dotted]; @@ -125,67 +125,75 @@ digraph kt44814_kt { 38 -> {33} [color=green]; 38 -> {39} [style=dotted]; 38 -> {33} [style=dashed]; + 39 -> {27} [color=green]; + 39 -> {27} [style=dashed]; 30 -> {31}; 31 -> {32}; 32 -> {38} [color=green]; 33 -> {34}; 34 -> {35}; 35 -> {39} [color=green]; + 27 -> {28}; + 28 -> {29}; subgraph cluster_13 { - color=red - 40 [label="Enter function [2]" style="filled" fillcolor=red]; - 41 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 42 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 40 -> {41}; - 41 -> {42}; - - subgraph cluster_14 { color=red 43 [label="Enter class PsiElement [1]" style="filled" fillcolor=red]; 44 [label="Exit class PsiElement [1]" style="filled" fillcolor=red]; } + subgraph cluster_14 { + color=blue + 40 [label="Enter function [2]" style="filled" fillcolor=red]; + 41 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 42 [label="Exit function [2]" style="filled" fillcolor=red]; + } 43 -> {44} [color=green]; + 44 -> {40} [color=green]; + 44 -> {40} [style=dashed]; + 40 -> {41}; + 41 -> {42}; subgraph cluster_15 { - color=red - 45 [label="Enter function [2]" style="filled" fillcolor=red]; - 46 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 47 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 45 -> {46}; - 46 -> {47}; - - subgraph cluster_16 { color=red 48 [label="Enter class ASTNode [1]" style="filled" fillcolor=red]; 49 [label="Exit class ASTNode [1]" style="filled" fillcolor=red]; } + subgraph cluster_16 { + color=blue + 45 [label="Enter function [2]" style="filled" fillcolor=red]; + 46 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 47 [label="Exit function [2]" style="filled" fillcolor=red]; + } 48 -> {49} [color=green]; + 49 -> {45} [color=green]; + 49 -> {45} [style=dashed]; + 45 -> {46}; + 46 -> {47}; subgraph cluster_17 { color=red - 50 [label="Enter function [2]" style="filled" fillcolor=red]; + 70 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; + 71 [label="Part of class initialization [1]"]; subgraph cluster_18 { color=blue - 53 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; - 54 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; - 55 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; + 56 [label="Enter property [2]" style="filled" fillcolor=red]; + 57 [label="Access variable R|/_children| [2]"]; + 58 [label="Exit property [2]" style="filled" fillcolor=red]; } - 51 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 52 [label="Exit function [2]" style="filled" fillcolor=red]; + 72 [label="Part of class initialization [1]"]; + subgraph cluster_19 { + color=blue + 66 [label="Enter property [2]" style="filled" fillcolor=red]; + 67 [label="Access qualifier /TokenType [2]"]; + 68 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; + 69 [label="Exit property [2]" style="filled" fillcolor=red]; + } + 73 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; } - 50 -> {51 53}; - 51 -> {52}; - 53 -> {54}; - 53 -> {53} [style=dashed]; - 54 -> {55}; - - subgraph cluster_19 { - color=red + subgraph cluster_20 { + color=blue 59 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; - subgraph cluster_20 { + subgraph cluster_21 { color=blue 60 [label="Enter block [2]"]; 61 [label="Access variable R|/LighterASTNode._children| [2]"]; @@ -195,33 +203,17 @@ digraph kt44814_kt { } 65 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; } - 59 -> {60}; - 60 -> {61}; - 61 -> {62}; - 62 -> {65}; - 62 -> {63} [style=dotted]; - 63 -> {64} [style=dotted]; - 64 -> {65} [style=dotted]; - - subgraph cluster_21 { - color=red - 70 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; - 71 [label="Part of class initialization [1]"]; - subgraph cluster_22 { - color=blue - 56 [label="Enter property [2]" style="filled" fillcolor=red]; - 57 [label="Access variable R|/_children| [2]"]; - 58 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 72 [label="Part of class initialization [1]"]; - subgraph cluster_23 { - color=blue - 66 [label="Enter property [2]" style="filled" fillcolor=red]; - 67 [label="Access qualifier /TokenType [2]"]; - 68 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; - 69 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 73 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; + subgraph cluster_22 { + color=blue + 50 [label="Enter function [2]" style="filled" fillcolor=red]; + 51 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 52 [label="Exit function [2]" style="filled" fillcolor=red]; + } + subgraph cluster_23 { + color=blue + 53 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; + 54 [label="Function call: R|kotlin/collections/emptyList|() [3]" style="filled" fillcolor=yellow]; + 55 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; } 70 -> {71} [color=green]; 71 -> {56} [color=green]; @@ -230,6 +222,8 @@ digraph kt44814_kt { 72 -> {66} [color=green]; 72 -> {73} [style=dotted]; 72 -> {66} [style=dashed]; + 73 -> {50 59} [color=green]; + 73 -> {50 59} [style=dashed]; 56 -> {57}; 57 -> {58}; 58 -> {72} [color=green]; @@ -237,30 +231,24 @@ digraph kt44814_kt { 67 -> {68}; 68 -> {69}; 69 -> {73} [color=green]; + 50 -> {51 53}; + 51 -> {52}; + 53 -> {54}; + 53 -> {53} [style=dashed]; + 54 -> {55}; + 59 -> {60}; + 60 -> {61}; + 61 -> {62}; + 62 -> {65}; + 62 -> {63} [style=dotted]; + 63 -> {64} [style=dotted]; + 64 -> {65} [style=dotted]; subgraph cluster_24 { - color=red - 74 [label="Enter function [2]" style="filled" fillcolor=red]; - 75 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 76 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 74 -> {75}; - 75 -> {76}; - - subgraph cluster_25 { - color=red - 77 [label="Enter function [3]" style="filled" fillcolor=red]; - 78 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 79 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 77 -> {78}; - 78 -> {79}; - - subgraph cluster_26 { color=red 83 [label="Enter class Companion [2]" style="filled" fillcolor=red]; 84 [label="Part of class initialization [2]"]; - subgraph cluster_27 { + subgraph cluster_25 { color=blue 80 [label="Enter property [3]" style="filled" fillcolor=red]; 81 [label="Function call: R|/TokenType.TokenType|() [3]" style="filled" fillcolor=yellow]; @@ -268,67 +256,80 @@ digraph kt44814_kt { } 85 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } + subgraph cluster_26 { + color=blue + 77 [label="Enter function [3]" style="filled" fillcolor=red]; + 78 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 79 [label="Exit function [3]" style="filled" fillcolor=red]; + } 83 -> {84} [color=green]; 84 -> {80} [color=green]; 84 -> {85} [style=dotted]; 84 -> {80} [style=dashed]; + 85 -> {77} [color=green]; + 85 -> {77} [style=dashed]; 80 -> {81}; 81 -> {82}; 82 -> {85} [color=green]; + 77 -> {78}; + 78 -> {79}; - subgraph cluster_28 { + subgraph cluster_27 { color=red 86 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; 87 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; } + subgraph cluster_28 { + color=blue + 74 [label="Enter function [2]" style="filled" fillcolor=red]; + 75 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 76 [label="Exit function [2]" style="filled" fillcolor=red]; + } 86 -> {87} [color=green]; + 87 -> {74} [color=green]; + 87 -> {74} [style=dashed]; + 74 -> {75}; + 75 -> {76}; subgraph cluster_29 { - color=red - 88 [label="Enter function [2]" style="filled" fillcolor=red]; - 89 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 90 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 88 -> {89}; - 89 -> {90}; - - subgraph cluster_30 { color=red 91 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; 92 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; } + subgraph cluster_30 { + color=blue + 88 [label="Enter function [2]" style="filled" fillcolor=red]; + 89 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 90 [label="Exit function [2]" style="filled" fillcolor=red]; + } 91 -> {92} [color=green]; + 92 -> {88} [color=green]; + 92 -> {88} [style=dashed]; + 88 -> {89}; + 89 -> {90}; subgraph cluster_31 { - color=red - 93 [label="Enter function [2]" style="filled" fillcolor=red]; - 94 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 95 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 93 -> {94}; - 94 -> {95}; - - subgraph cluster_32 { color=red 96 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; 97 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; } + subgraph cluster_32 { + color=blue + 93 [label="Enter function [2]" style="filled" fillcolor=red]; + 94 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 95 [label="Exit function [2]" style="filled" fillcolor=red]; + } 96 -> {97} [color=green]; + 97 -> {93} [color=green]; + 97 -> {93} [style=dashed]; + 93 -> {94}; + 94 -> {95}; subgraph cluster_33 { - color=red - 98 [label="Enter function [2]" style="filled" fillcolor=red]; - 99 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 100 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 98 -> {99}; - 99 -> {100}; - - subgraph cluster_34 { color=red 104 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; 105 [label="Part of class initialization [1]"]; - subgraph cluster_35 { + subgraph cluster_34 { color=blue 101 [label="Enter property [2]" style="filled" fillcolor=red]; 102 [label="Function call: R|/KtModifierList.KtModifierList|() [2]" style="filled" fillcolor=yellow]; @@ -336,61 +337,50 @@ digraph kt44814_kt { } 106 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; } + subgraph cluster_35 { + color=blue + 98 [label="Enter function [2]" style="filled" fillcolor=red]; + 99 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 100 [label="Exit function [2]" style="filled" fillcolor=red]; + } 104 -> {105} [color=green]; 105 -> {101} [color=green]; 105 -> {106} [style=dotted]; 105 -> {101} [style=dashed]; + 106 -> {98} [color=green]; + 106 -> {98} [style=dashed]; 101 -> {102}; 102 -> {103}; 103 -> {106} [color=green]; + 98 -> {99}; + 99 -> {100}; subgraph cluster_36 { color=red - 107 [label="Enter function [2]" style="filled" fillcolor=red]; - 108 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 109 [label="Exit function [2]" style="filled" fillcolor=red]; + 121 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; + 122 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; } - 107 -> {108}; - 108 -> {109}; - subgraph cluster_37 { - color=red + color=blue 116 [label="Enter function [3]" style="filled" fillcolor=red]; 117 [label="Access variable R|/node| [4]"]; 118 [label="Access variable R|/token| [4]"]; 119 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; 120 [label="Exit function [3]" style="filled" fillcolor=red]; } + 121 -> {122} [color=green]; + 122 -> {116} [color=green]; + 122 -> {116} [style=dashed]; 116 -> {117}; 117 -> {118}; 118 -> {119}; 119 -> {120}; subgraph cluster_38 { - color=red - 121 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; - 122 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; - } - 121 -> {122} [color=green]; - - subgraph cluster_39 { - color=red - 123 [label="Enter function [3]" style="filled" fillcolor=red]; - 124 [label="Access variable R|/node| [4]"]; - 125 [label="Access variable R|/token| [4]"]; - 126 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; - 127 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 123 -> {124}; - 124 -> {125}; - 125 -> {126}; - 126 -> {127}; - - subgraph cluster_40 { color=red 131 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; 132 [label="Part of class initialization [2]"]; - subgraph cluster_41 { + subgraph cluster_39 { color=blue 128 [label="Enter property [3]" style="filled" fillcolor=red]; 129 [label="Access variable R|/tree| [3]"]; @@ -398,26 +388,40 @@ digraph kt44814_kt { } 133 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; } + subgraph cluster_40 { + color=blue + 123 [label="Enter function [3]" style="filled" fillcolor=red]; + 124 [label="Access variable R|/node| [4]"]; + 125 [label="Access variable R|/token| [4]"]; + 126 [label="Delegated constructor call: super|>(...) [3]" style="filled" fillcolor=yellow]; + 127 [label="Exit function [3]" style="filled" fillcolor=red]; + } 131 -> {132} [color=green]; 132 -> {128} [color=green]; 132 -> {133} [style=dotted]; 132 -> {128} [style=dashed]; + 133 -> {123} [color=green]; + 133 -> {123} [style=dashed]; 128 -> {129}; 129 -> {130}; 130 -> {133} [color=green]; + 123 -> {124}; + 124 -> {125}; + 125 -> {126}; + 126 -> {127}; - subgraph cluster_42 { + subgraph cluster_41 { color=red 134 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; 135 [label="Part of class initialization [1]"]; - subgraph cluster_43 { + subgraph cluster_42 { color=blue 110 [label="Enter property [2]" style="filled" fillcolor=red]; 111 [label="Access variable R|/node| [2]"]; 112 [label="Exit property [2]" style="filled" fillcolor=red]; } 136 [label="Part of class initialization [1]"]; - subgraph cluster_44 { + subgraph cluster_43 { color=blue 113 [label="Enter property [2]" style="filled" fillcolor=red]; 114 [label="Access variable R|/token| [2]"]; @@ -425,6 +429,12 @@ digraph kt44814_kt { } 137 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; } + subgraph cluster_44 { + color=blue + 107 [label="Enter function [2]" style="filled" fillcolor=red]; + 108 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 109 [label="Exit function [2]" style="filled" fillcolor=red]; + } 134 -> {135} [color=green]; 135 -> {110} [color=green]; 135 -> {136} [style=dotted]; @@ -432,36 +442,22 @@ digraph kt44814_kt { 136 -> {113} [color=green]; 136 -> {137} [style=dotted]; 136 -> {113} [style=dashed]; + 137 -> {107} [color=green]; + 137 -> {107} [style=dashed]; 110 -> {111}; 111 -> {112}; 112 -> {136} [color=green]; 113 -> {114}; 114 -> {115}; 115 -> {137} [color=green]; + 107 -> {108}; + 108 -> {109}; subgraph cluster_45 { - color=red - 138 [label="Enter function [2]" style="filled" fillcolor=red]; - 139 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; - 140 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 138 -> {139}; - 139 -> {140}; - - subgraph cluster_46 { - color=red - 144 [label="Enter function [3]" style="filled" fillcolor=red]; - 145 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 146 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 144 -> {145}; - 145 -> {146}; - - subgraph cluster_47 { color=red 150 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; 151 [label="Part of class initialization [2]"]; - subgraph cluster_48 { + subgraph cluster_46 { color=blue 147 [label="Enter property [3]" style="filled" fillcolor=red]; 148 [label="Access variable R|/modifierList| [3]"]; @@ -469,35 +465,36 @@ digraph kt44814_kt { } 152 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; } + subgraph cluster_47 { + color=blue + 144 [label="Enter function [3]" style="filled" fillcolor=red]; + 145 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 146 [label="Exit function [3]" style="filled" fillcolor=red]; + } 150 -> {151} [color=green]; 151 -> {147} [color=green]; 151 -> {152} [style=dotted]; 151 -> {147} [style=dashed]; + 152 -> {144} [color=green]; + 152 -> {144} [style=dashed]; 147 -> {148}; 148 -> {149}; 149 -> {152} [color=green]; + 144 -> {145}; + 145 -> {146}; - subgraph cluster_49 { - color=red - 153 [label="Enter function [3]" style="filled" fillcolor=red]; - 154 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 155 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 153 -> {154}; - 154 -> {155}; - - subgraph cluster_50 { + subgraph cluster_48 { color=red 162 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; 163 [label="Part of class initialization [2]"]; - subgraph cluster_51 { + subgraph cluster_49 { color=blue 156 [label="Enter property [3]" style="filled" fillcolor=red]; 157 [label="Access variable R|/modifierList| [3]"]; 158 [label="Exit property [3]" style="filled" fillcolor=red]; } 164 [label="Part of class initialization [2]"]; - subgraph cluster_52 { + subgraph cluster_50 { color=blue 159 [label="Enter property [3]" style="filled" fillcolor=red]; 160 [label="Access variable R|/tree| [3]"]; @@ -505,6 +502,12 @@ digraph kt44814_kt { } 165 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; } + subgraph cluster_51 { + color=blue + 153 [label="Enter function [3]" style="filled" fillcolor=red]; + 154 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 155 [label="Exit function [3]" style="filled" fillcolor=red]; + } 162 -> {163} [color=green]; 163 -> {156} [color=green]; 163 -> {164} [style=dotted]; @@ -512,33 +515,95 @@ digraph kt44814_kt { 164 -> {159} [color=green]; 164 -> {165} [style=dotted]; 164 -> {159} [style=dashed]; + 165 -> {153} [color=green]; + 165 -> {153} [style=dashed]; 156 -> {157}; 157 -> {158}; 158 -> {164} [color=green]; 159 -> {160}; 160 -> {161}; 161 -> {165} [color=green]; + 153 -> {154}; + 154 -> {155}; - subgraph cluster_53 { + subgraph cluster_52 { color=red - 166 [label="Enter function [3]" style="filled" fillcolor=red]; - 167 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; - 168 [label="Exit function [3]" style="filled" fillcolor=red]; + 282 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 283 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } - 166 -> {167}; - 167 -> {168}; - - subgraph cluster_54 { - color=red + subgraph cluster_53 { + color=blue + 249 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; + subgraph cluster_54 { + color=blue + 250 [label="Enter block [3]"]; + 251 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; + 252 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; + 253 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; + 254 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; + 255 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; + 256 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; + 257 [label="Access variable R|/sourceElement| [4]"]; + 258 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; + 259 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; + subgraph cluster_55 { + color=blue + 260 [label="Enter when [3]"]; + subgraph cluster_56 { + color=blue + 261 [label="Enter when branch condition [4]"]; + 262 [label="Access variable R|/result| [5]"]; + 263 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; + 264 [label="Exit when branch condition [4]"]; + } + subgraph cluster_57 { + color=blue + 265 [label="Enter when branch condition else [5]"]; + 266 [label="Exit when branch condition [5]"]; + } + 267 [label="Enter when branch result [6]"]; + subgraph cluster_58 { + color=blue + 268 [label="Enter block [6]"]; + 269 [label="Const: String(Fail) [6]"]; + 270 [label="Exit block [6]"]; + } + 271 [label="Exit when branch result [5]"]; + 272 [label="Enter when branch result [5]"]; + subgraph cluster_59 { + color=blue + 273 [label="Enter block [5]"]; + 274 [label="Const: String(OK) [5]"]; + 275 [label="Exit block [5]"]; + } + 276 [label="Exit when branch result [4]"]; + 277 [label="Exit when [3]"]; + } + 278 [label="Jump: ^boxImpl when () { + (R|/result| is R|FirModifierList.FirLightModifierList|) -> { + String(OK) + } + else -> { + String(Fail) + } +} + [3]"]; + 279 [label="Stub [3]" style="filled" fillcolor=gray]; + 280 [label="Exit block [3]" style="filled" fillcolor=gray]; + } + 281 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; + } + subgraph cluster_60 { + color=blue 169 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; - subgraph cluster_55 { + subgraph cluster_61 { color=blue 170 [label="Enter block [3]"]; - subgraph cluster_56 { + subgraph cluster_62 { color=blue 171 [label="Enter when [3]"]; 172 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; - subgraph cluster_57 { + subgraph cluster_63 { color=blue 173 [label="Enter when branch condition [4]"]; 174 [label="Exit $subj [5]"]; @@ -546,14 +611,14 @@ digraph kt44814_kt { 176 [label="Equality operator == [5]"]; 177 [label="Exit when branch condition [4]"]; } - subgraph cluster_58 { + subgraph cluster_64 { color=blue 178 [label="Enter when branch condition [5]"]; 179 [label="Exit $subj [6]"]; 180 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [6]"]; 181 [label="Exit when branch condition [5]"]; } - subgraph cluster_59 { + subgraph cluster_65 { color=blue 182 [label="Enter when branch condition [6]"]; 183 [label="Exit $subj [7]"]; @@ -561,17 +626,17 @@ digraph kt44814_kt { 185 [label="Exit when branch condition [6]"]; } 186 [label="Enter when branch result [7]"]; - subgraph cluster_60 { + subgraph cluster_66 { color=blue 187 [label="Enter block [7]"]; 188 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; 189 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; 190 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]" style="filled" fillcolor=yellow]; 191 [label="Postponed enter to lambda [8]"]; - subgraph cluster_61 { + subgraph cluster_67 { color=blue 238 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; - subgraph cluster_62 { + subgraph cluster_68 { color=blue 239 [label="Enter block [9]"]; 240 [label="Access variable R|/it| [9]"]; @@ -602,7 +667,7 @@ digraph kt44814_kt { } 206 [label="Exit when branch result [6]"]; 207 [label="Enter when branch result [6]"]; - subgraph cluster_63 { + subgraph cluster_69 { color=blue 208 [label="Enter block [6]"]; 209 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; @@ -611,10 +676,10 @@ digraph kt44814_kt { 212 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; 213 [label="Enter safe call [6]"]; 214 [label="Postponed enter to lambda [7]"]; - subgraph cluster_64 { + subgraph cluster_70 { color=blue 232 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; - subgraph cluster_65 { + subgraph cluster_71 { color=blue 233 [label="Enter block [8]"]; 234 [label="Access variable R|/it| [9]"]; @@ -632,7 +697,7 @@ digraph kt44814_kt { 220 [label="Exit when branch result [5]"]; 221 [label="Merge postponed lambda exits [6]"]; 222 [label="Enter when branch result [5]"]; - subgraph cluster_66 { + subgraph cluster_72 { color=blue 223 [label="Enter block [5]"]; 224 [label="Const: Null(null) [5]"]; @@ -665,6 +730,17 @@ digraph kt44814_kt { } 231 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; } + subgraph cluster_73 { + color=blue + 166 [label="Enter function [3]" style="filled" fillcolor=red]; + 167 [label="Delegated constructor call: super() [3]" style="filled" fillcolor=yellow]; + 168 [label="Exit function [3]" style="filled" fillcolor=red]; + } + 282 -> {283} [color=green]; + 283 -> {166 169 249} [color=green]; + 283 -> {166 169 249} [style=dashed]; + 166 -> {167}; + 167 -> {168}; 169 -> {170}; 170 -> {171}; 171 -> {172}; @@ -751,69 +827,6 @@ digraph kt44814_kt { 246 -> {247}; 247 -> {248}; 248 -> {192}; - - subgraph cluster_67 { - color=red - 249 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; - subgraph cluster_68 { - color=blue - 250 [label="Enter block [3]"]; - 251 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]" style="filled" fillcolor=yellow]; - 252 [label="Function call: R|kotlin/collections/listOf|(...) [5]" style="filled" fillcolor=yellow]; - 253 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]" style="filled" fillcolor=yellow]; - 254 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]" style="filled" fillcolor=yellow]; - 255 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]" style="filled" fillcolor=yellow]; - 256 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; - 257 [label="Access variable R|/sourceElement| [4]"]; - 258 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]" style="filled" fillcolor=yellow]; - 259 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; - subgraph cluster_69 { - color=blue - 260 [label="Enter when [3]"]; - subgraph cluster_70 { - color=blue - 261 [label="Enter when branch condition [4]"]; - 262 [label="Access variable R|/result| [5]"]; - 263 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; - 264 [label="Exit when branch condition [4]"]; - } - subgraph cluster_71 { - color=blue - 265 [label="Enter when branch condition else [5]"]; - 266 [label="Exit when branch condition [5]"]; - } - 267 [label="Enter when branch result [6]"]; - subgraph cluster_72 { - color=blue - 268 [label="Enter block [6]"]; - 269 [label="Const: String(Fail) [6]"]; - 270 [label="Exit block [6]"]; - } - 271 [label="Exit when branch result [5]"]; - 272 [label="Enter when branch result [5]"]; - subgraph cluster_73 { - color=blue - 273 [label="Enter block [5]"]; - 274 [label="Const: String(OK) [5]"]; - 275 [label="Exit block [5]"]; - } - 276 [label="Exit when branch result [4]"]; - 277 [label="Exit when [3]"]; - } - 278 [label="Jump: ^boxImpl when () { - (R|/result| is R|FirModifierList.FirLightModifierList|) -> { - String(OK) - } - else -> { - String(Fail) - } -} - [3]"]; - 279 [label="Stub [3]" style="filled" fillcolor=gray]; - 280 [label="Exit block [3]" style="filled" fillcolor=gray]; - } - 281 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; - } 249 -> {250}; 250 -> {251}; 251 -> {252}; @@ -849,17 +862,10 @@ digraph kt44814_kt { 280 -> {281} [style=dotted]; subgraph cluster_74 { - color=red - 282 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 283 [label="Exit class Companion [2]" style="filled" fillcolor=red]; - } - 282 -> {283} [color=green]; - - subgraph cluster_75 { color=red 284 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; 285 [label="Part of class initialization [1]"]; - subgraph cluster_76 { + subgraph cluster_75 { color=blue 141 [label="Enter property [2]" style="filled" fillcolor=red]; 142 [label="Function call: R|kotlin/collections/emptyList||>() [2]" style="filled" fillcolor=yellow]; @@ -867,13 +873,23 @@ digraph kt44814_kt { } 286 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; } + subgraph cluster_76 { + color=blue + 138 [label="Enter function [2]" style="filled" fillcolor=red]; + 139 [label="Delegated constructor call: super() [2]" style="filled" fillcolor=yellow]; + 140 [label="Exit function [2]" style="filled" fillcolor=red]; + } 284 -> {285} [color=green]; 285 -> {141} [color=green]; 285 -> {286} [style=dotted]; 285 -> {141} [style=dashed]; + 286 -> {138} [color=green]; + 286 -> {138} [style=dashed]; 141 -> {142}; 142 -> {143}; 143 -> {286} [color=green]; + 138 -> {139}; + 139 -> {140}; subgraph cluster_77 { color=red