From 0cf00d0f725e85bb8f2446b95de2e993a22ffc06 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 13 Apr 2021 12:54:47 +0200 Subject: [PATCH] FIR: fix FirDefaultPropertyAccessor phase to BODY_RESOLVE --- .../resolve/cfg/initBlockAndInPlaceLambda.dot | 105 +- .../cfg/innerClassInAnonymousObject.dot | 23 +- .../resolve/cfg/lambdaAsReturnOfLambda.dot | 77 +- .../cfg/postponedLambdaInConstructor.dot | 37 +- .../resolve/cfg/propertiesAndInitBlocks.dot | 410 ++-- .../testData/resolve/cfg/safeCalls.dot | 92 +- .../problems/secondaryConstructorCfg.dot | 116 +- .../smartcasts/booleans/equalsToBoolean.dot | 609 +++-- .../boundSmartcasts/boundSmartcasts.dot | 195 +- .../boundSmartcastsInBranches.dot | 897 ++++---- .../boundSmartcasts/functionCallBound.dot | 139 +- .../smartcasts/controlStructures/elvis.dot | 247 +- .../smartcasts/lambdas/lambdaInWhenBranch.dot | 235 +- .../resolve/smartcasts/nullability.dot | 1989 ++++++++--------- .../receivers/thisOfExtensionProperty.dot | 103 +- .../smartcasts/safeCalls/assignSafeCall.dot | 510 ++--- .../resolve/smartcasts/smartCastInInit.dot | 37 +- .../resolve/smartcasts/smartcastToNothing.dot | 266 ++- .../smartcasts/stability/overridenOpenVal.dot | 159 +- .../bad/callsInPlace/inAnonymousObject.dot | 76 +- .../bad/callsInPlace/inLocalClass.dot | 92 +- .../inference/plusAssignWithLambdaInRhs.dot | 119 +- .../impl/FirDefaultPropertyAccessor.kt | 6 +- .../codegen/box/smartCasts/kt44814.dot | 1300 +++++------ .../lazyResolve/propertyWithInitializer.txt | 2 +- idea/testData/fir/lazyResolve/elvis/main.txt | 2 +- .../fir/lazyResolve/inSecondary/main.txt | 2 +- 27 files changed, 3738 insertions(+), 4107 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 659c9bc208f..4f1d05ab9ea 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -19,85 +19,78 @@ digraph initBlockAndInPlaceLambda_kt { subgraph cluster_2 { color=red - 4 [label="Enter function getter" style="filled" fillcolor=red]; - 5 [label="Exit function getter" style="filled" fillcolor=red]; + 4 [label="Enter class C" style="filled" fillcolor=red]; + 5 [label="Part of class initialization"]; + 6 [label="Exit class C" style="filled" fillcolor=red]; } - 4 -> {5}; + 4 -> {5} [color=green]; + 5 -> {6} [style=dotted]; + 5 -> {10} [color=green]; + 5 -> {10} [style=dashed]; subgraph cluster_3 { color=red - 6 [label="Enter class C" style="filled" fillcolor=red]; - 7 [label="Part of class initialization"]; - 8 [label="Exit class C" style="filled" fillcolor=red]; + 7 [label="Enter function " style="filled" fillcolor=red]; + 8 [label="Delegated constructor call: super()"]; + 9 [label="Exit function " style="filled" fillcolor=red]; } - 6 -> {7} [color=green]; - 7 -> {8} [style=dotted]; - 7 -> {12} [color=green]; - 7 -> {12} [style=dashed]; + 7 -> {8}; + 8 -> {9}; subgraph cluster_4 { color=red - 9 [label="Enter function " style="filled" fillcolor=red]; - 10 [label="Delegated constructor call: super()"]; - 11 [label="Exit function " style="filled" fillcolor=red]; - } - 9 -> {10}; - 10 -> {11}; - - subgraph cluster_5 { - color=red - 12 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_6 { + 10 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_5 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/a|"]; - 15 [label="Access variable R|/A.b|"]; - 16 [label="Enter safe call"]; - 17 [label="Postponed enter to lambda"]; - subgraph cluster_7 { + 11 [label="Enter block"]; + 12 [label="Access variable R|/a|"]; + 13 [label="Access variable R|/A.b|"]; + 14 [label="Enter safe call"]; + 15 [label="Postponed enter to lambda"]; + subgraph cluster_6 { color=blue - 25 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_8 { + 23 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_7 { color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/a|"]; - 28 [label="Access variable R|/it|"]; - 29 [label="Function call: R|/C.C|(...)"]; - 30 [label="Exit block"]; + 24 [label="Enter block"]; + 25 [label="Access variable R|/a|"]; + 26 [label="Access variable R|/it|"]; + 27 [label="Function call: R|/C.C|(...)"]; + 28 [label="Exit block"]; } - 31 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 29 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 18 [label="Call arguments union" style="filled" fillcolor=yellow]; - 19 [label="Postponed exit from lambda"]; - 20 [label="Function call: $subj$.R|kotlin/let|(...)"]; - 21 [label="Exit safe call"]; - 22 [label="Variable declaration: lval c: R|C?|"]; - 23 [label="Exit block"]; + 16 [label="Call arguments union" style="filled" fillcolor=yellow]; + 17 [label="Postponed exit from lambda"]; + 18 [label="Function call: $subj$.R|kotlin/let|(...)"]; + 19 [label="Exit safe call"]; + 20 [label="Variable declaration: lval c: R|C?|"]; + 21 [label="Exit block"]; } - 24 [label="Exit init block" style="filled" fillcolor=red]; + 22 [label="Exit init block" style="filled" fillcolor=red]; } + 10 -> {11}; + 11 -> {12}; 12 -> {13}; - 13 -> {14}; + 13 -> {14 19}; 14 -> {15}; - 15 -> {16 21}; - 16 -> {17}; - 17 -> {25}; - 17 -> {19} [color=red]; - 17 -> {25} [style=dashed]; - 18 -> {20} [color=red]; - 19 -> {20} [color=green]; + 15 -> {23}; + 15 -> {17} [color=red]; + 15 -> {23} [style=dashed]; + 16 -> {18} [color=red]; + 17 -> {18} [color=green]; + 18 -> {19}; + 19 -> {20}; 20 -> {21}; 21 -> {22}; - 22 -> {23}; + 22 -> {6} [color=green]; 23 -> {24}; - 24 -> {8} [color=green]; + 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; - 29 -> {30}; - 30 -> {31}; - 31 -> {18} [color=red]; - 31 -> {19} [color=green]; + 29 -> {16} [color=red]; + 29 -> {17} [color=green]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot index 1b7bac4a57c..813fe0683f2 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/innerClassInAnonymousObject.dot @@ -44,27 +44,20 @@ digraph innerClassInAnonymousObject_kt { subgraph cluster_5 { color=red - 14 [label="Enter function getter" style="filled" fillcolor=red]; - 15 [label="Exit function getter" style="filled" fillcolor=red]; + 14 [label="Enter property" style="filled" fillcolor=red]; + 15 [label="Exit anonymous object"]; + 16 [label="Exit property" style="filled" fillcolor=red]; } - 14 -> {15}; - subgraph cluster_6 { - color=red - 16 [label="Enter property" style="filled" fillcolor=red]; - 17 [label="Exit anonymous object"]; - 18 [label="Exit property" style="filled" fillcolor=red]; - } - subgraph cluster_7 { color=blue 12 [label="Enter class " style="filled" fillcolor=red]; 13 [label="Exit class " style="filled" fillcolor=red]; } - 16 -> {17}; - 16 -> {0 5 8} [color=red]; - 17 -> {18}; - 17 -> {0 12} [color=green]; - 17 -> {0 12} [style=dashed]; + 14 -> {15}; + 14 -> {0 5 8} [color=red]; + 15 -> {16}; + 15 -> {0 12} [color=green]; + 15 -> {0 12} [style=dashed]; 12 -> {13} [color=green]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaAsReturnOfLambda.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaAsReturnOfLambda.dot index 1b8dfc5e88d..897effc23da 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaAsReturnOfLambda.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/lambdaAsReturnOfLambda.dot @@ -5,26 +5,19 @@ digraph lambdaAsReturnOfLambda_kt { subgraph cluster_0 { color=red - 14 [label="Enter function getter" style="filled" fillcolor=red]; - 15 [label="Exit function getter" style="filled" fillcolor=red]; - } - 14 -> {15}; - - subgraph cluster_1 { - color=red - 16 [label="Enter property" style="filled" fillcolor=red]; - 17 [label="Postponed enter to lambda"]; - subgraph cluster_2 { + 14 [label="Enter property" style="filled" fillcolor=red]; + 15 [label="Postponed enter to lambda"]; + subgraph cluster_1 { color=blue 0 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_3 { + subgraph cluster_2 { color=blue 1 [label="Enter block"]; 2 [label="Postponed enter to lambda"]; - subgraph cluster_4 { + subgraph cluster_3 { color=blue 8 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_5 { + subgraph cluster_4 { color=blue 9 [label="Enter block"]; 10 [label="Access variable R|/foo|"]; @@ -43,15 +36,15 @@ digraph lambdaAsReturnOfLambda_kt { } 7 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 18 [label="Postponed exit from lambda"]; - 19 [label="Function call: R|/run| kotlin/Unit|>(...)"]; - 20 [label="Exit property" style="filled" fillcolor=red]; + 16 [label="Postponed exit from lambda"]; + 17 [label="Function call: R|/run| kotlin/Unit|>(...)"]; + 18 [label="Exit property" style="filled" fillcolor=red]; } + 14 -> {15}; + 15 -> {16 0}; + 15 -> {0} [style=dashed]; 16 -> {17}; - 17 -> {18 0}; - 17 -> {0} [style=dashed]; - 18 -> {19}; - 19 -> {20}; + 17 -> {18}; 0 -> {1}; 1 -> {2}; 2 -> {3 8}; @@ -67,39 +60,39 @@ digraph lambdaAsReturnOfLambda_kt { 11 -> {12}; 12 -> {13}; - subgraph cluster_6 { + subgraph cluster_5 { color=red - 21 [label="Enter function bar" style="filled" fillcolor=red]; - subgraph cluster_7 { + 19 [label="Enter function bar" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 22 [label="Enter block"]; - 23 [label="Exit block"]; + 20 [label="Enter block"]; + 21 [label="Exit block"]; } - 24 [label="Exit function bar" style="filled" fillcolor=red]; + 22 [label="Exit function bar" style="filled" fillcolor=red]; } + 19 -> {20}; + 20 -> {21}; 21 -> {22}; - 22 -> {23}; - 23 -> {24}; - subgraph cluster_8 { + subgraph cluster_7 { color=red - 25 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_9 { + 23 [label="Enter function run" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 26 [label="Enter block"]; - 27 [label="Function call: R|/block|.R|SubstitutionOverride|()"]; - 28 [label="Jump: ^run R|/block|.R|SubstitutionOverride|()"]; - 29 [label="Stub" style="filled" fillcolor=gray]; - 30 [label="Exit block" style="filled" fillcolor=gray]; + 24 [label="Enter block"]; + 25 [label="Function call: R|/block|.R|SubstitutionOverride|()"]; + 26 [label="Jump: ^run R|/block|.R|SubstitutionOverride|()"]; + 27 [label="Stub" style="filled" fillcolor=gray]; + 28 [label="Exit block" style="filled" fillcolor=gray]; } - 31 [label="Exit function run" style="filled" fillcolor=red]; + 29 [label="Exit function run" style="filled" fillcolor=red]; } + 23 -> {24}; + 24 -> {25}; 25 -> {26}; - 26 -> {27}; - 27 -> {28}; - 28 -> {31}; + 26 -> {29}; + 26 -> {27} [style=dotted]; + 27 -> {28} [style=dotted]; 28 -> {29} [style=dotted]; - 29 -> {30} [style=dotted]; - 30 -> {31} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot index 3f311763aa0..b298bc9a378 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/postponedLambdaInConstructor.dot @@ -27,8 +27,8 @@ digraph postponedLambdaInConstructor_kt { } 5 -> {6} [color=green]; 6 -> {7} [style=dotted]; - 6 -> {29} [color=green]; - 6 -> {29} [style=dashed]; + 6 -> {27} [color=green]; + 6 -> {27} [style=dashed]; subgraph cluster_3 { color=red @@ -88,35 +88,28 @@ digraph postponedLambdaInConstructor_kt { subgraph cluster_8 { color=red - 27 [label="Enter function getter" style="filled" fillcolor=red]; - 28 [label="Exit function getter" style="filled" fillcolor=red]; + 27 [label="Enter property" style="filled" fillcolor=red]; + 28 [label="Access variable R|/s|"]; + 29 [label="Exit property" style="filled" fillcolor=red]; } 27 -> {28}; + 28 -> {29}; + 29 -> {7} [color=green]; subgraph cluster_9 { color=red - 29 [label="Enter property" style="filled" fillcolor=red]; - 30 [label="Access variable R|/s|"]; - 31 [label="Exit property" style="filled" fillcolor=red]; - } - 29 -> {30}; - 30 -> {31}; - 31 -> {7} [color=green]; - - subgraph cluster_10 { - color=red - 32 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_11 { + 30 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_10 { color=blue - 33 [label="Enter block"]; - 34 [label="Function call: this@R|/B|.R|/B.foo|()"]; - 35 [label="Exit block"]; + 31 [label="Enter block"]; + 32 [label="Function call: this@R|/B|.R|/B.foo|()"]; + 33 [label="Exit block"]; } - 36 [label="Exit function foo" style="filled" fillcolor=red]; + 34 [label="Exit function foo" style="filled" fillcolor=red]; } + 30 -> {31}; + 31 -> {32}; 32 -> {33}; 33 -> {34}; - 34 -> {35}; - 35 -> {36}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot index 3fdae526eb5..7b3e56fb7eb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -21,312 +21,298 @@ digraph propertiesAndInitBlocks_kt { subgraph cluster_2 { color=red - 5 [label="Enter function getter" style="filled" fillcolor=red]; - 6 [label="Exit function getter" style="filled" fillcolor=red]; + 5 [label="Enter property" style="filled" fillcolor=red]; + 6 [label="Const: Int(1)"]; + 7 [label="Exit property" style="filled" fillcolor=red]; } 5 -> {6}; + 6 -> {7}; subgraph cluster_3 { color=red - 7 [label="Enter property" style="filled" fillcolor=red]; - 8 [label="Const: Int(1)"]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 8 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_4 { + color=blue + 9 [label="Enter block"]; + 10 [label="Const: Int(1)"]; + 11 [label="Jump: ^ Int(1)"]; + 12 [label="Stub" style="filled" fillcolor=gray]; + 13 [label="Exit block" style="filled" fillcolor=gray]; + } + 14 [label="Exit function getter" style="filled" fillcolor=red]; } - 7 -> {8}; 8 -> {9}; - - subgraph cluster_4 { - color=red - 10 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_5 { - color=blue - 11 [label="Enter block"]; - 12 [label="Const: Int(1)"]; - 13 [label="Jump: ^ Int(1)"]; - 14 [label="Stub" style="filled" fillcolor=gray]; - 15 [label="Exit block" style="filled" fillcolor=gray]; - } - 16 [label="Exit function getter" style="filled" fillcolor=red]; - } + 9 -> {10}; 10 -> {11}; - 11 -> {12}; - 12 -> {13}; - 13 -> {16}; + 11 -> {14}; + 11 -> {12} [style=dotted]; + 12 -> {13} [style=dotted]; 13 -> {14} [style=dotted]; - 14 -> {15} [style=dotted]; - 15 -> {16} [style=dotted]; - subgraph cluster_6 { + subgraph cluster_5 { color=red - 17 [label="Enter function setter" style="filled" fillcolor=red]; - subgraph cluster_7 { + 15 [label="Enter function setter" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 18 [label="Enter block"]; - 19 [label="Const: Int(1)"]; - 20 [label="Assignment: F|/x2|"]; - 21 [label="Exit block"]; + 16 [label="Enter block"]; + 17 [label="Const: Int(1)"]; + 18 [label="Assignment: F|/x2|"]; + 19 [label="Exit block"]; } - 22 [label="Exit function setter" style="filled" fillcolor=red]; + 20 [label="Exit function setter" style="filled" fillcolor=red]; } + 15 -> {16}; + 16 -> {17}; 17 -> {18}; 18 -> {19}; 19 -> {20}; - 20 -> {21}; + + subgraph cluster_7 { + color=red + 21 [label="Enter property" style="filled" fillcolor=red]; + 22 [label="Const: Int(1)"]; + 23 [label="Exit property" style="filled" fillcolor=red]; + } 21 -> {22}; + 22 -> {23}; subgraph cluster_8 { color=red - 23 [label="Enter property" style="filled" fillcolor=red]; - 24 [label="Const: Int(1)"]; - 25 [label="Exit property" style="filled" fillcolor=red]; - } - 23 -> {24}; - 24 -> {25}; - - subgraph cluster_9 { - color=red - 37 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_10 { + 35 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_9 { color=blue - 38 [label="Enter block"]; - 39 [label="Const: Int(1)"]; - 40 [label="Const: Int(1)"]; - 41 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"]; - 42 [label="Variable declaration: lval c: R|kotlin/Int|"]; - 43 [label="Function call: R|java/lang/Exception.Exception|()"]; - 44 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 45 [label="Stub" style="filled" fillcolor=gray]; - 46 [label="Exit block" style="filled" fillcolor=gray]; + 36 [label="Enter block"]; + 37 [label="Const: Int(1)"]; + 38 [label="Const: Int(1)"]; + 39 [label="Function call: Int(1).R|kotlin/Int.plus|(...)"]; + 40 [label="Variable declaration: lval c: R|kotlin/Int|"]; + 41 [label="Function call: R|java/lang/Exception.Exception|()"]; + 42 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 43 [label="Stub" style="filled" fillcolor=gray]; + 44 [label="Exit block" style="filled" fillcolor=gray]; } - 47 [label="Exit function foo" style="filled" fillcolor=red]; + 45 [label="Exit function foo" style="filled" fillcolor=red]; } + 35 -> {36}; + 36 -> {37}; 37 -> {38}; 38 -> {39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; - 43 -> {44}; - 44 -> {47} [label=onUncaughtException]; + 42 -> {45} [label=onUncaughtException]; + 42 -> {43} [style=dotted]; + 43 -> {44} [style=dotted]; 44 -> {45} [style=dotted]; - 45 -> {46} [style=dotted]; - 46 -> {47} [style=dotted]; + + subgraph cluster_10 { + color=red + 46 [label="Enter function " style="filled" fillcolor=red]; + 47 [label="Delegated constructor call: super()"]; + 48 [label="Exit function " style="filled" fillcolor=red]; + } + 46 -> {47}; + 47 -> {48}; subgraph cluster_11 { color=red - 48 [label="Enter function " style="filled" fillcolor=red]; - 49 [label="Delegated constructor call: super()"]; - 50 [label="Exit function " style="filled" fillcolor=red]; - } - 48 -> {49}; - 49 -> {50}; - - subgraph cluster_12 { - color=red - 51 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_13 { + 49 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_12 { color=blue - 52 [label="Enter block"]; - 53 [label="Function call: R|java/lang/Exception.Exception|()"]; - 54 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 55 [label="Stub" style="filled" fillcolor=gray]; - 56 [label="Const: Int(1)" style="filled" fillcolor=gray]; - 57 [label="Exit block" style="filled" fillcolor=gray]; + 50 [label="Enter block"]; + 51 [label="Function call: R|java/lang/Exception.Exception|()"]; + 52 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 53 [label="Stub" style="filled" fillcolor=gray]; + 54 [label="Const: Int(1)" style="filled" fillcolor=gray]; + 55 [label="Exit block" style="filled" fillcolor=gray]; } - 58 [label="Exit init block" style="filled" fillcolor=red]; + 56 [label="Exit init block" style="filled" fillcolor=red]; } + 49 -> {50}; + 50 -> {51}; 51 -> {52}; - 52 -> {53}; - 53 -> {54}; - 54 -> {58} [label=onUncaughtException]; + 52 -> {56} [label=onUncaughtException]; + 52 -> {53} [style=dotted]; + 53 -> {54} [style=dotted]; 54 -> {55} [style=dotted]; 55 -> {56} [style=dotted]; - 56 -> {57} [style=dotted]; - 57 -> {58} [style=dotted]; - 58 -> {36} [color=green]; + 56 -> {34} [color=green]; - subgraph cluster_14 { + subgraph cluster_13 { color=red - 59 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_15 { + 57 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_14 { color=blue - 60 [label="Enter block"]; - 61 [label="Exit local class "]; - 62 [label="Exit block"]; + 58 [label="Enter block"]; + 59 [label="Exit local class "]; + 60 [label="Exit block"]; } - 63 [label="Exit function getter" style="filled" fillcolor=red]; + 61 [label="Exit function getter" style="filled" fillcolor=red]; } - subgraph cluster_16 { + subgraph cluster_15 { color=blue - 64 [label="Enter class GetterLocalClass" style="filled" fillcolor=red]; - 65 [label="Part of class initialization"]; - 66 [label="Exit class GetterLocalClass" style="filled" fillcolor=red]; + 62 [label="Enter class GetterLocalClass" style="filled" fillcolor=red]; + 63 [label="Part of class initialization"]; + 64 [label="Exit class GetterLocalClass" style="filled" fillcolor=red]; } + 57 -> {58}; + 58 -> {59}; + 58 -> {65 68} [color=red]; 59 -> {60}; + 59 -> {65 62} [color=green]; + 59 -> {65 62} [style=dashed]; 60 -> {61}; - 60 -> {67 70} [color=red]; - 61 -> {62}; - 61 -> {67 64} [color=green]; - 61 -> {67 64} [style=dashed]; - 62 -> {63}; - 64 -> {65} [color=green]; - 65 -> {66} [style=dotted]; - 65 -> {70} [color=green]; - 65 -> {70} [style=dashed]; + 62 -> {63} [color=green]; + 63 -> {64} [style=dotted]; + 63 -> {68} [color=green]; + 63 -> {68} [style=dashed]; + + subgraph cluster_16 { + color=red + 65 [label="Enter function " style="filled" fillcolor=red]; + 66 [label="Delegated constructor call: super()"]; + 67 [label="Exit function " style="filled" fillcolor=red]; + } + 65 -> {66}; + 66 -> {67}; subgraph cluster_17 { color=red - 67 [label="Enter function " style="filled" fillcolor=red]; - 68 [label="Delegated constructor call: super()"]; - 69 [label="Exit function " style="filled" fillcolor=red]; - } - 67 -> {68}; - 68 -> {69}; - - subgraph cluster_18 { - color=red - 70 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_19 { + 68 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_18 { color=blue - 71 [label="Enter block"]; - 72 [label="Function call: R|java/lang/Exception.Exception|()"]; - 73 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 74 [label="Stub" style="filled" fillcolor=gray]; - 75 [label="Exit block" style="filled" fillcolor=gray]; + 69 [label="Enter block"]; + 70 [label="Function call: R|java/lang/Exception.Exception|()"]; + 71 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 72 [label="Stub" style="filled" fillcolor=gray]; + 73 [label="Exit block" style="filled" fillcolor=gray]; } - 76 [label="Exit init block" style="filled" fillcolor=red]; + 74 [label="Exit init block" style="filled" fillcolor=red]; } + 68 -> {69}; + 69 -> {70}; 70 -> {71}; - 71 -> {72}; - 72 -> {73}; - 73 -> {76} [label=onUncaughtException]; + 71 -> {74} [label=onUncaughtException]; + 71 -> {72} [style=dotted]; + 72 -> {73} [style=dotted]; 73 -> {74} [style=dotted]; - 74 -> {75} [style=dotted]; - 75 -> {76} [style=dotted]; - 76 -> {66} [color=green]; + 74 -> {64} [color=green]; - subgraph cluster_20 { + subgraph cluster_19 { color=red - 77 [label="Enter property" style="filled" fillcolor=red]; - 78 [label="Postponed enter to lambda"]; - subgraph cluster_21 { + 75 [label="Enter property" style="filled" fillcolor=red]; + 76 [label="Postponed enter to lambda"]; + subgraph cluster_20 { color=blue - 26 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 24 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_21 { + color=blue + 25 [label="Enter block"]; + 26 [label="Exit local class "]; + 27 [label="Function call: R|java/lang/Exception.Exception|()"]; + 28 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 29 [label="Stub" style="filled" fillcolor=gray]; + 30 [label="Exit block" style="filled" fillcolor=gray]; + } subgraph cluster_22 { color=blue - 27 [label="Enter block"]; - 28 [label="Exit local class "]; - 29 [label="Function call: R|java/lang/Exception.Exception|()"]; - 30 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 31 [label="Stub" style="filled" fillcolor=gray]; - 32 [label="Exit block" style="filled" fillcolor=gray]; + 32 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; + 33 [label="Part of class initialization"]; + 34 [label="Exit class InitializerLocalClass" style="filled" fillcolor=red]; } - subgraph cluster_23 { - color=blue - 34 [label="Enter class InitializerLocalClass" style="filled" fillcolor=red]; - 35 [label="Part of class initialization"]; - 36 [label="Exit class InitializerLocalClass" style="filled" fillcolor=red]; - } - 33 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 31 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 79 [label="Postponed exit from lambda"]; - 80 [label="Function call: R|/run|(...)"]; - 81 [label="Exit property" style="filled" fillcolor=red]; + 77 [label="Postponed exit from lambda"]; + 78 [label="Function call: R|/run|(...)"]; + 79 [label="Exit property" style="filled" fillcolor=red]; } + 75 -> {76}; + 76 -> {24}; + 76 -> {77} [color=red]; + 76 -> {24} [style=dashed]; 77 -> {78}; - 78 -> {26}; - 78 -> {79} [color=red]; - 78 -> {26} [style=dashed]; - 79 -> {80}; - 80 -> {81}; - 26 -> {33 27}; + 78 -> {79}; + 24 -> {31 25}; + 25 -> {26}; + 25 -> {35 46 49} [color=red]; + 26 -> {27}; + 26 -> {46 32} [color=green]; + 26 -> {46 32} [style=dashed]; 27 -> {28}; - 27 -> {37 48 51} [color=red]; - 28 -> {29}; - 28 -> {48 34} [color=green]; - 28 -> {48 34} [style=dashed]; - 29 -> {30}; - 30 -> {81} [label=onUncaughtException]; + 28 -> {79} [label=onUncaughtException]; + 28 -> {29} [style=dotted]; + 29 -> {30} [style=dotted]; 30 -> {31} [style=dotted]; - 31 -> {32} [style=dotted]; - 32 -> {33} [style=dotted]; - 33 -> {79} [color=green]; - 33 -> {26} [color=green style=dashed]; - 34 -> {35} [color=green]; - 35 -> {36} [style=dotted]; - 35 -> {51} [color=green]; - 35 -> {51} [style=dashed]; + 31 -> {77} [color=green]; + 31 -> {24} [color=green style=dashed]; + 32 -> {33} [color=green]; + 33 -> {34} [style=dotted]; + 33 -> {49} [color=green]; + 33 -> {49} [style=dashed]; - subgraph cluster_24 { + subgraph cluster_23 { color=red - 82 [label="Enter function getter" style="filled" fillcolor=red]; - 83 [label="Exit function getter" style="filled" fillcolor=red]; - } - 82 -> {83}; - - subgraph cluster_25 { - color=red - 84 [label="Enter property" style="filled" fillcolor=red]; - subgraph cluster_26 { + 80 [label="Enter property" style="filled" fillcolor=red]; + subgraph cluster_24 { color=blue - 85 [label="Try expression enter"]; + 81 [label="Try expression enter"]; + subgraph cluster_25 { + color=blue + 82 [label="Try main block enter"]; + subgraph cluster_26 { + color=blue + 83 [label="Enter block"]; + 84 [label="Const: Int(1)"]; + 85 [label="Exit block"]; + } + 86 [label="Try main block exit"]; + } subgraph cluster_27 { color=blue - 86 [label="Try main block enter"]; + 87 [label="Catch enter"]; subgraph cluster_28 { color=blue - 87 [label="Enter block"]; - 88 [label="Const: Int(1)"]; - 89 [label="Exit block"]; + 88 [label="Enter block"]; + 89 [label="Const: Int(2)"]; + 90 [label="Exit block"]; } - 90 [label="Try main block exit"]; + 91 [label="Catch exit"]; } subgraph cluster_29 { color=blue - 91 [label="Catch enter"]; + 92 [label="Enter finally"]; subgraph cluster_30 { color=blue - 92 [label="Enter block"]; - 93 [label="Const: Int(2)"]; - 94 [label="Exit block"]; + 93 [label="Enter block"]; + 94 [label="Const: Int(0)"]; + 95 [label="Exit block"]; } - 95 [label="Catch exit"]; + 96 [label="Exit finally"]; } - subgraph cluster_31 { - color=blue - 96 [label="Enter finally"]; - subgraph cluster_32 { - color=blue - 97 [label="Enter block"]; - 98 [label="Const: Int(0)"]; - 99 [label="Exit block"]; - } - 100 [label="Exit finally"]; - } - 101 [label="Try expression exit"]; + 97 [label="Try expression exit"]; } - 102 [label="Exit property" style="filled" fillcolor=red]; + 98 [label="Exit property" style="filled" fillcolor=red]; } + 80 -> {81}; + 81 -> {82 87}; + 81 -> {92} [label=onUncaughtException]; + 82 -> {83}; + 83 -> {84}; 84 -> {85}; - 85 -> {86 91}; - 85 -> {96} [label=onUncaughtException]; - 86 -> {87}; + 85 -> {86}; + 86 -> {92 87}; 87 -> {88}; + 87 -> {92} [label=onUncaughtException]; 88 -> {89}; 89 -> {90}; - 90 -> {96 91}; + 90 -> {91}; 91 -> {92}; - 91 -> {96} [label=onUncaughtException]; 92 -> {93}; 93 -> {94}; 94 -> {95}; 95 -> {96}; 96 -> {97}; + 96 -> {98} [label=onUncaughtException]; 97 -> {98}; - 98 -> {99}; - 99 -> {100}; - 100 -> {101}; - 100 -> {102} [label=onUncaughtException]; - 101 -> {102}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot index 42d5e4b48bb..a23204e4a74 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/safeCalls.dot @@ -33,72 +33,58 @@ digraph safeCalls_kt { subgraph cluster_4 { color=red - 8 [label="Enter function getter" style="filled" fillcolor=red]; - 9 [label="Exit function getter" style="filled" fillcolor=red]; + 8 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_5 { + color=blue + 9 [label="Enter block"]; + 10 [label="Access variable R|/x|"]; + 11 [label="Enter safe call"]; + 12 [label="Function call: $subj$.R|/A.foo|()"]; + 13 [label="Exit safe call"]; + 14 [label="Enter safe call"]; + 15 [label="Function call: $subj$.R|/A.bar|()"]; + 16 [label="Exit safe call"]; + 17 [label="Exit block"]; + } + 18 [label="Exit function test_1" style="filled" fillcolor=red]; } 8 -> {9}; - - subgraph cluster_5 { - color=red - 10 [label="Enter function getter" style="filled" fillcolor=red]; - 11 [label="Exit function getter" style="filled" fillcolor=red]; - } - 10 -> {11}; + 9 -> {10}; + 10 -> {11 13}; + 11 -> {12}; + 12 -> {13}; + 13 -> {14 16}; + 14 -> {15}; + 15 -> {16}; + 16 -> {17}; + 17 -> {18}; subgraph cluster_6 { color=red - 12 [label="Enter function test_1" style="filled" fillcolor=red]; + 19 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 13 [label="Enter block"]; - 14 [label="Access variable R|/x|"]; - 15 [label="Enter safe call"]; - 16 [label="Function call: $subj$.R|/A.foo|()"]; - 17 [label="Exit safe call"]; - 18 [label="Enter safe call"]; - 19 [label="Function call: $subj$.R|/A.bar|()"]; - 20 [label="Exit safe call"]; - 21 [label="Exit block"]; + 20 [label="Enter block"]; + 21 [label="Access variable R|/x|"]; + 22 [label="Enter safe call"]; + 23 [label="Access variable R|/B.foo|"]; + 24 [label="Exit safe call"]; + 25 [label="Enter safe call"]; + 26 [label="Access variable R|/B.bar|"]; + 27 [label="Exit safe call"]; + 28 [label="Exit block"]; } - 22 [label="Exit function test_1" style="filled" fillcolor=red]; + 29 [label="Exit function test_2" style="filled" fillcolor=red]; } - 12 -> {13}; - 13 -> {14}; - 14 -> {15 17}; - 15 -> {16}; - 16 -> {17}; - 17 -> {18 20}; - 18 -> {19}; 19 -> {20}; 20 -> {21}; - 21 -> {22}; - - subgraph cluster_8 { - color=red - 23 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/x|"]; - 26 [label="Enter safe call"]; - 27 [label="Access variable R|/B.foo|"]; - 28 [label="Exit safe call"]; - 29 [label="Enter safe call"]; - 30 [label="Access variable R|/B.bar|"]; - 31 [label="Exit safe call"]; - 32 [label="Exit block"]; - } - 33 [label="Exit function test_2" style="filled" fillcolor=red]; - } + 21 -> {22 24}; + 22 -> {23}; 23 -> {24}; - 24 -> {25}; - 25 -> {26 28}; + 24 -> {25 27}; + 25 -> {26}; 26 -> {27}; 27 -> {28}; - 28 -> {29 31}; - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; + 28 -> {29}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot index c2b5f69e652..ed08b1129a1 100644 --- a/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot +++ b/compiler/fir/analysis-tests/testData/resolve/problems/secondaryConstructorCfg.dot @@ -13,14 +13,14 @@ digraph secondaryConstructorCfg_kt { } 0 -> {1} [color=green]; 1 -> {2} [style=dotted]; - 1 -> {10} [color=green]; - 1 -> {10} [style=dashed]; + 1 -> {8} [color=green]; + 1 -> {8} [style=dashed]; 2 -> {3} [style=dotted]; - 2 -> {15} [color=green]; - 2 -> {15} [style=dashed]; + 2 -> {11} [color=green]; + 2 -> {11} [style=dashed]; 3 -> {4} [style=dotted]; - 3 -> {31} [color=green]; - 3 -> {31} [style=dashed]; + 3 -> {23} [color=green]; + 3 -> {23} [style=dashed]; subgraph cluster_1 { color=red @@ -33,67 +33,62 @@ digraph secondaryConstructorCfg_kt { subgraph cluster_2 { color=red - 8 [label="Enter function getter" style="filled" fillcolor=red]; - 9 [label="Exit function getter" style="filled" fillcolor=red]; + 8 [label="Enter property" style="filled" fillcolor=red]; + 9 [label="Access variable R|/p0|"]; + 10 [label="Exit property" style="filled" fillcolor=red]; } 8 -> {9}; + 9 -> {10}; + 10 -> {2} [color=green]; subgraph cluster_3 { color=red - 10 [label="Enter property" style="filled" fillcolor=red]; - 11 [label="Access variable R|/p0|"]; - 12 [label="Exit property" style="filled" fillcolor=red]; + 11 [label="Enter property" style="filled" fillcolor=red]; + 12 [label="Access variable R|/p0|"]; + 13 [label="Access variable R|kotlin/String.length|"]; + 14 [label="Exit property" style="filled" fillcolor=red]; } - 10 -> {11}; 11 -> {12}; - 12 -> {2} [color=green]; + 12 -> {13}; + 13 -> {14}; + 14 -> {3} [color=green]; subgraph cluster_4 { color=red - 13 [label="Enter function getter" style="filled" fillcolor=red]; - 14 [label="Exit function getter" style="filled" fillcolor=red]; - } - 13 -> {14}; - - subgraph cluster_5 { - color=red - 15 [label="Enter property" style="filled" fillcolor=red]; + 15 [label="Enter function " style="filled" fillcolor=red]; 16 [label="Access variable R|/p0|"]; - 17 [label="Access variable R|kotlin/String.length|"]; - 18 [label="Exit property" style="filled" fillcolor=red]; + 17 [label="Delegated constructor call: this(...)"]; + subgraph cluster_5 { + color=blue + 18 [label="Enter block"]; + 19 [label="Access variable R|/p1|"]; + 20 [label="Assignment: R|/B.p3|"]; + 21 [label="Exit block"]; + } + 22 [label="Exit function " style="filled" fillcolor=red]; } 15 -> {16}; 16 -> {17}; 17 -> {18}; - 18 -> {3} [color=green]; + 18 -> {19}; + 19 -> {20}; + 20 -> {21}; + 21 -> {22}; subgraph cluster_6 { color=red - 19 [label="Enter function getter" style="filled" fillcolor=red]; - 20 [label="Exit function getter" style="filled" fillcolor=red]; - } - 19 -> {20}; - - subgraph cluster_7 { - color=red - 21 [label="Enter function setter" style="filled" fillcolor=red]; - 22 [label="Exit function setter" style="filled" fillcolor=red]; - } - 21 -> {22}; - - subgraph cluster_8 { - color=red - 23 [label="Enter function " style="filled" fillcolor=red]; - 24 [label="Access variable R|/p0|"]; - 25 [label="Delegated constructor call: this(...)"]; - subgraph cluster_9 { + 23 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_7 { color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/p1|"]; - 28 [label="Assignment: R|/B.p3|"]; - 29 [label="Exit block"]; + 24 [label="Enter block"]; + 25 [label="Access variable R|/p0|"]; + 26 [label="Access variable R|kotlin/String.length|"]; + 27 [label="Assignment: R|/B.p1|"]; + 28 [label="Const: String()"]; + 29 [label="Assignment: R|/B.p3|"]; + 30 [label="Exit block"]; } - 30 [label="Exit function " style="filled" fillcolor=red]; + 31 [label="Exit init block" style="filled" fillcolor=red]; } 23 -> {24}; 24 -> {25}; @@ -102,30 +97,7 @@ digraph secondaryConstructorCfg_kt { 27 -> {28}; 28 -> {29}; 29 -> {30}; - - subgraph cluster_10 { - color=red - 31 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_11 { - color=blue - 32 [label="Enter block"]; - 33 [label="Access variable R|/p0|"]; - 34 [label="Access variable R|kotlin/String.length|"]; - 35 [label="Assignment: R|/B.p1|"]; - 36 [label="Const: String()"]; - 37 [label="Assignment: R|/B.p3|"]; - 38 [label="Exit block"]; - } - 39 [label="Exit init block" style="filled" fillcolor=red]; - } - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; - 35 -> {36}; - 36 -> {37}; - 37 -> {38}; - 38 -> {39}; - 39 -> {4} [color=green]; + 30 -> {31}; + 31 -> {4} [color=green]; } 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 499744ca0ce..bf4effb52bb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/booleans/equalsToBoolean.dot @@ -19,59 +19,54 @@ digraph equalsToBoolean_kt { subgraph cluster_2 { color=red - 4 [label="Enter function getter" style="filled" fillcolor=red]; - 5 [label="Exit function getter" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { - color=red - 6 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_4 { + 4 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_3 { color=blue - 7 [label="Enter block"]; - subgraph cluster_5 { + 5 [label="Enter block"]; + subgraph cluster_4 { color=blue - 8 [label="Enter when"]; - subgraph cluster_6 { + 6 [label="Enter when"]; + subgraph cluster_5 { color=blue - 9 [label="Enter when branch condition "]; - 10 [label="Access variable R|/b|"]; + 7 [label="Enter when branch condition "]; + 8 [label="Access variable R|/b|"]; + 9 [label="Const: Boolean(true)"]; + 10 [label="Equality operator =="]; 11 [label="Const: Boolean(true)"]; 12 [label="Equality operator =="]; - 13 [label="Const: Boolean(true)"]; - 14 [label="Equality operator =="]; + 13 [label="Exit when branch condition"]; + } + subgraph cluster_6 { + color=blue + 14 [label="Enter when branch condition else"]; 15 [label="Exit when branch condition"]; } + 16 [label="Enter when branch result"]; subgraph cluster_7 { color=blue - 16 [label="Enter when branch condition else"]; - 17 [label="Exit when branch condition"]; + 17 [label="Enter block"]; + 18 [label="Access variable R|/b|"]; + 19 [label="Function call: R|/b|.#()"]; + 20 [label="Exit block"]; } - 18 [label="Enter when branch result"]; + 21 [label="Exit when branch result"]; + 22 [label="Enter when branch result"]; subgraph cluster_8 { color=blue - 19 [label="Enter block"]; - 20 [label="Access variable R|/b|"]; - 21 [label="Function call: R|/b|.#()"]; - 22 [label="Exit block"]; + 23 [label="Enter block"]; + 24 [label="Access variable R|/b|"]; + 25 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 26 [label="Exit block"]; } - 23 [label="Exit when branch result"]; - 24 [label="Enter when branch result"]; - subgraph cluster_9 { - color=blue - 25 [label="Enter block"]; - 26 [label="Access variable R|/b|"]; - 27 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 28 [label="Exit block"]; - } - 29 [label="Exit when branch result"]; - 30 [label="Exit when"]; + 27 [label="Exit when branch result"]; + 28 [label="Exit when"]; } - 31 [label="Exit block"]; + 29 [label="Exit block"]; } - 32 [label="Exit function test_1" style="filled" fillcolor=red]; + 30 [label="Exit function test_1" style="filled" fillcolor=red]; } + 4 -> {5}; + 5 -> {6}; 6 -> {7}; 7 -> {8}; 8 -> {9}; @@ -79,74 +74,74 @@ digraph equalsToBoolean_kt { 10 -> {11}; 11 -> {12}; 12 -> {13}; - 13 -> {14}; + 13 -> {22 14}; 14 -> {15}; - 15 -> {24 16}; + 15 -> {16}; 16 -> {17}; 17 -> {18}; 18 -> {19}; 19 -> {20}; 20 -> {21}; - 21 -> {22}; + 21 -> {28}; 22 -> {23}; - 23 -> {30}; + 23 -> {24}; 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - subgraph cluster_10 { + subgraph cluster_9 { color=red - 33 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_11 { + 31 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_10 { color=blue - 34 [label="Enter block"]; - subgraph cluster_12 { + 32 [label="Enter block"]; + subgraph cluster_11 { color=blue - 35 [label="Enter when"]; + 33 [label="Enter when"]; + subgraph cluster_12 { + color=blue + 34 [label="Enter when branch condition "]; + 35 [label="Access variable R|/b|"]; + 36 [label="Const: Boolean(true)"]; + 37 [label="Equality operator =="]; + 38 [label="Const: Boolean(true)"]; + 39 [label="Equality operator !="]; + 40 [label="Exit when branch condition"]; + } subgraph cluster_13 { color=blue - 36 [label="Enter when branch condition "]; - 37 [label="Access variable R|/b|"]; - 38 [label="Const: Boolean(true)"]; - 39 [label="Equality operator =="]; - 40 [label="Const: Boolean(true)"]; - 41 [label="Equality operator !="]; + 41 [label="Enter when branch condition else"]; 42 [label="Exit when branch condition"]; } + 43 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 43 [label="Enter when branch condition else"]; - 44 [label="Exit when branch condition"]; + 44 [label="Enter block"]; + 45 [label="Access variable R|/b|"]; + 46 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 47 [label="Exit block"]; } - 45 [label="Enter when branch result"]; + 48 [label="Exit when branch result"]; + 49 [label="Enter when branch result"]; subgraph cluster_15 { color=blue - 46 [label="Enter block"]; - 47 [label="Access variable R|/b|"]; - 48 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 49 [label="Exit block"]; + 50 [label="Enter block"]; + 51 [label="Access variable R|/b|"]; + 52 [label="Function call: R|/b|.#()"]; + 53 [label="Exit block"]; } - 50 [label="Exit when branch result"]; - 51 [label="Enter when branch result"]; - subgraph cluster_16 { - color=blue - 52 [label="Enter block"]; - 53 [label="Access variable R|/b|"]; - 54 [label="Function call: R|/b|.#()"]; - 55 [label="Exit block"]; - } - 56 [label="Exit when branch result"]; - 57 [label="Exit when"]; + 54 [label="Exit when branch result"]; + 55 [label="Exit when"]; } - 58 [label="Exit block"]; + 56 [label="Exit block"]; } - 59 [label="Exit function test_2" style="filled" fillcolor=red]; + 57 [label="Exit function test_2" style="filled" fillcolor=red]; } + 31 -> {32}; + 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; @@ -154,74 +149,74 @@ digraph equalsToBoolean_kt { 37 -> {38}; 38 -> {39}; 39 -> {40}; - 40 -> {41}; + 40 -> {49 41}; 41 -> {42}; - 42 -> {51 43}; + 42 -> {43}; 43 -> {44}; 44 -> {45}; 45 -> {46}; 46 -> {47}; 47 -> {48}; - 48 -> {49}; + 48 -> {55}; 49 -> {50}; - 50 -> {57}; + 50 -> {51}; 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; 55 -> {56}; 56 -> {57}; - 57 -> {58}; - 58 -> {59}; - subgraph cluster_17 { + subgraph cluster_16 { color=red - 60 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_18 { + 58 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_17 { color=blue - 61 [label="Enter block"]; - subgraph cluster_19 { + 59 [label="Enter block"]; + subgraph cluster_18 { color=blue - 62 [label="Enter when"]; + 60 [label="Enter when"]; + subgraph cluster_19 { + color=blue + 61 [label="Enter when branch condition "]; + 62 [label="Access variable R|/b|"]; + 63 [label="Const: Boolean(true)"]; + 64 [label="Equality operator =="]; + 65 [label="Const: Boolean(false)"]; + 66 [label="Equality operator =="]; + 67 [label="Exit when branch condition"]; + } subgraph cluster_20 { color=blue - 63 [label="Enter when branch condition "]; - 64 [label="Access variable R|/b|"]; - 65 [label="Const: Boolean(true)"]; - 66 [label="Equality operator =="]; - 67 [label="Const: Boolean(false)"]; - 68 [label="Equality operator =="]; + 68 [label="Enter when branch condition else"]; 69 [label="Exit when branch condition"]; } + 70 [label="Enter when branch result"]; subgraph cluster_21 { color=blue - 70 [label="Enter when branch condition else"]; - 71 [label="Exit when branch condition"]; + 71 [label="Enter block"]; + 72 [label="Access variable R|/b|"]; + 73 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 74 [label="Exit block"]; } - 72 [label="Enter when branch result"]; + 75 [label="Exit when branch result"]; + 76 [label="Enter when branch result"]; subgraph cluster_22 { color=blue - 73 [label="Enter block"]; - 74 [label="Access variable R|/b|"]; - 75 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 76 [label="Exit block"]; + 77 [label="Enter block"]; + 78 [label="Access variable R|/b|"]; + 79 [label="Function call: R|/b|.#()"]; + 80 [label="Exit block"]; } - 77 [label="Exit when branch result"]; - 78 [label="Enter when branch result"]; - subgraph cluster_23 { - color=blue - 79 [label="Enter block"]; - 80 [label="Access variable R|/b|"]; - 81 [label="Function call: R|/b|.#()"]; - 82 [label="Exit block"]; - } - 83 [label="Exit when branch result"]; - 84 [label="Exit when"]; + 81 [label="Exit when branch result"]; + 82 [label="Exit when"]; } - 85 [label="Exit block"]; + 83 [label="Exit block"]; } - 86 [label="Exit function test_3" style="filled" fillcolor=red]; + 84 [label="Exit function test_3" style="filled" fillcolor=red]; } + 58 -> {59}; + 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; @@ -229,74 +224,74 @@ digraph equalsToBoolean_kt { 64 -> {65}; 65 -> {66}; 66 -> {67}; - 67 -> {68}; + 67 -> {76 68}; 68 -> {69}; - 69 -> {78 70}; + 69 -> {70}; 70 -> {71}; 71 -> {72}; 72 -> {73}; 73 -> {74}; 74 -> {75}; - 75 -> {76}; + 75 -> {82}; 76 -> {77}; - 77 -> {84}; + 77 -> {78}; 78 -> {79}; 79 -> {80}; 80 -> {81}; 81 -> {82}; 82 -> {83}; 83 -> {84}; - 84 -> {85}; - 85 -> {86}; - subgraph cluster_24 { + subgraph cluster_23 { color=red - 87 [label="Enter function test_4" style="filled" fillcolor=red]; - subgraph cluster_25 { + 85 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_24 { color=blue - 88 [label="Enter block"]; - subgraph cluster_26 { + 86 [label="Enter block"]; + subgraph cluster_25 { color=blue - 89 [label="Enter when"]; + 87 [label="Enter when"]; + subgraph cluster_26 { + color=blue + 88 [label="Enter when branch condition "]; + 89 [label="Access variable R|/b|"]; + 90 [label="Const: Boolean(true)"]; + 91 [label="Equality operator =="]; + 92 [label="Const: Boolean(false)"]; + 93 [label="Equality operator !="]; + 94 [label="Exit when branch condition"]; + } subgraph cluster_27 { color=blue - 90 [label="Enter when branch condition "]; - 91 [label="Access variable R|/b|"]; - 92 [label="Const: Boolean(true)"]; - 93 [label="Equality operator =="]; - 94 [label="Const: Boolean(false)"]; - 95 [label="Equality operator !="]; + 95 [label="Enter when branch condition else"]; 96 [label="Exit when branch condition"]; } + 97 [label="Enter when branch result"]; subgraph cluster_28 { color=blue - 97 [label="Enter when branch condition else"]; - 98 [label="Exit when branch condition"]; + 98 [label="Enter block"]; + 99 [label="Access variable R|/b|"]; + 100 [label="Function call: R|/b|.#()"]; + 101 [label="Exit block"]; } - 99 [label="Enter when branch result"]; + 102 [label="Exit when branch result"]; + 103 [label="Enter when branch result"]; subgraph cluster_29 { color=blue - 100 [label="Enter block"]; - 101 [label="Access variable R|/b|"]; - 102 [label="Function call: R|/b|.#()"]; - 103 [label="Exit block"]; + 104 [label="Enter block"]; + 105 [label="Access variable R|/b|"]; + 106 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 107 [label="Exit block"]; } - 104 [label="Exit when branch result"]; - 105 [label="Enter when branch result"]; - subgraph cluster_30 { - color=blue - 106 [label="Enter block"]; - 107 [label="Access variable R|/b|"]; - 108 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 109 [label="Exit block"]; - } - 110 [label="Exit when branch result"]; - 111 [label="Exit when"]; + 108 [label="Exit when branch result"]; + 109 [label="Exit when"]; } - 112 [label="Exit block"]; + 110 [label="Exit block"]; } - 113 [label="Exit function test_4" style="filled" fillcolor=red]; + 111 [label="Exit function test_4" style="filled" fillcolor=red]; } + 85 -> {86}; + 86 -> {87}; 87 -> {88}; 88 -> {89}; 89 -> {90}; @@ -304,74 +299,74 @@ digraph equalsToBoolean_kt { 91 -> {92}; 92 -> {93}; 93 -> {94}; - 94 -> {95}; + 94 -> {103 95}; 95 -> {96}; - 96 -> {105 97}; + 96 -> {97}; 97 -> {98}; 98 -> {99}; 99 -> {100}; 100 -> {101}; 101 -> {102}; - 102 -> {103}; + 102 -> {109}; 103 -> {104}; - 104 -> {111}; + 104 -> {105}; 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; 109 -> {110}; 110 -> {111}; - 111 -> {112}; - 112 -> {113}; - subgraph cluster_31 { + subgraph cluster_30 { color=red - 114 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_32 { + 112 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_31 { color=blue - 115 [label="Enter block"]; - subgraph cluster_33 { + 113 [label="Enter block"]; + subgraph cluster_32 { color=blue - 116 [label="Enter when"]; + 114 [label="Enter when"]; + subgraph cluster_33 { + color=blue + 115 [label="Enter when branch condition "]; + 116 [label="Access variable R|/b|"]; + 117 [label="Const: Boolean(true)"]; + 118 [label="Equality operator !="]; + 119 [label="Const: Boolean(true)"]; + 120 [label="Equality operator =="]; + 121 [label="Exit when branch condition"]; + } subgraph cluster_34 { color=blue - 117 [label="Enter when branch condition "]; - 118 [label="Access variable R|/b|"]; - 119 [label="Const: Boolean(true)"]; - 120 [label="Equality operator !="]; - 121 [label="Const: Boolean(true)"]; - 122 [label="Equality operator =="]; + 122 [label="Enter when branch condition else"]; 123 [label="Exit when branch condition"]; } + 124 [label="Enter when branch result"]; subgraph cluster_35 { color=blue - 124 [label="Enter when branch condition else"]; - 125 [label="Exit when branch condition"]; + 125 [label="Enter block"]; + 126 [label="Access variable R|/b|"]; + 127 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 128 [label="Exit block"]; } - 126 [label="Enter when branch result"]; + 129 [label="Exit when branch result"]; + 130 [label="Enter when branch result"]; subgraph cluster_36 { color=blue - 127 [label="Enter block"]; - 128 [label="Access variable R|/b|"]; - 129 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 130 [label="Exit block"]; + 131 [label="Enter block"]; + 132 [label="Access variable R|/b|"]; + 133 [label="Function call: R|/b|.#()"]; + 134 [label="Exit block"]; } - 131 [label="Exit when branch result"]; - 132 [label="Enter when branch result"]; - subgraph cluster_37 { - color=blue - 133 [label="Enter block"]; - 134 [label="Access variable R|/b|"]; - 135 [label="Function call: R|/b|.#()"]; - 136 [label="Exit block"]; - } - 137 [label="Exit when branch result"]; - 138 [label="Exit when"]; + 135 [label="Exit when branch result"]; + 136 [label="Exit when"]; } - 139 [label="Exit block"]; + 137 [label="Exit block"]; } - 140 [label="Exit function test_5" style="filled" fillcolor=red]; + 138 [label="Exit function test_5" style="filled" fillcolor=red]; } + 112 -> {113}; + 113 -> {114}; 114 -> {115}; 115 -> {116}; 116 -> {117}; @@ -379,74 +374,74 @@ digraph equalsToBoolean_kt { 118 -> {119}; 119 -> {120}; 120 -> {121}; - 121 -> {122}; + 121 -> {130 122}; 122 -> {123}; - 123 -> {132 124}; + 123 -> {124}; 124 -> {125}; 125 -> {126}; 126 -> {127}; 127 -> {128}; 128 -> {129}; - 129 -> {130}; + 129 -> {136}; 130 -> {131}; - 131 -> {138}; + 131 -> {132}; 132 -> {133}; 133 -> {134}; 134 -> {135}; 135 -> {136}; 136 -> {137}; 137 -> {138}; - 138 -> {139}; - 139 -> {140}; - subgraph cluster_38 { + subgraph cluster_37 { color=red - 141 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_39 { + 139 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_38 { color=blue - 142 [label="Enter block"]; - subgraph cluster_40 { + 140 [label="Enter block"]; + subgraph cluster_39 { color=blue - 143 [label="Enter when"]; - subgraph cluster_41 { + 141 [label="Enter when"]; + subgraph cluster_40 { color=blue - 144 [label="Enter when branch condition "]; - 145 [label="Access variable R|/b|"]; + 142 [label="Enter when branch condition "]; + 143 [label="Access variable R|/b|"]; + 144 [label="Const: Boolean(true)"]; + 145 [label="Equality operator !="]; 146 [label="Const: Boolean(true)"]; 147 [label="Equality operator !="]; - 148 [label="Const: Boolean(true)"]; - 149 [label="Equality operator !="]; + 148 [label="Exit when branch condition"]; + } + subgraph cluster_41 { + color=blue + 149 [label="Enter when branch condition else"]; 150 [label="Exit when branch condition"]; } + 151 [label="Enter when branch result"]; subgraph cluster_42 { color=blue - 151 [label="Enter when branch condition else"]; - 152 [label="Exit when branch condition"]; + 152 [label="Enter block"]; + 153 [label="Access variable R|/b|"]; + 154 [label="Function call: R|/b|.#()"]; + 155 [label="Exit block"]; } - 153 [label="Enter when branch result"]; + 156 [label="Exit when branch result"]; + 157 [label="Enter when branch result"]; subgraph cluster_43 { color=blue - 154 [label="Enter block"]; - 155 [label="Access variable R|/b|"]; - 156 [label="Function call: R|/b|.#()"]; - 157 [label="Exit block"]; + 158 [label="Enter block"]; + 159 [label="Access variable R|/b|"]; + 160 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 161 [label="Exit block"]; } - 158 [label="Exit when branch result"]; - 159 [label="Enter when branch result"]; - subgraph cluster_44 { - color=blue - 160 [label="Enter block"]; - 161 [label="Access variable R|/b|"]; - 162 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 163 [label="Exit block"]; - } - 164 [label="Exit when branch result"]; - 165 [label="Exit when"]; + 162 [label="Exit when branch result"]; + 163 [label="Exit when"]; } - 166 [label="Exit block"]; + 164 [label="Exit block"]; } - 167 [label="Exit function test_6" style="filled" fillcolor=red]; + 165 [label="Exit function test_6" style="filled" fillcolor=red]; } + 139 -> {140}; + 140 -> {141}; 141 -> {142}; 142 -> {143}; 143 -> {144}; @@ -454,74 +449,74 @@ digraph equalsToBoolean_kt { 145 -> {146}; 146 -> {147}; 147 -> {148}; - 148 -> {149}; + 148 -> {157 149}; 149 -> {150}; - 150 -> {159 151}; + 150 -> {151}; 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; 155 -> {156}; - 156 -> {157}; + 156 -> {163}; 157 -> {158}; - 158 -> {165}; + 158 -> {159}; 159 -> {160}; 160 -> {161}; 161 -> {162}; 162 -> {163}; 163 -> {164}; 164 -> {165}; - 165 -> {166}; - 166 -> {167}; - subgraph cluster_45 { + subgraph cluster_44 { color=red - 168 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_46 { + 166 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_45 { color=blue - 169 [label="Enter block"]; - subgraph cluster_47 { + 167 [label="Enter block"]; + subgraph cluster_46 { color=blue - 170 [label="Enter when"]; + 168 [label="Enter when"]; + subgraph cluster_47 { + color=blue + 169 [label="Enter when branch condition "]; + 170 [label="Access variable R|/b|"]; + 171 [label="Const: Boolean(true)"]; + 172 [label="Equality operator !="]; + 173 [label="Const: Boolean(false)"]; + 174 [label="Equality operator =="]; + 175 [label="Exit when branch condition"]; + } subgraph cluster_48 { color=blue - 171 [label="Enter when branch condition "]; - 172 [label="Access variable R|/b|"]; - 173 [label="Const: Boolean(true)"]; - 174 [label="Equality operator !="]; - 175 [label="Const: Boolean(false)"]; - 176 [label="Equality operator =="]; + 176 [label="Enter when branch condition else"]; 177 [label="Exit when branch condition"]; } + 178 [label="Enter when branch result"]; subgraph cluster_49 { color=blue - 178 [label="Enter when branch condition else"]; - 179 [label="Exit when branch condition"]; + 179 [label="Enter block"]; + 180 [label="Access variable R|/b|"]; + 181 [label="Function call: R|/b|.#()"]; + 182 [label="Exit block"]; } - 180 [label="Enter when branch result"]; + 183 [label="Exit when branch result"]; + 184 [label="Enter when branch result"]; subgraph cluster_50 { color=blue - 181 [label="Enter block"]; - 182 [label="Access variable R|/b|"]; - 183 [label="Function call: R|/b|.#()"]; - 184 [label="Exit block"]; + 185 [label="Enter block"]; + 186 [label="Access variable R|/b|"]; + 187 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 188 [label="Exit block"]; } - 185 [label="Exit when branch result"]; - 186 [label="Enter when branch result"]; - subgraph cluster_51 { - color=blue - 187 [label="Enter block"]; - 188 [label="Access variable R|/b|"]; - 189 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 190 [label="Exit block"]; - } - 191 [label="Exit when branch result"]; - 192 [label="Exit when"]; + 189 [label="Exit when branch result"]; + 190 [label="Exit when"]; } - 193 [label="Exit block"]; + 191 [label="Exit block"]; } - 194 [label="Exit function test_7" style="filled" fillcolor=red]; + 192 [label="Exit function test_7" style="filled" fillcolor=red]; } + 166 -> {167}; + 167 -> {168}; 168 -> {169}; 169 -> {170}; 170 -> {171}; @@ -529,74 +524,74 @@ digraph equalsToBoolean_kt { 172 -> {173}; 173 -> {174}; 174 -> {175}; - 175 -> {176}; + 175 -> {184 176}; 176 -> {177}; - 177 -> {186 178}; + 177 -> {178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; 181 -> {182}; 182 -> {183}; - 183 -> {184}; + 183 -> {190}; 184 -> {185}; - 185 -> {192}; + 185 -> {186}; 186 -> {187}; 187 -> {188}; 188 -> {189}; 189 -> {190}; 190 -> {191}; 191 -> {192}; - 192 -> {193}; - 193 -> {194}; - subgraph cluster_52 { + subgraph cluster_51 { color=red - 195 [label="Enter function test_8" style="filled" fillcolor=red]; - subgraph cluster_53 { + 193 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_52 { color=blue - 196 [label="Enter block"]; - subgraph cluster_54 { + 194 [label="Enter block"]; + subgraph cluster_53 { color=blue - 197 [label="Enter when"]; + 195 [label="Enter when"]; + subgraph cluster_54 { + color=blue + 196 [label="Enter when branch condition "]; + 197 [label="Access variable R|/b|"]; + 198 [label="Const: Boolean(true)"]; + 199 [label="Equality operator !="]; + 200 [label="Const: Boolean(false)"]; + 201 [label="Equality operator !="]; + 202 [label="Exit when branch condition"]; + } subgraph cluster_55 { color=blue - 198 [label="Enter when branch condition "]; - 199 [label="Access variable R|/b|"]; - 200 [label="Const: Boolean(true)"]; - 201 [label="Equality operator !="]; - 202 [label="Const: Boolean(false)"]; - 203 [label="Equality operator !="]; + 203 [label="Enter when branch condition else"]; 204 [label="Exit when branch condition"]; } + 205 [label="Enter when branch result"]; subgraph cluster_56 { color=blue - 205 [label="Enter when branch condition else"]; - 206 [label="Exit when branch condition"]; + 206 [label="Enter block"]; + 207 [label="Access variable R|/b|"]; + 208 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 209 [label="Exit block"]; } - 207 [label="Enter when branch result"]; + 210 [label="Exit when branch result"]; + 211 [label="Enter when branch result"]; subgraph cluster_57 { color=blue - 208 [label="Enter block"]; - 209 [label="Access variable R|/b|"]; - 210 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 211 [label="Exit block"]; + 212 [label="Enter block"]; + 213 [label="Access variable R|/b|"]; + 214 [label="Function call: R|/b|.#()"]; + 215 [label="Exit block"]; } - 212 [label="Exit when branch result"]; - 213 [label="Enter when branch result"]; - subgraph cluster_58 { - color=blue - 214 [label="Enter block"]; - 215 [label="Access variable R|/b|"]; - 216 [label="Function call: R|/b|.#()"]; - 217 [label="Exit block"]; - } - 218 [label="Exit when branch result"]; - 219 [label="Exit when"]; + 216 [label="Exit when branch result"]; + 217 [label="Exit when"]; } - 220 [label="Exit block"]; + 218 [label="Exit block"]; } - 221 [label="Exit function test_8" style="filled" fillcolor=red]; + 219 [label="Exit function test_8" style="filled" fillcolor=red]; } + 193 -> {194}; + 194 -> {195}; 195 -> {196}; 196 -> {197}; 197 -> {198}; @@ -604,24 +599,22 @@ digraph equalsToBoolean_kt { 199 -> {200}; 200 -> {201}; 201 -> {202}; - 202 -> {203}; + 202 -> {211 203}; 203 -> {204}; - 204 -> {213 205}; + 204 -> {205}; 205 -> {206}; 206 -> {207}; 207 -> {208}; 208 -> {209}; 209 -> {210}; - 210 -> {211}; + 210 -> {217}; 211 -> {212}; - 212 -> {219}; + 212 -> {213}; 213 -> {214}; 214 -> {215}; 215 -> {216}; 216 -> {217}; 217 -> {218}; 218 -> {219}; - 219 -> {220}; - 220 -> {221}; } 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 92a88207997..fb58fb5d62f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcasts.dot @@ -322,8 +322,8 @@ digraph boundSmartcasts_kt { } 115 -> {116} [color=green]; 116 -> {117} [style=dotted]; - 116 -> {123} [color=green]; - 116 -> {123} [style=dashed]; + 116 -> {121} [color=green]; + 116 -> {121} [style=dashed]; subgraph cluster_28 { color=red @@ -336,72 +336,67 @@ digraph boundSmartcasts_kt { subgraph cluster_29 { color=red - 121 [label="Enter function getter" style="filled" fillcolor=red]; - 122 [label="Exit function getter" style="filled" fillcolor=red]; + 121 [label="Enter property" style="filled" fillcolor=red]; + 122 [label="Access variable R|/any|"]; + 123 [label="Exit property" style="filled" fillcolor=red]; } 121 -> {122}; + 122 -> {123}; + 123 -> {117} [color=green]; subgraph cluster_30 { color=red - 123 [label="Enter property" style="filled" fillcolor=red]; - 124 [label="Access variable R|/any|"]; - 125 [label="Exit property" style="filled" fillcolor=red]; + 124 [label="Enter function baz" style="filled" fillcolor=red]; + subgraph cluster_31 { + color=blue + 125 [label="Enter block"]; + 126 [label="Exit block"]; + } + 127 [label="Exit function baz" style="filled" fillcolor=red]; } - 123 -> {124}; 124 -> {125}; - 125 -> {117} [color=green]; - - subgraph cluster_31 { - color=red - 126 [label="Enter function baz" style="filled" fillcolor=red]; - subgraph cluster_32 { - color=blue - 127 [label="Enter block"]; - 128 [label="Exit block"]; - } - 129 [label="Exit function baz" style="filled" fillcolor=red]; - } + 125 -> {126}; 126 -> {127}; - 127 -> {128}; - 128 -> {129}; - subgraph cluster_33 { + subgraph cluster_32 { color=red - 130 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_34 { + 128 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_33 { color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/d|"]; - 133 [label="Access variable R|/D.any|"]; - 134 [label="Exit lhs of ?:"]; - 135 [label="Enter rhs of ?:"]; - 136 [label="Jump: ^test_5 Unit"]; - 137 [label="Stub" style="filled" fillcolor=gray]; - 138 [label="Lhs of ?: is not null"]; - 139 [label="Exit ?:"]; - 140 [label="Variable declaration: lval a: R|kotlin/Any|"]; - 141 [label="Access variable R|/a|"]; - 142 [label="Function call: R|/a|.R|/baz|()"]; - 143 [label="Access variable R|/d|"]; - 144 [label="Access variable R|/D.any|"]; - 145 [label="Function call: R|/d|.R|/D.any|.R|/baz|()"]; + 129 [label="Enter block"]; + 130 [label="Access variable R|/d|"]; + 131 [label="Access variable R|/D.any|"]; + 132 [label="Exit lhs of ?:"]; + 133 [label="Enter rhs of ?:"]; + 134 [label="Jump: ^test_5 Unit"]; + 135 [label="Stub" style="filled" fillcolor=gray]; + 136 [label="Lhs of ?: is not null"]; + 137 [label="Exit ?:"]; + 138 [label="Variable declaration: lval a: R|kotlin/Any|"]; + 139 [label="Access variable R|/a|"]; + 140 [label="Function call: R|/a|.R|/baz|()"]; + 141 [label="Access variable R|/d|"]; + 142 [label="Access variable R|/D.any|"]; + 143 [label="Function call: R|/d|.R|/D.any|.R|/baz|()"]; + 144 [label="Access variable R|/a|"]; + 145 [label="Type operator: (R|/a| as R|A|)"]; 146 [label="Access variable R|/a|"]; - 147 [label="Type operator: (R|/a| as R|A|)"]; - 148 [label="Access variable R|/a|"]; - 149 [label="Function call: R|/a|.R|/A.foo|()"]; - 150 [label="Exit block"]; + 147 [label="Function call: R|/a|.R|/A.foo|()"]; + 148 [label="Exit block"]; } - 151 [label="Exit function test_5" style="filled" fillcolor=red]; + 149 [label="Exit function test_5" style="filled" fillcolor=red]; } + 128 -> {129}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; - 132 -> {133}; + 132 -> {136 133}; 133 -> {134}; - 134 -> {138 135}; - 135 -> {136}; - 136 -> {151}; - 136 -> {137} [style=dotted]; - 137 -> {139} [style=dotted]; + 134 -> {149}; + 134 -> {135} [style=dotted]; + 135 -> {137} [style=dotted]; + 136 -> {137}; + 137 -> {138}; 138 -> {139}; 139 -> {140}; 140 -> {141}; @@ -413,32 +408,32 @@ digraph boundSmartcasts_kt { 146 -> {147}; 147 -> {148}; 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - subgraph cluster_35 { + subgraph cluster_34 { color=red - 152 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_36 { + 150 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_35 { color=blue - 153 [label="Enter block"]; - 154 [label="Access variable R|/d1|"]; - 155 [label="Access variable R|/D.any|"]; - 156 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 151 [label="Enter block"]; + 152 [label="Access variable R|/d1|"]; + 153 [label="Access variable R|/D.any|"]; + 154 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 155 [label="Access variable R|/a|"]; + 156 [label="Type operator: (R|/a| as R|A|)"]; 157 [label="Access variable R|/a|"]; - 158 [label="Type operator: (R|/a| as R|A|)"]; - 159 [label="Access variable R|/a|"]; - 160 [label="Function call: R|/a|.R|/A.foo|()"]; - 161 [label="Access variable R|/d1|"]; - 162 [label="Access variable R|/D.any|"]; - 163 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()"]; - 164 [label="Access variable R|/d1|"]; - 165 [label="Access variable R|/D.any|"]; - 166 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()"]; - 167 [label="Exit block"]; + 158 [label="Function call: R|/a|.R|/A.foo|()"]; + 159 [label="Access variable R|/d1|"]; + 160 [label="Access variable R|/D.any|"]; + 161 [label="Function call: R|/d1|.R|/D.any|.R|/A.foo|()"]; + 162 [label="Access variable R|/d1|"]; + 163 [label="Access variable R|/D.any|"]; + 164 [label="Function call: R|/d1|.R|/D.any|.R|/baz|()"]; + 165 [label="Exit block"]; } - 168 [label="Exit function test_6" style="filled" fillcolor=red]; + 166 [label="Exit function test_6" style="filled" fillcolor=red]; } + 150 -> {151}; + 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; @@ -453,45 +448,45 @@ digraph boundSmartcasts_kt { 163 -> {164}; 164 -> {165}; 165 -> {166}; - 166 -> {167}; - 167 -> {168}; - subgraph cluster_37 { + subgraph cluster_36 { color=red - 169 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_38 { + 167 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_37 { color=blue - 170 [label="Enter block"]; - 171 [label="Access variable R|/d1|"]; - 172 [label="Enter safe call"]; - 173 [label="Access variable R|/D.any|"]; - 174 [label="Exit safe call"]; - 175 [label="Variable declaration: lval a: R|kotlin/Any?|"]; - 176 [label="Access variable R|/d2|"]; - 177 [label="Enter safe call"]; - 178 [label="Access variable R|/D.any|"]; - 179 [label="Exit safe call"]; - 180 [label="Variable declaration: lval b: R|kotlin/Any?|"]; + 168 [label="Enter block"]; + 169 [label="Access variable R|/d1|"]; + 170 [label="Enter safe call"]; + 171 [label="Access variable R|/D.any|"]; + 172 [label="Exit safe call"]; + 173 [label="Variable declaration: lval a: R|kotlin/Any?|"]; + 174 [label="Access variable R|/d2|"]; + 175 [label="Enter safe call"]; + 176 [label="Access variable R|/D.any|"]; + 177 [label="Exit safe call"]; + 178 [label="Variable declaration: lval b: R|kotlin/Any?|"]; + 179 [label="Access variable R|/a|"]; + 180 [label="Type operator: (R|/a| as R|A|)"]; 181 [label="Access variable R|/a|"]; - 182 [label="Type operator: (R|/a| as R|A|)"]; - 183 [label="Access variable R|/a|"]; - 184 [label="Function call: R|/a|.R|/A.foo|()"]; + 182 [label="Function call: R|/a|.R|/A.foo|()"]; + 183 [label="Access variable R|/b|"]; + 184 [label="Type operator: (R|/b| as R|B|)"]; 185 [label="Access variable R|/b|"]; - 186 [label="Type operator: (R|/b| as R|B|)"]; - 187 [label="Access variable R|/b|"]; - 188 [label="Function call: R|/b|.R|/B.bar|()"]; - 189 [label="Exit block"]; + 186 [label="Function call: R|/b|.R|/B.bar|()"]; + 187 [label="Exit block"]; } - 190 [label="Exit function test_7" style="filled" fillcolor=red]; + 188 [label="Exit function test_7" style="filled" fillcolor=red]; } - 169 -> {170}; + 167 -> {168}; + 168 -> {169}; + 169 -> {170 172}; 170 -> {171}; - 171 -> {172 174}; + 171 -> {172}; 172 -> {173}; 173 -> {174}; - 174 -> {175}; + 174 -> {175 177}; 175 -> {176}; - 176 -> {177 179}; + 176 -> {177}; 177 -> {178}; 178 -> {179}; 179 -> {180}; @@ -503,7 +498,5 @@ digraph boundSmartcasts_kt { 185 -> {186}; 186 -> {187}; 187 -> {188}; - 188 -> {189}; - 189 -> {190}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot index cc5243f14e3..15d374c3afd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/boundSmartcastsInBranches.dot @@ -11,8 +11,8 @@ digraph boundSmartcastsInBranches_kt { } 0 -> {1} [color=green]; 1 -> {2} [style=dotted]; - 1 -> {8} [color=green]; - 1 -> {8} [style=dashed]; + 1 -> {6} [color=green]; + 1 -> {6} [style=dashed]; subgraph cluster_1 { color=red @@ -25,88 +25,83 @@ digraph boundSmartcastsInBranches_kt { subgraph cluster_2 { color=red - 6 [label="Enter function getter" style="filled" fillcolor=red]; - 7 [label="Exit function getter" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Const: String()"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } 6 -> {7}; + 7 -> {8}; + 8 -> {2} [color=green]; subgraph cluster_3 { color=red - 8 [label="Enter property" style="filled" fillcolor=red]; - 9 [label="Const: String()"]; - 10 [label="Exit property" style="filled" fillcolor=red]; - } - 8 -> {9}; - 9 -> {10}; - 10 -> {2} [color=green]; - - subgraph cluster_4 { - color=red - 11 [label="Enter function test_0" style="filled" fillcolor=red]; - subgraph cluster_5 { + 9 [label="Enter function test_0" style="filled" fillcolor=red]; + subgraph cluster_4 { color=blue - 12 [label="Enter block"]; - 13 [label="Const: Null(null)"]; - 14 [label="Variable declaration: lvar goodA: R|A?|"]; - 15 [label="Access variable R|/list|"]; - 16 [label="Function call: R|/list|.R|SubstitutionOverride|>|()"]; - 17 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; - subgraph cluster_6 { + 10 [label="Enter block"]; + 11 [label="Const: Null(null)"]; + 12 [label="Variable declaration: lvar goodA: R|A?|"]; + 13 [label="Access variable R|/list|"]; + 14 [label="Function call: R|/list|.R|SubstitutionOverride|>|()"]; + 15 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; + subgraph cluster_5 { color=blue - 18 [label="Enter while loop"]; + 16 [label="Enter while loop"]; + subgraph cluster_6 { + color=blue + 17 [label="Enter loop condition"]; + 18 [label="Access variable R|/|"]; + 19 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; + 20 [label="Exit loop condition"]; + } subgraph cluster_7 { color=blue - 19 [label="Enter loop condition"]; - 20 [label="Access variable R|/|"]; - 21 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; - 22 [label="Exit loop condition"]; - } - subgraph cluster_8 { - color=blue - 23 [label="Enter loop block"]; - subgraph cluster_9 { + 21 [label="Enter loop block"]; + subgraph cluster_8 { color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/|"]; - 26 [label="Function call: R|/|.R|SubstitutionOverride|()"]; - 27 [label="Variable declaration: lval a: R|A|"]; - subgraph cluster_10 { + 22 [label="Enter block"]; + 23 [label="Access variable R|/|"]; + 24 [label="Function call: R|/|.R|SubstitutionOverride|()"]; + 25 [label="Variable declaration: lval a: R|A|"]; + subgraph cluster_9 { color=blue - 28 [label="Enter when"]; + 26 [label="Enter when"]; + subgraph cluster_10 { + color=blue + 27 [label="Enter when branch condition "]; + 28 [label="Access variable R|/goodA|"]; + 29 [label="Const: Null(null)"]; + 30 [label="Equality operator =="]; + 31 [label="Exit when branch condition"]; + } + 32 [label="Synthetic else branch"]; + 33 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 29 [label="Enter when branch condition "]; - 30 [label="Access variable R|/goodA|"]; - 31 [label="Const: Null(null)"]; - 32 [label="Equality operator =="]; - 33 [label="Exit when branch condition"]; + 34 [label="Enter block"]; + 35 [label="Access variable R|/a|"]; + 36 [label="Assignment: R|/goodA|"]; + 37 [label="Jump: continue@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] "]; + 38 [label="Stub" style="filled" fillcolor=gray]; + 39 [label="Exit block" style="filled" fillcolor=gray]; } - 34 [label="Synthetic else branch"]; - 35 [label="Enter when branch result"]; - subgraph cluster_12 { - color=blue - 36 [label="Enter block"]; - 37 [label="Access variable R|/a|"]; - 38 [label="Assignment: R|/goodA|"]; - 39 [label="Jump: continue@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] "]; - 40 [label="Stub" style="filled" fillcolor=gray]; - 41 [label="Exit block" style="filled" fillcolor=gray]; - } - 42 [label="Exit when branch result" style="filled" fillcolor=gray]; - 43 [label="Exit when"]; + 40 [label="Exit when branch result" style="filled" fillcolor=gray]; + 41 [label="Exit when"]; } - 44 [label="Access variable R|/goodA|"]; - 45 [label="Access variable R|/A.s|"]; - 46 [label="Exit block"]; + 42 [label="Access variable R|/goodA|"]; + 43 [label="Access variable R|/A.s|"]; + 44 [label="Exit block"]; } - 47 [label="Exit loop block"]; + 45 [label="Exit loop block"]; } - 48 [label="Exit whileloop"]; + 46 [label="Exit whileloop"]; } - 49 [label="Exit block"]; + 47 [label="Exit block"]; } - 50 [label="Exit function test_0" style="filled" fillcolor=red]; + 48 [label="Exit function test_0" style="filled" fillcolor=red]; } + 9 -> {10}; + 10 -> {11}; 11 -> {12}; 12 -> {13}; 13 -> {14}; @@ -116,9 +111,9 @@ digraph boundSmartcastsInBranches_kt { 17 -> {18}; 18 -> {19}; 19 -> {20}; - 20 -> {21}; + 20 -> {46 21}; 21 -> {22}; - 22 -> {48 23}; + 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; @@ -127,89 +122,89 @@ digraph boundSmartcastsInBranches_kt { 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - 33 -> {35 34}; - 34 -> {43}; + 31 -> {33 32}; + 32 -> {41}; + 33 -> {34}; + 34 -> {35}; 35 -> {36}; 36 -> {37}; - 37 -> {38}; - 38 -> {39}; + 37 -> {38} [style=dotted]; + 37 -> {16} [color=green style=dashed]; + 38 -> {39} [style=dotted]; 39 -> {40} [style=dotted]; - 39 -> {18} [color=green style=dashed]; 40 -> {41} [style=dotted]; - 41 -> {42} [style=dotted]; - 42 -> {43} [style=dotted]; + 41 -> {42}; + 42 -> {43}; 43 -> {44}; 44 -> {45}; - 45 -> {46}; + 45 -> {17} [color=green style=dashed]; 46 -> {47}; - 47 -> {19} [color=green style=dashed]; - 48 -> {49}; - 49 -> {50}; + 47 -> {48}; - subgraph cluster_13 { + subgraph cluster_12 { color=red - 51 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_14 { + 49 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_13 { color=blue - 52 [label="Enter block"]; - 53 [label="Variable declaration: lval x: R|kotlin/Any|"]; - subgraph cluster_15 { + 50 [label="Enter block"]; + 51 [label="Variable declaration: lval x: R|kotlin/Any|"]; + subgraph cluster_14 { color=blue - 54 [label="Enter when"]; + 52 [label="Enter when"]; + subgraph cluster_15 { + color=blue + 53 [label="Enter when branch condition "]; + 54 [label="Access variable R|/b|"]; + 55 [label="Exit when branch condition"]; + } subgraph cluster_16 { color=blue - 55 [label="Enter when branch condition "]; - 56 [label="Access variable R|/b|"]; + 56 [label="Enter when branch condition else"]; 57 [label="Exit when branch condition"]; } + 58 [label="Enter when branch result"]; subgraph cluster_17 { color=blue - 58 [label="Enter when branch condition else"]; - 59 [label="Exit when branch condition"]; + 59 [label="Enter block"]; + 60 [label="Access variable R|/a|"]; + 61 [label="Assignment: R|/x|"]; + 62 [label="Exit block"]; } - 60 [label="Enter when branch result"]; + 63 [label="Exit when branch result"]; + 64 [label="Enter when branch result"]; subgraph cluster_18 { color=blue - 61 [label="Enter block"]; - 62 [label="Access variable R|/a|"]; - 63 [label="Assignment: R|/x|"]; - 64 [label="Exit block"]; + 65 [label="Enter block"]; + 66 [label="Function call: R|/A.A|()"]; + 67 [label="Assignment: R|/x|"]; + 68 [label="Exit block"]; } - 65 [label="Exit when branch result"]; - 66 [label="Enter when branch result"]; - subgraph cluster_19 { - color=blue - 67 [label="Enter block"]; - 68 [label="Function call: R|/A.A|()"]; - 69 [label="Assignment: R|/x|"]; - 70 [label="Exit block"]; - } - 71 [label="Exit when branch result"]; - 72 [label="Exit when"]; + 69 [label="Exit when branch result"]; + 70 [label="Exit when"]; } - 73 [label="Access variable R|/x|"]; - 74 [label="Access variable R|/A.s|"]; - 75 [label="Exit block"]; + 71 [label="Access variable R|/x|"]; + 72 [label="Access variable R|/A.s|"]; + 73 [label="Exit block"]; } - 76 [label="Exit function test_1" style="filled" fillcolor=red]; + 74 [label="Exit function test_1" style="filled" fillcolor=red]; } + 49 -> {50}; + 50 -> {51}; 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; - 55 -> {56}; + 55 -> {64 56}; 56 -> {57}; - 57 -> {66 58}; + 57 -> {58}; 58 -> {59}; 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; - 63 -> {64}; + 63 -> {70}; 64 -> {65}; - 65 -> {72}; + 65 -> {66}; 66 -> {67}; 67 -> {68}; 68 -> {69}; @@ -218,65 +213,65 @@ digraph boundSmartcastsInBranches_kt { 71 -> {72}; 72 -> {73}; 73 -> {74}; - 74 -> {75}; - 75 -> {76}; - subgraph cluster_20 { + subgraph cluster_19 { color=red - 77 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_21 { + 75 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_20 { color=blue - 78 [label="Enter block"]; - 79 [label="Variable declaration: lval x: R|kotlin/Any|"]; - subgraph cluster_22 { + 76 [label="Enter block"]; + 77 [label="Variable declaration: lval x: R|kotlin/Any|"]; + subgraph cluster_21 { color=blue - 80 [label="Enter when"]; + 78 [label="Enter when"]; + subgraph cluster_22 { + color=blue + 79 [label="Enter when branch condition "]; + 80 [label="Access variable R|/b|"]; + 81 [label="Exit when branch condition"]; + } subgraph cluster_23 { color=blue - 81 [label="Enter when branch condition "]; - 82 [label="Access variable R|/b|"]; + 82 [label="Enter when branch condition else"]; 83 [label="Exit when branch condition"]; } + 84 [label="Enter when branch result"]; subgraph cluster_24 { color=blue - 84 [label="Enter when branch condition else"]; - 85 [label="Exit when branch condition"]; + 85 [label="Enter block"]; + 86 [label="Access variable R|/a|"]; + 87 [label="Assignment: R|/x|"]; + 88 [label="Access variable R|/a|"]; + 89 [label="Type operator: (R|/a| as R|A|)"]; + 90 [label="Exit block"]; } - 86 [label="Enter when branch result"]; + 91 [label="Exit when branch result"]; + 92 [label="Enter when branch result"]; subgraph cluster_25 { color=blue - 87 [label="Enter block"]; - 88 [label="Access variable R|/a|"]; - 89 [label="Assignment: R|/x|"]; - 90 [label="Access variable R|/a|"]; - 91 [label="Type operator: (R|/a| as R|A|)"]; - 92 [label="Exit block"]; + 93 [label="Enter block"]; + 94 [label="Function call: R|/A.A|()"]; + 95 [label="Assignment: R|/x|"]; + 96 [label="Exit block"]; } - 93 [label="Exit when branch result"]; - 94 [label="Enter when branch result"]; - subgraph cluster_26 { - color=blue - 95 [label="Enter block"]; - 96 [label="Function call: R|/A.A|()"]; - 97 [label="Assignment: R|/x|"]; - 98 [label="Exit block"]; - } - 99 [label="Exit when branch result"]; - 100 [label="Exit when"]; + 97 [label="Exit when branch result"]; + 98 [label="Exit when"]; } - 101 [label="Access variable R|/x|"]; - 102 [label="Access variable R|/A.s|"]; - 103 [label="Exit block"]; + 99 [label="Access variable R|/x|"]; + 100 [label="Access variable R|/A.s|"]; + 101 [label="Exit block"]; } - 104 [label="Exit function test_2" style="filled" fillcolor=red]; + 102 [label="Exit function test_2" style="filled" fillcolor=red]; } + 75 -> {76}; + 76 -> {77}; 77 -> {78}; 78 -> {79}; 79 -> {80}; 80 -> {81}; - 81 -> {82}; + 81 -> {92 82}; 82 -> {83}; - 83 -> {94 84}; + 83 -> {84}; 84 -> {85}; 85 -> {86}; 86 -> {87}; @@ -284,9 +279,9 @@ digraph boundSmartcastsInBranches_kt { 88 -> {89}; 89 -> {90}; 90 -> {91}; - 91 -> {92}; + 91 -> {98}; 92 -> {93}; - 93 -> {100}; + 93 -> {94}; 94 -> {95}; 95 -> {96}; 96 -> {97}; @@ -295,65 +290,65 @@ digraph boundSmartcastsInBranches_kt { 99 -> {100}; 100 -> {101}; 101 -> {102}; - 102 -> {103}; - 103 -> {104}; - subgraph cluster_27 { + subgraph cluster_26 { color=red - 105 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_28 { + 103 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_27 { color=blue - 106 [label="Enter block"]; - 107 [label="Variable declaration: lval x: R|kotlin/Any|"]; - subgraph cluster_29 { + 104 [label="Enter block"]; + 105 [label="Variable declaration: lval x: R|kotlin/Any|"]; + subgraph cluster_28 { color=blue - 108 [label="Enter when"]; + 106 [label="Enter when"]; + subgraph cluster_29 { + color=blue + 107 [label="Enter when branch condition "]; + 108 [label="Access variable R|/b|"]; + 109 [label="Exit when branch condition"]; + } subgraph cluster_30 { color=blue - 109 [label="Enter when branch condition "]; - 110 [label="Access variable R|/b|"]; + 110 [label="Enter when branch condition else"]; 111 [label="Exit when branch condition"]; } + 112 [label="Enter when branch result"]; subgraph cluster_31 { color=blue - 112 [label="Enter when branch condition else"]; - 113 [label="Exit when branch condition"]; + 113 [label="Enter block"]; + 114 [label="Access variable R|/a|"]; + 115 [label="Type operator: (R|/a| as R|A|)"]; + 116 [label="Access variable R|/a|"]; + 117 [label="Assignment: R|/x|"]; + 118 [label="Exit block"]; } - 114 [label="Enter when branch result"]; + 119 [label="Exit when branch result"]; + 120 [label="Enter when branch result"]; subgraph cluster_32 { color=blue - 115 [label="Enter block"]; - 116 [label="Access variable R|/a|"]; - 117 [label="Type operator: (R|/a| as R|A|)"]; - 118 [label="Access variable R|/a|"]; - 119 [label="Assignment: R|/x|"]; - 120 [label="Exit block"]; + 121 [label="Enter block"]; + 122 [label="Function call: R|/A.A|()"]; + 123 [label="Assignment: R|/x|"]; + 124 [label="Exit block"]; } - 121 [label="Exit when branch result"]; - 122 [label="Enter when branch result"]; - subgraph cluster_33 { - color=blue - 123 [label="Enter block"]; - 124 [label="Function call: R|/A.A|()"]; - 125 [label="Assignment: R|/x|"]; - 126 [label="Exit block"]; - } - 127 [label="Exit when branch result"]; - 128 [label="Exit when"]; + 125 [label="Exit when branch result"]; + 126 [label="Exit when"]; } - 129 [label="Access variable R|/x|"]; - 130 [label="Access variable R|/A.s|"]; - 131 [label="Exit block"]; + 127 [label="Access variable R|/x|"]; + 128 [label="Access variable R|/A.s|"]; + 129 [label="Exit block"]; } - 132 [label="Exit function test_3" style="filled" fillcolor=red]; + 130 [label="Exit function test_3" style="filled" fillcolor=red]; } + 103 -> {104}; + 104 -> {105}; 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; - 109 -> {110}; + 109 -> {120 110}; 110 -> {111}; - 111 -> {122 112}; + 111 -> {112}; 112 -> {113}; 113 -> {114}; 114 -> {115}; @@ -361,9 +356,9 @@ digraph boundSmartcastsInBranches_kt { 116 -> {117}; 117 -> {118}; 118 -> {119}; - 119 -> {120}; + 119 -> {126}; 120 -> {121}; - 121 -> {128}; + 121 -> {122}; 122 -> {123}; 123 -> {124}; 124 -> {125}; @@ -372,75 +367,75 @@ digraph boundSmartcastsInBranches_kt { 127 -> {128}; 128 -> {129}; 129 -> {130}; - 130 -> {131}; - 131 -> {132}; - subgraph cluster_34 { + subgraph cluster_33 { color=red - 133 [label="Enter function test_4" style="filled" fillcolor=red]; - subgraph cluster_35 { + 131 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_34 { color=blue - 134 [label="Enter block"]; - 135 [label="Variable declaration: lval x: R|kotlin/Any|"]; - subgraph cluster_36 { + 132 [label="Enter block"]; + 133 [label="Variable declaration: lval x: R|kotlin/Any|"]; + subgraph cluster_35 { color=blue - 136 [label="Enter when"]; + 134 [label="Enter when"]; + subgraph cluster_36 { + color=blue + 135 [label="Enter when branch condition "]; + 136 [label="Access variable R|/b|"]; + 137 [label="Exit when branch condition"]; + } subgraph cluster_37 { color=blue - 137 [label="Enter when branch condition "]; - 138 [label="Access variable R|/b|"]; + 138 [label="Enter when branch condition else"]; 139 [label="Exit when branch condition"]; } + 140 [label="Enter when branch result"]; subgraph cluster_38 { color=blue - 140 [label="Enter when branch condition else"]; - 141 [label="Exit when branch condition"]; + 141 [label="Enter block"]; + 142 [label="Access variable R|/a|"]; + 143 [label="Assignment: R|/x|"]; + 144 [label="Exit block"]; } - 142 [label="Enter when branch result"]; + 145 [label="Exit when branch result"]; + 146 [label="Enter when branch result"]; subgraph cluster_39 { color=blue - 143 [label="Enter block"]; - 144 [label="Access variable R|/a|"]; - 145 [label="Assignment: R|/x|"]; - 146 [label="Exit block"]; + 147 [label="Enter block"]; + 148 [label="Access variable R|/a|"]; + 149 [label="Assignment: R|/x|"]; + 150 [label="Exit block"]; } - 147 [label="Exit when branch result"]; - 148 [label="Enter when branch result"]; - subgraph cluster_40 { - color=blue - 149 [label="Enter block"]; - 150 [label="Access variable R|/a|"]; - 151 [label="Assignment: R|/x|"]; - 152 [label="Exit block"]; - } - 153 [label="Exit when branch result"]; - 154 [label="Exit when"]; + 151 [label="Exit when branch result"]; + 152 [label="Exit when"]; } + 153 [label="Access variable R|/x|"]; + 154 [label="Type operator: (R|/x| as R|A|)"]; 155 [label="Access variable R|/x|"]; - 156 [label="Type operator: (R|/x| as R|A|)"]; - 157 [label="Access variable R|/x|"]; + 156 [label="Access variable R|/A.s|"]; + 157 [label="Access variable R|/a|"]; 158 [label="Access variable R|/A.s|"]; - 159 [label="Access variable R|/a|"]; - 160 [label="Access variable R|/A.s|"]; - 161 [label="Exit block"]; + 159 [label="Exit block"]; } - 162 [label="Exit function test_4" style="filled" fillcolor=red]; + 160 [label="Exit function test_4" style="filled" fillcolor=red]; } + 131 -> {132}; + 132 -> {133}; 133 -> {134}; 134 -> {135}; 135 -> {136}; 136 -> {137}; - 137 -> {138}; + 137 -> {146 138}; 138 -> {139}; - 139 -> {148 140}; + 139 -> {140}; 140 -> {141}; 141 -> {142}; 142 -> {143}; 143 -> {144}; 144 -> {145}; - 145 -> {146}; + 145 -> {152}; 146 -> {147}; - 147 -> {154}; + 147 -> {148}; 148 -> {149}; 149 -> {150}; 150 -> {151}; @@ -453,75 +448,75 @@ digraph boundSmartcastsInBranches_kt { 157 -> {158}; 158 -> {159}; 159 -> {160}; - 160 -> {161}; - 161 -> {162}; - subgraph cluster_41 { + subgraph cluster_40 { color=red - 163 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_42 { + 161 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_41 { color=blue - 164 [label="Enter block"]; - 165 [label="Variable declaration: lval x: R|kotlin/Any|"]; - subgraph cluster_43 { + 162 [label="Enter block"]; + 163 [label="Variable declaration: lval x: R|kotlin/Any|"]; + subgraph cluster_42 { color=blue - 166 [label="Enter when"]; + 164 [label="Enter when"]; + subgraph cluster_43 { + color=blue + 165 [label="Enter when branch condition "]; + 166 [label="Access variable R|/b|"]; + 167 [label="Exit when branch condition"]; + } subgraph cluster_44 { color=blue - 167 [label="Enter when branch condition "]; - 168 [label="Access variable R|/b|"]; + 168 [label="Enter when branch condition else"]; 169 [label="Exit when branch condition"]; } + 170 [label="Enter when branch result"]; subgraph cluster_45 { color=blue - 170 [label="Enter when branch condition else"]; - 171 [label="Exit when branch condition"]; + 171 [label="Enter block"]; + 172 [label="Access variable R|/a|"]; + 173 [label="Assignment: R|/x|"]; + 174 [label="Exit block"]; } - 172 [label="Enter when branch result"]; + 175 [label="Exit when branch result"]; + 176 [label="Enter when branch result"]; subgraph cluster_46 { color=blue - 173 [label="Enter block"]; - 174 [label="Access variable R|/a|"]; - 175 [label="Assignment: R|/x|"]; - 176 [label="Exit block"]; + 177 [label="Enter block"]; + 178 [label="Access variable R|/a|"]; + 179 [label="Assignment: R|/x|"]; + 180 [label="Exit block"]; } - 177 [label="Exit when branch result"]; - 178 [label="Enter when branch result"]; - subgraph cluster_47 { - color=blue - 179 [label="Enter block"]; - 180 [label="Access variable R|/a|"]; - 181 [label="Assignment: R|/x|"]; - 182 [label="Exit block"]; - } - 183 [label="Exit when branch result"]; - 184 [label="Exit when"]; + 181 [label="Exit when branch result"]; + 182 [label="Exit when"]; } - 185 [label="Access variable R|/a|"]; - 186 [label="Type operator: (R|/a| as R|A|)"]; - 187 [label="Access variable R|/x|"]; + 183 [label="Access variable R|/a|"]; + 184 [label="Type operator: (R|/a| as R|A|)"]; + 185 [label="Access variable R|/x|"]; + 186 [label="Access variable R|/A.s|"]; + 187 [label="Access variable R|/a|"]; 188 [label="Access variable R|/A.s|"]; - 189 [label="Access variable R|/a|"]; - 190 [label="Access variable R|/A.s|"]; - 191 [label="Exit block"]; + 189 [label="Exit block"]; } - 192 [label="Exit function test_5" style="filled" fillcolor=red]; + 190 [label="Exit function test_5" style="filled" fillcolor=red]; } + 161 -> {162}; + 162 -> {163}; 163 -> {164}; 164 -> {165}; 165 -> {166}; 166 -> {167}; - 167 -> {168}; + 167 -> {176 168}; 168 -> {169}; - 169 -> {178 170}; + 169 -> {170}; 170 -> {171}; 171 -> {172}; 172 -> {173}; 173 -> {174}; 174 -> {175}; - 175 -> {176}; + 175 -> {182}; 176 -> {177}; - 177 -> {184}; + 177 -> {178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; @@ -534,213 +529,213 @@ digraph boundSmartcastsInBranches_kt { 187 -> {188}; 188 -> {189}; 189 -> {190}; - 190 -> {191}; - 191 -> {192}; - subgraph cluster_48 { + subgraph cluster_47 { color=red - 193 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_49 { + 191 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_48 { color=blue - 194 [label="Enter block"]; - 195 [label="Variable declaration: lval x: R|kotlin/Any|"]; - 196 [label="Access variable R|/a|"]; - 197 [label="Assignment: R|/x|"]; - 198 [label="Access variable R|/x|"]; - 199 [label="Access variable R|/A.s|"]; - 200 [label="Exit block"]; + 192 [label="Enter block"]; + 193 [label="Variable declaration: lval x: R|kotlin/Any|"]; + 194 [label="Access variable R|/a|"]; + 195 [label="Assignment: R|/x|"]; + 196 [label="Access variable R|/x|"]; + 197 [label="Access variable R|/A.s|"]; + 198 [label="Exit block"]; } - 201 [label="Exit function test_6" style="filled" fillcolor=red]; + 199 [label="Exit function test_6" style="filled" fillcolor=red]; } + 191 -> {192}; + 192 -> {193}; 193 -> {194}; 194 -> {195}; 195 -> {196}; 196 -> {197}; 197 -> {198}; 198 -> {199}; - 199 -> {200}; - 200 -> {201}; - subgraph cluster_50 { + subgraph cluster_49 { color=red - 202 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_51 { + 200 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_50 { color=blue - 203 [label="Enter block"]; - 204 [label="Const: Null(null)"]; - 205 [label="Variable declaration: lval z: R|kotlin/String?|"]; - 206 [label="Access variable R|/z|"]; - 207 [label="Variable declaration: lvar y: R|kotlin/String?|"]; - 208 [label="Access variable R|/y|"]; - 209 [label="Variable declaration: lval x: R|kotlin/String?|"]; - subgraph cluster_52 { + 201 [label="Enter block"]; + 202 [label="Const: Null(null)"]; + 203 [label="Variable declaration: lval z: R|kotlin/String?|"]; + 204 [label="Access variable R|/z|"]; + 205 [label="Variable declaration: lvar y: R|kotlin/String?|"]; + 206 [label="Access variable R|/y|"]; + 207 [label="Variable declaration: lval x: R|kotlin/String?|"]; + subgraph cluster_51 { color=blue - 210 [label="Enter when"]; + 208 [label="Enter when"]; + subgraph cluster_52 { + color=blue + 209 [label="Enter when branch condition "]; + 210 [label="Access variable R|/x|"]; + 211 [label="Const: Null(null)"]; + 212 [label="Equality operator !="]; + 213 [label="Exit when branch condition"]; + } + 214 [label="Synthetic else branch"]; + 215 [label="Enter when branch result"]; subgraph cluster_53 { color=blue - 211 [label="Enter when branch condition "]; - 212 [label="Access variable R|/x|"]; - 213 [label="Const: Null(null)"]; - 214 [label="Equality operator !="]; - 215 [label="Exit when branch condition"]; - } - 216 [label="Synthetic else branch"]; - 217 [label="Enter when branch result"]; - subgraph cluster_54 { - color=blue - 218 [label="Enter block"]; - 219 [label="Access variable R|/x|"]; + 216 [label="Enter block"]; + 217 [label="Access variable R|/x|"]; + 218 [label="Access variable R|kotlin/String.length|"]; + 219 [label="Access variable R|/y|"]; 220 [label="Access variable R|kotlin/String.length|"]; - 221 [label="Access variable R|/y|"]; + 221 [label="Access variable R|/z|"]; 222 [label="Access variable R|kotlin/String.length|"]; - 223 [label="Access variable R|/z|"]; - 224 [label="Access variable R|kotlin/String.length|"]; - 225 [label="Exit block"]; + 223 [label="Exit block"]; } - 226 [label="Exit when branch result"]; - 227 [label="Exit when"]; + 224 [label="Exit when branch result"]; + 225 [label="Exit when"]; } - subgraph cluster_55 { + subgraph cluster_54 { color=blue - 228 [label="Enter when"]; + 226 [label="Enter when"]; + subgraph cluster_55 { + color=blue + 227 [label="Enter when branch condition "]; + 228 [label="Access variable R|/y|"]; + 229 [label="Const: Null(null)"]; + 230 [label="Equality operator !="]; + 231 [label="Exit when branch condition"]; + } + 232 [label="Synthetic else branch"]; + 233 [label="Enter when branch result"]; subgraph cluster_56 { color=blue - 229 [label="Enter when branch condition "]; - 230 [label="Access variable R|/y|"]; - 231 [label="Const: Null(null)"]; - 232 [label="Equality operator !="]; - 233 [label="Exit when branch condition"]; - } - 234 [label="Synthetic else branch"]; - 235 [label="Enter when branch result"]; - subgraph cluster_57 { - color=blue - 236 [label="Enter block"]; - 237 [label="Access variable R|/x|"]; + 234 [label="Enter block"]; + 235 [label="Access variable R|/x|"]; + 236 [label="Access variable R|kotlin/String.length|"]; + 237 [label="Access variable R|/y|"]; 238 [label="Access variable R|kotlin/String.length|"]; - 239 [label="Access variable R|/y|"]; + 239 [label="Access variable R|/z|"]; 240 [label="Access variable R|kotlin/String.length|"]; - 241 [label="Access variable R|/z|"]; - 242 [label="Access variable R|kotlin/String.length|"]; - 243 [label="Exit block"]; + 241 [label="Exit block"]; } - 244 [label="Exit when branch result"]; - 245 [label="Exit when"]; + 242 [label="Exit when branch result"]; + 243 [label="Exit when"]; } - subgraph cluster_58 { + subgraph cluster_57 { color=blue - 246 [label="Enter when"]; + 244 [label="Enter when"]; + subgraph cluster_58 { + color=blue + 245 [label="Enter when branch condition "]; + 246 [label="Access variable R|/z|"]; + 247 [label="Const: Null(null)"]; + 248 [label="Equality operator !="]; + 249 [label="Exit when branch condition"]; + } + 250 [label="Synthetic else branch"]; + 251 [label="Enter when branch result"]; subgraph cluster_59 { color=blue - 247 [label="Enter when branch condition "]; - 248 [label="Access variable R|/z|"]; - 249 [label="Const: Null(null)"]; - 250 [label="Equality operator !="]; - 251 [label="Exit when branch condition"]; - } - 252 [label="Synthetic else branch"]; - 253 [label="Enter when branch result"]; - subgraph cluster_60 { - color=blue - 254 [label="Enter block"]; - 255 [label="Access variable R|/x|"]; + 252 [label="Enter block"]; + 253 [label="Access variable R|/x|"]; + 254 [label="Access variable R|kotlin/String.length|"]; + 255 [label="Access variable R|/y|"]; 256 [label="Access variable R|kotlin/String.length|"]; - 257 [label="Access variable R|/y|"]; + 257 [label="Access variable R|/z|"]; 258 [label="Access variable R|kotlin/String.length|"]; - 259 [label="Access variable R|/z|"]; - 260 [label="Access variable R|kotlin/String.length|"]; - 261 [label="Exit block"]; + 259 [label="Exit block"]; } - 262 [label="Exit when branch result"]; - 263 [label="Exit when"]; + 260 [label="Exit when branch result"]; + 261 [label="Exit when"]; } - 264 [label="Const: Null(null)"]; - 265 [label="Assignment: R|/y|"]; - subgraph cluster_61 { + 262 [label="Const: Null(null)"]; + 263 [label="Assignment: R|/y|"]; + subgraph cluster_60 { color=blue - 266 [label="Enter when"]; + 264 [label="Enter when"]; + subgraph cluster_61 { + color=blue + 265 [label="Enter when branch condition "]; + 266 [label="Access variable R|/x|"]; + 267 [label="Const: Null(null)"]; + 268 [label="Equality operator !="]; + 269 [label="Exit when branch condition"]; + } + 270 [label="Synthetic else branch"]; + 271 [label="Enter when branch result"]; subgraph cluster_62 { color=blue - 267 [label="Enter when branch condition "]; - 268 [label="Access variable R|/x|"]; - 269 [label="Const: Null(null)"]; - 270 [label="Equality operator !="]; - 271 [label="Exit when branch condition"]; + 272 [label="Enter block"]; + 273 [label="Access variable R|/x|"]; + 274 [label="Access variable R|kotlin/String.length|"]; + 275 [label="Access variable R|/y|"]; + 276 [label="Access variable #"]; + 277 [label="Access variable R|/z|"]; + 278 [label="Access variable R|kotlin/String.length|"]; + 279 [label="Exit block"]; } - 272 [label="Synthetic else branch"]; - 273 [label="Enter when branch result"]; - subgraph cluster_63 { - color=blue - 274 [label="Enter block"]; - 275 [label="Access variable R|/x|"]; - 276 [label="Access variable R|kotlin/String.length|"]; - 277 [label="Access variable R|/y|"]; - 278 [label="Access variable #"]; - 279 [label="Access variable R|/z|"]; - 280 [label="Access variable R|kotlin/String.length|"]; - 281 [label="Exit block"]; - } - 282 [label="Exit when branch result"]; - 283 [label="Exit when"]; + 280 [label="Exit when branch result"]; + 281 [label="Exit when"]; } - subgraph cluster_64 { + subgraph cluster_63 { color=blue - 284 [label="Enter when"]; + 282 [label="Enter when"]; + subgraph cluster_64 { + color=blue + 283 [label="Enter when branch condition "]; + 284 [label="Access variable R|/y|"]; + 285 [label="Const: Null(null)"]; + 286 [label="Equality operator !="]; + 287 [label="Exit when branch condition"]; + } + 288 [label="Synthetic else branch"]; + 289 [label="Enter when branch result"]; subgraph cluster_65 { color=blue - 285 [label="Enter when branch condition "]; - 286 [label="Access variable R|/y|"]; - 287 [label="Const: Null(null)"]; - 288 [label="Equality operator !="]; - 289 [label="Exit when branch condition"]; + 290 [label="Enter block"]; + 291 [label="Access variable R|/x|"]; + 292 [label="Access variable #"]; + 293 [label="Access variable R|/y|"]; + 294 [label="Access variable R|kotlin/String.length|"]; + 295 [label="Access variable R|/z|"]; + 296 [label="Access variable #"]; + 297 [label="Exit block"]; } - 290 [label="Synthetic else branch"]; - 291 [label="Enter when branch result"]; - subgraph cluster_66 { - color=blue - 292 [label="Enter block"]; - 293 [label="Access variable R|/x|"]; - 294 [label="Access variable #"]; - 295 [label="Access variable R|/y|"]; - 296 [label="Access variable R|kotlin/String.length|"]; - 297 [label="Access variable R|/z|"]; - 298 [label="Access variable #"]; - 299 [label="Exit block"]; - } - 300 [label="Exit when branch result"]; - 301 [label="Exit when"]; + 298 [label="Exit when branch result"]; + 299 [label="Exit when"]; } - subgraph cluster_67 { + subgraph cluster_66 { color=blue - 302 [label="Enter when"]; + 300 [label="Enter when"]; + subgraph cluster_67 { + color=blue + 301 [label="Enter when branch condition "]; + 302 [label="Access variable R|/z|"]; + 303 [label="Const: Null(null)"]; + 304 [label="Equality operator !="]; + 305 [label="Exit when branch condition"]; + } + 306 [label="Synthetic else branch"]; + 307 [label="Enter when branch result"]; subgraph cluster_68 { color=blue - 303 [label="Enter when branch condition "]; - 304 [label="Access variable R|/z|"]; - 305 [label="Const: Null(null)"]; - 306 [label="Equality operator !="]; - 307 [label="Exit when branch condition"]; + 308 [label="Enter block"]; + 309 [label="Access variable R|/x|"]; + 310 [label="Access variable R|kotlin/String.length|"]; + 311 [label="Access variable R|/y|"]; + 312 [label="Access variable #"]; + 313 [label="Access variable R|/z|"]; + 314 [label="Access variable R|kotlin/String.length|"]; + 315 [label="Exit block"]; } - 308 [label="Synthetic else branch"]; - 309 [label="Enter when branch result"]; - subgraph cluster_69 { - color=blue - 310 [label="Enter block"]; - 311 [label="Access variable R|/x|"]; - 312 [label="Access variable R|kotlin/String.length|"]; - 313 [label="Access variable R|/y|"]; - 314 [label="Access variable #"]; - 315 [label="Access variable R|/z|"]; - 316 [label="Access variable R|kotlin/String.length|"]; - 317 [label="Exit block"]; - } - 318 [label="Exit when branch result"]; - 319 [label="Exit when"]; + 316 [label="Exit when branch result"]; + 317 [label="Exit when"]; } - 320 [label="Exit block"]; + 318 [label="Exit block"]; } - 321 [label="Exit function test_7" style="filled" fillcolor=red]; + 319 [label="Exit function test_7" style="filled" fillcolor=red]; } + 200 -> {201}; + 201 -> {202}; 202 -> {203}; 203 -> {204}; 204 -> {205}; @@ -752,10 +747,10 @@ digraph boundSmartcastsInBranches_kt { 210 -> {211}; 211 -> {212}; 212 -> {213}; - 213 -> {214}; - 214 -> {215}; - 215 -> {217 216}; - 216 -> {227}; + 213 -> {215 214}; + 214 -> {225}; + 215 -> {216}; + 216 -> {217}; 217 -> {218}; 218 -> {219}; 219 -> {220}; @@ -770,10 +765,10 @@ digraph boundSmartcastsInBranches_kt { 228 -> {229}; 229 -> {230}; 230 -> {231}; - 231 -> {232}; - 232 -> {233}; - 233 -> {235 234}; - 234 -> {245}; + 231 -> {233 232}; + 232 -> {243}; + 233 -> {234}; + 234 -> {235}; 235 -> {236}; 236 -> {237}; 237 -> {238}; @@ -788,10 +783,10 @@ digraph boundSmartcastsInBranches_kt { 246 -> {247}; 247 -> {248}; 248 -> {249}; - 249 -> {250}; - 250 -> {251}; - 251 -> {253 252}; - 252 -> {263}; + 249 -> {251 250}; + 250 -> {261}; + 251 -> {252}; + 252 -> {253}; 253 -> {254}; 254 -> {255}; 255 -> {256}; @@ -808,10 +803,10 @@ digraph boundSmartcastsInBranches_kt { 266 -> {267}; 267 -> {268}; 268 -> {269}; - 269 -> {270}; - 270 -> {271}; - 271 -> {273 272}; - 272 -> {283}; + 269 -> {271 270}; + 270 -> {281}; + 271 -> {272}; + 272 -> {273}; 273 -> {274}; 274 -> {275}; 275 -> {276}; @@ -826,10 +821,10 @@ digraph boundSmartcastsInBranches_kt { 284 -> {285}; 285 -> {286}; 286 -> {287}; - 287 -> {288}; - 288 -> {289}; - 289 -> {291 290}; - 290 -> {301}; + 287 -> {289 288}; + 288 -> {299}; + 289 -> {290}; + 290 -> {291}; 291 -> {292}; 292 -> {293}; 293 -> {294}; @@ -844,10 +839,10 @@ digraph boundSmartcastsInBranches_kt { 302 -> {303}; 303 -> {304}; 304 -> {305}; - 305 -> {306}; - 306 -> {307}; - 307 -> {309 308}; - 308 -> {319}; + 305 -> {307 306}; + 306 -> {317}; + 307 -> {308}; + 308 -> {309}; 309 -> {310}; 310 -> {311}; 311 -> {312}; @@ -858,7 +853,5 @@ digraph boundSmartcastsInBranches_kt { 316 -> {317}; 317 -> {318}; 318 -> {319}; - 319 -> {320}; - 320 -> {321}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot index 578211d223c..f1c3638662d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/boundSmartcasts/functionCallBound.dot @@ -27,8 +27,8 @@ digraph functionCallBound_kt { } 5 -> {6} [color=green]; 6 -> {7} [style=dotted]; - 6 -> {13} [color=green]; - 6 -> {13} [style=dashed]; + 6 -> {11} [color=green]; + 6 -> {11} [style=dashed]; subgraph cluster_3 { color=red @@ -41,88 +41,81 @@ digraph functionCallBound_kt { subgraph cluster_4 { color=red - 11 [label="Enter function getter" style="filled" fillcolor=red]; - 12 [label="Exit function getter" style="filled" fillcolor=red]; + 11 [label="Enter property" style="filled" fillcolor=red]; + 12 [label="Access variable R|/data|"]; + 13 [label="Exit property" style="filled" fillcolor=red]; } 11 -> {12}; + 12 -> {13}; + 13 -> {7} [color=green]; subgraph cluster_5 { color=red - 13 [label="Enter property" style="filled" fillcolor=red]; - 14 [label="Access variable R|/data|"]; - 15 [label="Exit property" style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - 15 -> {7} [color=green]; - - subgraph cluster_6 { - color=red - 16 [label="Enter function isOk" style="filled" fillcolor=red]; - subgraph cluster_7 { + 14 [label="Enter function isOk" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 17 [label="Enter block"]; - 18 [label="Const: Boolean(true)"]; - 19 [label="Jump: ^isOk Boolean(true)"]; - 20 [label="Stub" style="filled" fillcolor=gray]; - 21 [label="Exit block" style="filled" fillcolor=gray]; + 15 [label="Enter block"]; + 16 [label="Const: Boolean(true)"]; + 17 [label="Jump: ^isOk Boolean(true)"]; + 18 [label="Stub" style="filled" fillcolor=gray]; + 19 [label="Exit block" style="filled" fillcolor=gray]; } - 22 [label="Exit function isOk" style="filled" fillcolor=red]; + 20 [label="Exit function isOk" style="filled" fillcolor=red]; } + 14 -> {15}; + 15 -> {16}; 16 -> {17}; - 17 -> {18}; - 18 -> {19}; - 19 -> {22}; + 17 -> {20}; + 17 -> {18} [style=dotted]; + 18 -> {19} [style=dotted]; 19 -> {20} [style=dotted]; - 20 -> {21} [style=dotted]; - 21 -> {22} [style=dotted]; - subgraph cluster_8 { + subgraph cluster_7 { color=red - 23 [label="Enter function check" style="filled" fillcolor=red]; - subgraph cluster_9 { + 21 [label="Enter function check" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 24 [label="Enter block"]; - subgraph cluster_10 { + 22 [label="Enter block"]; + subgraph cluster_9 { color=blue - 25 [label="Enter when"]; + 23 [label="Enter when"]; + subgraph cluster_10 { + color=blue + 24 [label="Enter when branch condition "]; + 25 [label="Access variable R|/base|"]; + 26 [label="Type operator: (R|/base| as? R|Sub|)"]; + 27 [label="Enter safe call"]; + 28 [label="Function call: $subj$.R|/isOk|()"]; + 29 [label="Exit safe call"]; + 30 [label="Const: Boolean(true)"]; + 31 [label="Equality operator =="]; + 32 [label="Exit when branch condition"]; + } subgraph cluster_11 { color=blue - 26 [label="Enter when branch condition "]; - 27 [label="Access variable R|/base|"]; - 28 [label="Type operator: (R|/base| as? R|Sub|)"]; - 29 [label="Enter safe call"]; - 30 [label="Function call: $subj$.R|/isOk|()"]; - 31 [label="Exit safe call"]; - 32 [label="Const: Boolean(true)"]; - 33 [label="Equality operator =="]; + 33 [label="Enter when branch condition else"]; 34 [label="Exit when branch condition"]; } + 35 [label="Enter when branch result"]; subgraph cluster_12 { color=blue - 35 [label="Enter when branch condition else"]; - 36 [label="Exit when branch condition"]; + 36 [label="Enter block"]; + 37 [label="Access variable R|/base|"]; + 38 [label="Exit block"]; } - 37 [label="Enter when branch result"]; + 39 [label="Exit when branch result"]; + 40 [label="Enter when branch result"]; subgraph cluster_13 { color=blue - 38 [label="Enter block"]; - 39 [label="Access variable R|/base|"]; - 40 [label="Exit block"]; + 41 [label="Enter block"]; + 42 [label="Access variable R|/base|"]; + 43 [label="Access variable R|/Sub.data|"]; + 44 [label="Exit block"]; } - 41 [label="Exit when branch result"]; - 42 [label="Enter when branch result"]; - subgraph cluster_14 { - color=blue - 43 [label="Enter block"]; - 44 [label="Access variable R|/base|"]; - 45 [label="Access variable R|/Sub.data|"]; - 46 [label="Exit block"]; - } - 47 [label="Exit when branch result"]; - 48 [label="Exit when"]; + 45 [label="Exit when branch result"]; + 46 [label="Exit when"]; } - 49 [label="Jump: ^check when () { + 47 [label="Jump: ^check when () { ==((R|/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> { R|/base|.R|/Sub.data| } @@ -131,40 +124,40 @@ digraph functionCallBound_kt { } } "]; - 50 [label="Stub" style="filled" fillcolor=gray]; - 51 [label="Exit block" style="filled" fillcolor=gray]; + 48 [label="Stub" style="filled" fillcolor=gray]; + 49 [label="Exit block" style="filled" fillcolor=gray]; } - 52 [label="Exit function check" style="filled" fillcolor=red]; + 50 [label="Exit function check" style="filled" fillcolor=red]; } + 21 -> {22}; + 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; - 26 -> {27}; + 26 -> {27 29}; 27 -> {28}; - 28 -> {29 31}; + 28 -> {29}; 29 -> {30}; 30 -> {31}; 31 -> {32}; - 32 -> {33}; + 32 -> {40 33}; 33 -> {34}; - 34 -> {42 35}; + 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; - 39 -> {40}; + 39 -> {46}; 40 -> {41}; - 41 -> {48}; + 41 -> {42}; 42 -> {43}; 43 -> {44}; 44 -> {45}; 45 -> {46}; 46 -> {47}; - 47 -> {48}; - 48 -> {49}; - 49 -> {52}; + 47 -> {50}; + 47 -> {48} [style=dotted]; + 48 -> {49} [style=dotted]; 49 -> {50} [style=dotted]; - 50 -> {51} [style=dotted]; - 51 -> {52} [style=dotted]; } 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 d7945e51496..d6d9a250f28 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/controlStructures/elvis.dot @@ -19,182 +19,175 @@ digraph elvis_kt { subgraph cluster_2 { color=red - 4 [label="Enter function getter" style="filled" fillcolor=red]; - 5 [label="Exit function getter" style="filled" fillcolor=red]; - } - 4 -> {5}; - - subgraph cluster_3 { - color=red - 6 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_4 { + 4 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_3 { color=blue - 7 [label="Enter block"]; - subgraph cluster_5 { + 5 [label="Enter block"]; + subgraph cluster_4 { color=blue - 8 [label="Enter when"]; + 6 [label="Enter when"]; + subgraph cluster_5 { + color=blue + 7 [label="Enter when branch condition "]; + 8 [label="Access variable R|/x|"]; + 9 [label="Enter safe call"]; + 10 [label="Access variable R|/A.b|"]; + 11 [label="Exit safe call"]; + 12 [label="Exit lhs of ?:"]; + 13 [label="Enter rhs of ?:"]; + 14 [label="Jump: ^test_1 Unit"]; + 15 [label="Stub" style="filled" fillcolor=gray]; + 16 [label="Lhs of ?: is not null"]; + 17 [label="Exit ?:"]; + 18 [label="Exit when branch condition"]; + } + 19 [label="Synthetic else branch"]; + 20 [label="Enter when branch result"]; subgraph cluster_6 { color=blue - 9 [label="Enter when branch condition "]; - 10 [label="Access variable R|/x|"]; - 11 [label="Enter safe call"]; - 12 [label="Access variable R|/A.b|"]; - 13 [label="Exit safe call"]; - 14 [label="Exit lhs of ?:"]; - 15 [label="Enter rhs of ?:"]; - 16 [label="Jump: ^test_1 Unit"]; - 17 [label="Stub" style="filled" fillcolor=gray]; - 18 [label="Lhs of ?: is not null"]; - 19 [label="Exit ?:"]; - 20 [label="Exit when branch condition"]; + 21 [label="Enter block"]; + 22 [label="Access variable R|/x|"]; + 23 [label="Function call: R|/x|.R|/A.foo|()"]; + 24 [label="Exit block"]; } - 21 [label="Synthetic else branch"]; - 22 [label="Enter when branch result"]; - subgraph cluster_7 { - color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/x|"]; - 25 [label="Function call: R|/x|.R|/A.foo|()"]; - 26 [label="Exit block"]; - } - 27 [label="Exit when branch result"]; - 28 [label="Exit when"]; + 25 [label="Exit when branch result"]; + 26 [label="Exit when"]; } - 29 [label="Exit block"]; + 27 [label="Exit block"]; } - 30 [label="Exit function test_1" style="filled" fillcolor=red]; + 28 [label="Exit function test_1" style="filled" fillcolor=red]; } + 4 -> {5}; + 5 -> {6}; 6 -> {7}; 7 -> {8}; - 8 -> {9}; + 8 -> {9 11}; 9 -> {10}; - 10 -> {11 13}; + 10 -> {11}; 11 -> {12}; - 12 -> {13}; + 12 -> {16 13}; 13 -> {14}; - 14 -> {18 15}; - 15 -> {16}; - 16 -> {30}; - 16 -> {17} [style=dotted]; - 17 -> {19} [style=dotted]; - 18 -> {19}; - 19 -> {20}; - 20 -> {22 21}; - 21 -> {28}; + 14 -> {28}; + 14 -> {15} [style=dotted]; + 15 -> {17} [style=dotted]; + 16 -> {17}; + 17 -> {18}; + 18 -> {20 19}; + 19 -> {26}; + 20 -> {21}; + 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; - 28 -> {29}; - 29 -> {30}; - subgraph cluster_8 { + subgraph cluster_7 { color=red - 31 [label="Enter function test2" style="filled" fillcolor=red]; - subgraph cluster_9 { + 29 [label="Enter function test2" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 32 [label="Enter block"]; - subgraph cluster_10 { + 30 [label="Enter block"]; + subgraph cluster_9 { color=blue - 33 [label="Enter when"]; + 31 [label="Enter when"]; + subgraph cluster_10 { + color=blue + 32 [label="Enter when branch condition "]; + 33 [label="Access variable R|/b|"]; + 34 [label="Type operator: (R|/b| !is R|kotlin/String|)"]; + 35 [label="Exit when branch condition"]; + } + 36 [label="Synthetic else branch"]; + 37 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 34 [label="Enter when branch condition "]; - 35 [label="Access variable R|/b|"]; - 36 [label="Type operator: (R|/b| !is R|kotlin/String|)"]; - 37 [label="Exit when branch condition"]; + 38 [label="Enter block"]; + 39 [label="Const: String()"]; + 40 [label="Jump: ^test2 String()"]; + 41 [label="Stub" style="filled" fillcolor=gray]; + 42 [label="Exit block" style="filled" fillcolor=gray]; } - 38 [label="Synthetic else branch"]; - 39 [label="Enter when branch result"]; - subgraph cluster_12 { - color=blue - 40 [label="Enter block"]; - 41 [label="Const: String()"]; - 42 [label="Jump: ^test2 String()"]; - 43 [label="Stub" style="filled" fillcolor=gray]; - 44 [label="Exit block" style="filled" fillcolor=gray]; - } - 45 [label="Exit when branch result" style="filled" fillcolor=gray]; - 46 [label="Exit when"]; + 43 [label="Exit when branch result" style="filled" fillcolor=gray]; + 44 [label="Exit when"]; } - subgraph cluster_13 { + subgraph cluster_12 { color=blue - 47 [label="Enter when"]; + 45 [label="Enter when"]; + subgraph cluster_13 { + color=blue + 46 [label="Enter when branch condition "]; + 47 [label="Access variable R|/a|"]; + 48 [label="Type operator: (R|/a| !is R|kotlin/String?|)"]; + 49 [label="Exit when branch condition"]; + } + 50 [label="Synthetic else branch"]; + 51 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 48 [label="Enter when branch condition "]; - 49 [label="Access variable R|/a|"]; - 50 [label="Type operator: (R|/a| !is R|kotlin/String?|)"]; - 51 [label="Exit when branch condition"]; + 52 [label="Enter block"]; + 53 [label="Const: String()"]; + 54 [label="Jump: ^test2 String()"]; + 55 [label="Stub" style="filled" fillcolor=gray]; + 56 [label="Exit block" style="filled" fillcolor=gray]; } - 52 [label="Synthetic else branch"]; - 53 [label="Enter when branch result"]; - subgraph cluster_15 { - color=blue - 54 [label="Enter block"]; - 55 [label="Const: String()"]; - 56 [label="Jump: ^test2 String()"]; - 57 [label="Stub" style="filled" fillcolor=gray]; - 58 [label="Exit block" style="filled" fillcolor=gray]; - } - 59 [label="Exit when branch result" style="filled" fillcolor=gray]; - 60 [label="Exit when"]; + 57 [label="Exit when branch result" style="filled" fillcolor=gray]; + 58 [label="Exit when"]; } - 61 [label="Access variable R|/a|"]; - 62 [label="Exit lhs of ?:"]; - 63 [label="Enter rhs of ?:"]; - 64 [label="Access variable R|/b|"]; - 65 [label="Lhs of ?: is not null"]; - 66 [label="Exit ?:"]; - 67 [label="Jump: ^test2 R|/a| ?: R|/b|"]; - 68 [label="Stub" style="filled" fillcolor=gray]; - 69 [label="Exit block" style="filled" fillcolor=gray]; + 59 [label="Access variable R|/a|"]; + 60 [label="Exit lhs of ?:"]; + 61 [label="Enter rhs of ?:"]; + 62 [label="Access variable R|/b|"]; + 63 [label="Lhs of ?: is not null"]; + 64 [label="Exit ?:"]; + 65 [label="Jump: ^test2 R|/a| ?: R|/b|"]; + 66 [label="Stub" style="filled" fillcolor=gray]; + 67 [label="Exit block" style="filled" fillcolor=gray]; } - 70 [label="Exit function test2" style="filled" fillcolor=red]; + 68 [label="Exit function test2" style="filled" fillcolor=red]; } + 29 -> {30}; + 30 -> {31}; 31 -> {32}; 32 -> {33}; 33 -> {34}; 34 -> {35}; - 35 -> {36}; - 36 -> {37}; - 37 -> {39 38}; - 38 -> {46}; + 35 -> {37 36}; + 36 -> {44}; + 37 -> {38}; + 38 -> {39}; 39 -> {40}; - 40 -> {41}; - 41 -> {42}; - 42 -> {70}; + 40 -> {68}; + 40 -> {41} [style=dotted]; + 41 -> {42} [style=dotted]; 42 -> {43} [style=dotted]; 43 -> {44} [style=dotted]; - 44 -> {45} [style=dotted]; - 45 -> {46} [style=dotted]; + 44 -> {45}; + 45 -> {46}; 46 -> {47}; 47 -> {48}; 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {53 52}; - 52 -> {60}; + 49 -> {51 50}; + 50 -> {58}; + 51 -> {52}; + 52 -> {53}; 53 -> {54}; - 54 -> {55}; - 55 -> {56}; - 56 -> {70}; + 54 -> {68}; + 54 -> {55} [style=dotted]; + 55 -> {56} [style=dotted]; 56 -> {57} [style=dotted]; 57 -> {58} [style=dotted]; - 58 -> {59} [style=dotted]; - 59 -> {60} [style=dotted]; - 60 -> {61}; + 58 -> {59}; + 59 -> {60}; + 60 -> {63 61}; 61 -> {62}; - 62 -> {65 63}; + 62 -> {64}; 63 -> {64}; - 64 -> {66}; - 65 -> {66}; - 66 -> {67}; - 67 -> {70}; + 64 -> {65}; + 65 -> {68}; + 65 -> {66} [style=dotted]; + 66 -> {67} [style=dotted]; 67 -> {68} [style=dotted]; - 68 -> {69} [style=dotted]; - 69 -> {70} [style=dotted]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot index d15936afea2..5579b6b4365 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/lambdas/lambdaInWhenBranch.dot @@ -27,8 +27,8 @@ digraph lambdaInWhenBranch_kt { } 5 -> {6} [color=green]; 6 -> {7} [style=dotted]; - 6 -> {13} [color=green]; - 6 -> {13} [style=dashed]; + 6 -> {11} [color=green]; + 6 -> {11} [style=dashed]; subgraph cluster_3 { color=red @@ -41,184 +41,179 @@ digraph lambdaInWhenBranch_kt { subgraph cluster_4 { color=red - 11 [label="Enter function getter" style="filled" fillcolor=red]; - 12 [label="Exit function getter" style="filled" fillcolor=red]; + 11 [label="Enter property" style="filled" fillcolor=red]; + 12 [label="Access variable R|/t|"]; + 13 [label="Exit property" style="filled" fillcolor=red]; } 11 -> {12}; + 12 -> {13}; + 13 -> {7} [color=green]; subgraph cluster_5 { color=red - 13 [label="Enter property" style="filled" fillcolor=red]; - 14 [label="Access variable R|/t|"]; - 15 [label="Exit property" style="filled" fillcolor=red]; + 14 [label="Enter function component1" style="filled" fillcolor=red]; + 15 [label="Exit function component1" style="filled" fillcolor=red]; } - 13 -> {14}; 14 -> {15}; - 15 -> {7} [color=green]; subgraph cluster_6 { color=red - 16 [label="Enter function component1" style="filled" fillcolor=red]; - 17 [label="Exit function component1" style="filled" fillcolor=red]; - } - 16 -> {17}; - - subgraph cluster_7 { - color=red - 18 [label="Enter function copy" style="filled" fillcolor=red]; - subgraph cluster_8 { + 16 [label="Enter function copy" style="filled" fillcolor=red]; + subgraph cluster_7 { color=blue - 20 [label="Enter default value of t" style="filled" fillcolor=red]; - 21 [label="Access variable R|/SubClass1.t|"]; - 22 [label="Exit default value of t" style="filled" fillcolor=red]; + 18 [label="Enter default value of t" style="filled" fillcolor=red]; + 19 [label="Access variable R|/SubClass1.t|"]; + 20 [label="Exit default value of t" style="filled" fillcolor=red]; } - 19 [label="Exit function copy" style="filled" fillcolor=red]; + 17 [label="Exit function copy" style="filled" fillcolor=red]; } - 18 -> {20 19}; - 20 -> {21}; - 20 -> {20} [style=dashed]; - 21 -> {22}; + 16 -> {18 17}; + 18 -> {19}; + 18 -> {18} [style=dashed]; + 19 -> {20}; + + subgraph cluster_8 { + color=red + 21 [label="Enter class SubClass2" style="filled" fillcolor=red]; + 22 [label="Exit class SubClass2" style="filled" fillcolor=red]; + } + 21 -> {22} [color=green]; subgraph cluster_9 { color=red - 23 [label="Enter class SubClass2" style="filled" fillcolor=red]; - 24 [label="Exit class SubClass2" style="filled" fillcolor=red]; + 23 [label="Enter function " style="filled" fillcolor=red]; + 24 [label="Delegated constructor call: super()"]; + 25 [label="Exit function " style="filled" fillcolor=red]; } - 23 -> {24} [color=green]; + 23 -> {24}; + 24 -> {25}; subgraph cluster_10 { color=red - 25 [label="Enter function " style="filled" fillcolor=red]; - 26 [label="Delegated constructor call: super()"]; - 27 [label="Exit function " style="filled" fillcolor=red]; + 26 [label="Enter function copy" style="filled" fillcolor=red]; + 27 [label="Exit function copy" style="filled" fillcolor=red]; } - 25 -> {26}; 26 -> {27}; subgraph cluster_11 { color=red - 28 [label="Enter function copy" style="filled" fillcolor=red]; - 29 [label="Exit function copy" style="filled" fillcolor=red]; - } - 28 -> {29}; - - subgraph cluster_12 { - color=red - 30 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_13 { + 28 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_12 { color=blue - 31 [label="Enter block"]; - subgraph cluster_14 { + 29 [label="Enter block"]; + subgraph cluster_13 { color=blue - 32 [label="Enter when"]; - 33 [label="Access variable R|/p|"]; + 30 [label="Enter when"]; + 31 [label="Access variable R|/p|"]; + subgraph cluster_14 { + color=blue + 32 [label="Enter when branch condition "]; + 33 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 34 [label="Exit when branch condition"]; + } subgraph cluster_15 { color=blue - 34 [label="Enter when branch condition "]; - 35 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 36 [label="Exit when branch condition"]; + 35 [label="Enter when branch condition "]; + 36 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 37 [label="Exit when branch condition"]; } + 38 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 37 [label="Enter when branch condition "]; - 38 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 39 [label="Exit when branch condition"]; + 39 [label="Enter block"]; + 40 [label="Const: String()"]; + 41 [label="Exit block"]; } - 40 [label="Enter when branch result"]; + 42 [label="Exit when branch result"]; + 43 [label="Enter when branch result"]; subgraph cluster_17 { color=blue - 41 [label="Enter block"]; - 42 [label="Const: String()"]; - 43 [label="Exit block"]; - } - 44 [label="Exit when branch result"]; - 45 [label="Enter when branch result"]; - subgraph cluster_18 { - color=blue - 46 [label="Enter block"]; - 47 [label="Const: String()"]; - 48 [label="Postponed enter to lambda"]; - subgraph cluster_19 { + 44 [label="Enter block"]; + 45 [label="Const: String()"]; + 46 [label="Postponed enter to lambda"]; + subgraph cluster_18 { color=blue - 79 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_20 { + 77 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_19 { color=blue - 80 [label="Enter block"]; - 81 [label="Access variable R|/it|"]; - 82 [label="Exit block"]; + 78 [label="Enter block"]; + 79 [label="Access variable R|/it|"]; + 80 [label="Exit block"]; } - 83 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 81 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 49 [label="Postponed exit from lambda"]; - 50 [label="Function call: String().R|kotlin/let|(...)"]; - 51 [label="Exit block"]; + 47 [label="Postponed exit from lambda"]; + 48 [label="Function call: String().R|kotlin/let|(...)"]; + 49 [label="Exit block"]; } - 52 [label="Exit when branch result"]; - 53 [label="Exit when"]; + 50 [label="Exit when branch result"]; + 51 [label="Exit when"]; } - 54 [label="Access variable R|/p|"]; - 55 [label="Access variable #"]; - subgraph cluster_21 { + 52 [label="Access variable R|/p|"]; + 53 [label="Access variable #"]; + subgraph cluster_20 { color=blue - 56 [label="Enter when"]; - 57 [label="Access variable R|/p|"]; + 54 [label="Enter when"]; + 55 [label="Access variable R|/p|"]; + subgraph cluster_21 { + color=blue + 56 [label="Enter when branch condition "]; + 57 [label="Type operator: ($subj$ is R|SubClass1|)"]; + 58 [label="Exit when branch condition"]; + } subgraph cluster_22 { color=blue - 58 [label="Enter when branch condition "]; - 59 [label="Type operator: ($subj$ is R|SubClass1|)"]; - 60 [label="Exit when branch condition"]; + 59 [label="Enter when branch condition "]; + 60 [label="Type operator: ($subj$ is R|SubClass2|)"]; + 61 [label="Exit when branch condition"]; } + 62 [label="Enter when branch result"]; subgraph cluster_23 { color=blue - 61 [label="Enter when branch condition "]; - 62 [label="Type operator: ($subj$ is R|SubClass2|)"]; - 63 [label="Exit when branch condition"]; + 63 [label="Enter block"]; + 64 [label="Const: String(2)"]; + 65 [label="Exit block"]; } - 64 [label="Enter when branch result"]; + 66 [label="Exit when branch result"]; + 67 [label="Enter when branch result"]; subgraph cluster_24 { color=blue - 65 [label="Enter block"]; - 66 [label="Const: String(2)"]; - 67 [label="Exit block"]; + 68 [label="Enter block"]; + 69 [label="Access variable R|/p|"]; + 70 [label="Access variable R|/SubClass1.t|"]; + 71 [label="Exit block"]; } - 68 [label="Exit when branch result"]; - 69 [label="Enter when branch result"]; - subgraph cluster_25 { - color=blue - 70 [label="Enter block"]; - 71 [label="Access variable R|/p|"]; - 72 [label="Access variable R|/SubClass1.t|"]; - 73 [label="Exit block"]; - } - 74 [label="Exit when branch result"]; - 75 [label="Exit when"]; + 72 [label="Exit when branch result"]; + 73 [label="Exit when"]; } - 76 [label="Access variable R|kotlin/String.length|"]; - 77 [label="Exit block"]; + 74 [label="Access variable R|kotlin/String.length|"]; + 75 [label="Exit block"]; } - 78 [label="Exit function foo" style="filled" fillcolor=red]; + 76 [label="Exit function foo" style="filled" fillcolor=red]; } + 28 -> {29}; + 29 -> {30}; 30 -> {31}; 31 -> {32}; 32 -> {33}; 33 -> {34}; - 34 -> {35}; + 34 -> {43 35}; 35 -> {36}; - 36 -> {45 37}; + 36 -> {37}; 37 -> {38}; 38 -> {39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; + 42 -> {51}; 43 -> {44}; - 44 -> {53}; + 44 -> {45}; 45 -> {46}; - 46 -> {47}; + 46 -> {77}; + 46 -> {47} [color=red]; + 46 -> {77} [style=dashed]; 47 -> {48}; - 48 -> {79}; - 48 -> {49} [color=red]; - 48 -> {79} [style=dashed]; + 48 -> {49}; 49 -> {50}; 50 -> {51}; 51 -> {52}; @@ -228,17 +223,17 @@ digraph lambdaInWhenBranch_kt { 55 -> {56}; 56 -> {57}; 57 -> {58}; - 58 -> {59}; + 58 -> {67 59}; 59 -> {60}; - 60 -> {69 61}; + 60 -> {61}; 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; 65 -> {66}; - 66 -> {67}; + 66 -> {73}; 67 -> {68}; - 68 -> {75}; + 68 -> {69}; 69 -> {70}; 70 -> {71}; 71 -> {72}; @@ -246,12 +241,10 @@ digraph lambdaInWhenBranch_kt { 73 -> {74}; 74 -> {75}; 75 -> {76}; - 76 -> {77}; 77 -> {78}; + 78 -> {79}; 79 -> {80}; 80 -> {81}; - 81 -> {82}; - 82 -> {83}; - 83 -> {49} [color=green]; + 81 -> {47} [color=green]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot index e387243b9c3..62d5d5183b5 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot @@ -33,276 +33,251 @@ digraph nullability_kt { subgraph cluster_4 { color=red - 8 [label="Enter function getter" style="filled" fillcolor=red]; - 9 [label="Exit function getter" style="filled" fillcolor=red]; + 8 [label="Enter function fs" style="filled" fillcolor=red]; + 9 [label="Exit function fs" style="filled" fillcolor=red]; } 8 -> {9}; subgraph cluster_5 { color=red - 10 [label="Enter function fs" style="filled" fillcolor=red]; - 11 [label="Exit function fs" style="filled" fillcolor=red]; + 10 [label="Enter class Q" style="filled" fillcolor=red]; + 11 [label="Exit class Q" style="filled" fillcolor=red]; } - 10 -> {11}; + 10 -> {11} [color=green]; subgraph cluster_6 { color=red - 12 [label="Enter class Q" style="filled" fillcolor=red]; - 13 [label="Exit class Q" style="filled" fillcolor=red]; + 12 [label="Enter function fdata" style="filled" fillcolor=red]; + 13 [label="Exit function fdata" style="filled" fillcolor=red]; } - 12 -> {13} [color=green]; + 12 -> {13}; subgraph cluster_7 { color=red - 14 [label="Enter function getter" style="filled" fillcolor=red]; - 15 [label="Exit function getter" style="filled" fillcolor=red]; + 14 [label="Enter class QImpl" style="filled" fillcolor=red]; + 15 [label="Part of class initialization"]; + 16 [label="Exit class QImpl" style="filled" fillcolor=red]; } - 14 -> {15}; + 14 -> {15} [color=green]; + 15 -> {16} [style=dotted]; + 15 -> {20} [color=green]; + 15 -> {20} [style=dashed]; subgraph cluster_8 { color=red - 16 [label="Enter function fdata" style="filled" fillcolor=red]; - 17 [label="Exit function fdata" style="filled" fillcolor=red]; + 17 [label="Enter function " style="filled" fillcolor=red]; + 18 [label="Delegated constructor call: super()"]; + 19 [label="Exit function " style="filled" fillcolor=red]; } - 16 -> {17}; + 17 -> {18}; + 18 -> {19}; subgraph cluster_9 { color=red - 18 [label="Enter class QImpl" style="filled" fillcolor=red]; - 19 [label="Part of class initialization"]; - 20 [label="Exit class QImpl" style="filled" fillcolor=red]; + 20 [label="Enter property" style="filled" fillcolor=red]; + 21 [label="Access variable R|/data|"]; + 22 [label="Exit property" style="filled" fillcolor=red]; } - 18 -> {19} [color=green]; - 19 -> {20} [style=dotted]; - 19 -> {26} [color=green]; - 19 -> {26} [style=dashed]; + 20 -> {21}; + 21 -> {22}; + 22 -> {16} [color=green]; subgraph cluster_10 { color=red - 21 [label="Enter function " style="filled" fillcolor=red]; - 22 [label="Delegated constructor call: super()"]; - 23 [label="Exit function " style="filled" fillcolor=red]; - } - 21 -> {22}; - 22 -> {23}; - - subgraph cluster_11 { - color=red - 24 [label="Enter function getter" style="filled" fillcolor=red]; - 25 [label="Exit function getter" style="filled" fillcolor=red]; + 23 [label="Enter function fdata" style="filled" fillcolor=red]; + subgraph cluster_11 { + color=blue + 24 [label="Enter block"]; + 25 [label="Const: Null(null)"]; + 26 [label="Jump: ^fdata Null(null)"]; + 27 [label="Stub" style="filled" fillcolor=gray]; + 28 [label="Exit block" style="filled" fillcolor=gray]; + } + 29 [label="Exit function fdata" style="filled" fillcolor=red]; } + 23 -> {24}; 24 -> {25}; + 25 -> {26}; + 26 -> {29}; + 26 -> {27} [style=dotted]; + 27 -> {28} [style=dotted]; + 28 -> {29} [style=dotted]; subgraph cluster_12 { color=red - 26 [label="Enter property" style="filled" fillcolor=red]; - 27 [label="Access variable R|/data|"]; - 28 [label="Exit property" style="filled" fillcolor=red]; + 30 [label="Enter class QImplMutable" style="filled" fillcolor=red]; + 31 [label="Part of class initialization"]; + 32 [label="Exit class QImplMutable" style="filled" fillcolor=red]; } - 26 -> {27}; - 27 -> {28}; - 28 -> {20} [color=green]; + 30 -> {31} [color=green]; + 31 -> {32} [style=dotted]; + 31 -> {36} [color=green]; + 31 -> {36} [style=dashed]; subgraph cluster_13 { color=red - 29 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_14 { - color=blue - 30 [label="Enter block"]; - 31 [label="Const: Null(null)"]; - 32 [label="Jump: ^fdata Null(null)"]; - 33 [label="Stub" style="filled" fillcolor=gray]; - 34 [label="Exit block" style="filled" fillcolor=gray]; - } - 35 [label="Exit function fdata" style="filled" fillcolor=red]; + 33 [label="Enter function " style="filled" fillcolor=red]; + 34 [label="Delegated constructor call: super()"]; + 35 [label="Exit function " style="filled" fillcolor=red]; } - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {35}; - 32 -> {33} [style=dotted]; - 33 -> {34} [style=dotted]; - 34 -> {35} [style=dotted]; + 33 -> {34}; + 34 -> {35}; + + subgraph cluster_14 { + color=red + 36 [label="Enter property" style="filled" fillcolor=red]; + 37 [label="Access variable R|/data|"]; + 38 [label="Exit property" style="filled" fillcolor=red]; + } + 36 -> {37}; + 37 -> {38}; + 38 -> {32} [color=green]; subgraph cluster_15 { color=red - 36 [label="Enter class QImplMutable" style="filled" fillcolor=red]; - 37 [label="Part of class initialization"]; - 38 [label="Exit class QImplMutable" style="filled" fillcolor=red]; - } - 36 -> {37} [color=green]; - 37 -> {38} [style=dotted]; - 37 -> {46} [color=green]; - 37 -> {46} [style=dashed]; - - subgraph cluster_16 { - color=red - 39 [label="Enter function " style="filled" fillcolor=red]; - 40 [label="Delegated constructor call: super()"]; - 41 [label="Exit function " style="filled" fillcolor=red]; + 39 [label="Enter function fdata" style="filled" fillcolor=red]; + subgraph cluster_16 { + color=blue + 40 [label="Enter block"]; + 41 [label="Const: Null(null)"]; + 42 [label="Jump: ^fdata Null(null)"]; + 43 [label="Stub" style="filled" fillcolor=gray]; + 44 [label="Exit block" style="filled" fillcolor=gray]; + } + 45 [label="Exit function fdata" style="filled" fillcolor=red]; } 39 -> {40}; 40 -> {41}; + 41 -> {42}; + 42 -> {45}; + 42 -> {43} [style=dotted]; + 43 -> {44} [style=dotted]; + 44 -> {45} [style=dotted]; subgraph cluster_17 { color=red - 42 [label="Enter function getter" style="filled" fillcolor=red]; - 43 [label="Exit function getter" style="filled" fillcolor=red]; + 46 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; + 47 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; } - 42 -> {43}; + 46 -> {47} [color=green]; subgraph cluster_18 { color=red - 44 [label="Enter function setter" style="filled" fillcolor=red]; - 45 [label="Exit function setter" style="filled" fillcolor=red]; + 48 [label="Enter function " style="filled" fillcolor=red]; + 49 [label="Delegated constructor call: super()"]; + 50 [label="Exit function " style="filled" fillcolor=red]; } - 44 -> {45}; + 48 -> {49}; + 49 -> {50}; subgraph cluster_19 { color=red - 46 [label="Enter property" style="filled" fillcolor=red]; - 47 [label="Access variable R|/data|"]; - 48 [label="Exit property" style="filled" fillcolor=red]; - } - 46 -> {47}; - 47 -> {48}; - 48 -> {38} [color=green]; - - subgraph cluster_20 { - color=red - 49 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_21 { + 51 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_20 { color=blue - 50 [label="Enter block"]; - 51 [label="Const: Null(null)"]; - 52 [label="Jump: ^fdata Null(null)"]; - 53 [label="Stub" style="filled" fillcolor=gray]; - 54 [label="Exit block" style="filled" fillcolor=gray]; + 52 [label="Enter block"]; + 53 [label="Const: Null(null)"]; + 54 [label="Jump: ^ Null(null)"]; + 55 [label="Stub" style="filled" fillcolor=gray]; + 56 [label="Exit block" style="filled" fillcolor=gray]; } - 55 [label="Exit function fdata" style="filled" fillcolor=red]; + 57 [label="Exit function getter" style="filled" fillcolor=red]; } - 49 -> {50}; - 50 -> {51}; 51 -> {52}; - 52 -> {55}; - 52 -> {53} [style=dotted]; - 53 -> {54} [style=dotted]; + 52 -> {53}; + 53 -> {54}; + 54 -> {57}; 54 -> {55} [style=dotted]; + 55 -> {56} [style=dotted]; + 56 -> {57} [style=dotted]; - subgraph cluster_22 { + subgraph cluster_21 { color=red - 56 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red]; - 57 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red]; - } - 56 -> {57} [color=green]; - - subgraph cluster_23 { - color=red - 58 [label="Enter function " style="filled" fillcolor=red]; - 59 [label="Delegated constructor call: super()"]; - 60 [label="Exit function " style="filled" fillcolor=red]; + 58 [label="Enter function fdata" style="filled" fillcolor=red]; + subgraph cluster_22 { + color=blue + 59 [label="Enter block"]; + 60 [label="Const: Null(null)"]; + 61 [label="Jump: ^fdata Null(null)"]; + 62 [label="Stub" style="filled" fillcolor=gray]; + 63 [label="Exit block" style="filled" fillcolor=gray]; + } + 64 [label="Exit function fdata" style="filled" fillcolor=red]; } 58 -> {59}; 59 -> {60}; + 60 -> {61}; + 61 -> {64}; + 61 -> {62} [style=dotted]; + 62 -> {63} [style=dotted]; + 63 -> {64} [style=dotted]; - subgraph cluster_24 { + subgraph cluster_23 { color=red - 61 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_25 { + 65 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_24 { color=blue - 62 [label="Enter block"]; - 63 [label="Const: Null(null)"]; - 64 [label="Jump: ^ Null(null)"]; - 65 [label="Stub" style="filled" fillcolor=gray]; - 66 [label="Exit block" style="filled" fillcolor=gray]; + 66 [label="Enter block"]; + subgraph cluster_25 { + color=blue + 67 [label="Enter when"]; + subgraph cluster_26 { + color=blue + 68 [label="Enter when branch condition "]; + 69 [label="Access variable R|/x|"]; + 70 [label="Const: Null(null)"]; + 71 [label="Equality operator !="]; + 72 [label="Exit when branch condition"]; + } + subgraph cluster_27 { + color=blue + 73 [label="Enter when branch condition else"]; + 74 [label="Exit when branch condition"]; + } + 75 [label="Enter when branch result"]; + subgraph cluster_28 { + color=blue + 76 [label="Enter block"]; + 77 [label="Access variable R|/x|"]; + 78 [label="Function call: R|/x|.#()"]; + 79 [label="Exit block"]; + } + 80 [label="Exit when branch result"]; + 81 [label="Enter when branch result"]; + subgraph cluster_29 { + color=blue + 82 [label="Enter block"]; + 83 [label="Access variable R|/x|"]; + 84 [label="Function call: R|/x|.R|/A.foo|()"]; + 85 [label="Exit block"]; + } + 86 [label="Exit when branch result"]; + 87 [label="Exit when"]; + } + 88 [label="Access variable R|/x|"]; + 89 [label="Function call: R|/x|.#()"]; + 90 [label="Exit block"]; } - 67 [label="Exit function getter" style="filled" fillcolor=red]; - } - 61 -> {62}; - 62 -> {63}; - 63 -> {64}; - 64 -> {67}; - 64 -> {65} [style=dotted]; - 65 -> {66} [style=dotted]; - 66 -> {67} [style=dotted]; - - subgraph cluster_26 { - color=red - 68 [label="Enter function fdata" style="filled" fillcolor=red]; - subgraph cluster_27 { - color=blue - 69 [label="Enter block"]; - 70 [label="Const: Null(null)"]; - 71 [label="Jump: ^fdata Null(null)"]; - 72 [label="Stub" style="filled" fillcolor=gray]; - 73 [label="Exit block" style="filled" fillcolor=gray]; - } - 74 [label="Exit function fdata" style="filled" fillcolor=red]; + 91 [label="Exit function test_1" style="filled" fillcolor=red]; } + 65 -> {66}; + 66 -> {67}; + 67 -> {68}; 68 -> {69}; 69 -> {70}; 70 -> {71}; - 71 -> {74}; - 71 -> {72} [style=dotted]; - 72 -> {73} [style=dotted]; - 73 -> {74} [style=dotted]; - - subgraph cluster_28 { - color=red - 75 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_29 { - color=blue - 76 [label="Enter block"]; - subgraph cluster_30 { - color=blue - 77 [label="Enter when"]; - subgraph cluster_31 { - color=blue - 78 [label="Enter when branch condition "]; - 79 [label="Access variable R|/x|"]; - 80 [label="Const: Null(null)"]; - 81 [label="Equality operator !="]; - 82 [label="Exit when branch condition"]; - } - subgraph cluster_32 { - color=blue - 83 [label="Enter when branch condition else"]; - 84 [label="Exit when branch condition"]; - } - 85 [label="Enter when branch result"]; - subgraph cluster_33 { - color=blue - 86 [label="Enter block"]; - 87 [label="Access variable R|/x|"]; - 88 [label="Function call: R|/x|.#()"]; - 89 [label="Exit block"]; - } - 90 [label="Exit when branch result"]; - 91 [label="Enter when branch result"]; - subgraph cluster_34 { - color=blue - 92 [label="Enter block"]; - 93 [label="Access variable R|/x|"]; - 94 [label="Function call: R|/x|.R|/A.foo|()"]; - 95 [label="Exit block"]; - } - 96 [label="Exit when branch result"]; - 97 [label="Exit when"]; - } - 98 [label="Access variable R|/x|"]; - 99 [label="Function call: R|/x|.#()"]; - 100 [label="Exit block"]; - } - 101 [label="Exit function test_1" style="filled" fillcolor=red]; - } + 71 -> {72}; + 72 -> {81 73}; + 73 -> {74}; + 74 -> {75}; 75 -> {76}; 76 -> {77}; 77 -> {78}; 78 -> {79}; 79 -> {80}; - 80 -> {81}; + 80 -> {87}; 81 -> {82}; - 82 -> {91 83}; + 82 -> {83}; 83 -> {84}; 84 -> {85}; 85 -> {86}; @@ -310,8 +285,56 @@ digraph nullability_kt { 87 -> {88}; 88 -> {89}; 89 -> {90}; - 90 -> {97}; - 91 -> {92}; + 90 -> {91}; + + subgraph cluster_30 { + color=red + 92 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_31 { + color=blue + 93 [label="Enter block"]; + subgraph cluster_32 { + color=blue + 94 [label="Enter when"]; + subgraph cluster_33 { + color=blue + 95 [label="Enter when branch condition "]; + 96 [label="Access variable R|/x|"]; + 97 [label="Const: Null(null)"]; + 98 [label="Equality operator =="]; + 99 [label="Exit when branch condition"]; + } + subgraph cluster_34 { + color=blue + 100 [label="Enter when branch condition else"]; + 101 [label="Exit when branch condition"]; + } + 102 [label="Enter when branch result"]; + subgraph cluster_35 { + color=blue + 103 [label="Enter block"]; + 104 [label="Access variable R|/x|"]; + 105 [label="Function call: R|/x|.R|/A.foo|()"]; + 106 [label="Exit block"]; + } + 107 [label="Exit when branch result"]; + 108 [label="Enter when branch result"]; + subgraph cluster_36 { + color=blue + 109 [label="Enter block"]; + 110 [label="Access variable R|/x|"]; + 111 [label="Function call: R|/x|.#()"]; + 112 [label="Exit block"]; + } + 113 [label="Exit when branch result"]; + 114 [label="Exit when"]; + } + 115 [label="Access variable R|/x|"]; + 116 [label="Function call: R|/x|.#()"]; + 117 [label="Exit block"]; + } + 118 [label="Exit function test_2" style="filled" fillcolor=red]; + } 92 -> {93}; 93 -> {94}; 94 -> {95}; @@ -319,65 +342,17 @@ digraph nullability_kt { 96 -> {97}; 97 -> {98}; 98 -> {99}; - 99 -> {100}; + 99 -> {108 100}; 100 -> {101}; - - subgraph cluster_35 { - color=red - 102 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_36 { - color=blue - 103 [label="Enter block"]; - subgraph cluster_37 { - color=blue - 104 [label="Enter when"]; - subgraph cluster_38 { - color=blue - 105 [label="Enter when branch condition "]; - 106 [label="Access variable R|/x|"]; - 107 [label="Const: Null(null)"]; - 108 [label="Equality operator =="]; - 109 [label="Exit when branch condition"]; - } - subgraph cluster_39 { - color=blue - 110 [label="Enter when branch condition else"]; - 111 [label="Exit when branch condition"]; - } - 112 [label="Enter when branch result"]; - subgraph cluster_40 { - color=blue - 113 [label="Enter block"]; - 114 [label="Access variable R|/x|"]; - 115 [label="Function call: R|/x|.R|/A.foo|()"]; - 116 [label="Exit block"]; - } - 117 [label="Exit when branch result"]; - 118 [label="Enter when branch result"]; - subgraph cluster_41 { - color=blue - 119 [label="Enter block"]; - 120 [label="Access variable R|/x|"]; - 121 [label="Function call: R|/x|.#()"]; - 122 [label="Exit block"]; - } - 123 [label="Exit when branch result"]; - 124 [label="Exit when"]; - } - 125 [label="Access variable R|/x|"]; - 126 [label="Function call: R|/x|.#()"]; - 127 [label="Exit block"]; - } - 128 [label="Exit function test_2" style="filled" fillcolor=red]; - } + 101 -> {102}; 102 -> {103}; 103 -> {104}; 104 -> {105}; 105 -> {106}; 106 -> {107}; - 107 -> {108}; + 107 -> {114}; 108 -> {109}; - 109 -> {118 110}; + 109 -> {110}; 110 -> {111}; 111 -> {112}; 112 -> {113}; @@ -385,334 +360,367 @@ digraph nullability_kt { 114 -> {115}; 115 -> {116}; 116 -> {117}; - 117 -> {124}; - 118 -> {119}; + 117 -> {118}; + + subgraph cluster_37 { + color=red + 119 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_38 { + color=blue + 120 [label="Enter block"]; + 121 [label="Access variable R|/x|"]; + 122 [label="Exit lhs of ?:"]; + 123 [label="Enter rhs of ?:"]; + 124 [label="Jump: ^test_3 Unit"]; + 125 [label="Stub" style="filled" fillcolor=gray]; + 126 [label="Lhs of ?: is not null"]; + 127 [label="Exit ?:"]; + 128 [label="Access variable R|/x|"]; + 129 [label="Function call: R|/x|.R|/A.foo|()"]; + 130 [label="Exit block"]; + } + 131 [label="Exit function test_3" style="filled" fillcolor=red]; + } 119 -> {120}; 120 -> {121}; 121 -> {122}; - 122 -> {123}; + 122 -> {126 123}; 123 -> {124}; - 124 -> {125}; - 125 -> {126}; + 124 -> {131}; + 124 -> {125} [style=dotted]; + 125 -> {127} [style=dotted]; 126 -> {127}; 127 -> {128}; - - subgraph cluster_42 { - color=red - 129 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_43 { - color=blue - 130 [label="Enter block"]; - 131 [label="Access variable R|/x|"]; - 132 [label="Exit lhs of ?:"]; - 133 [label="Enter rhs of ?:"]; - 134 [label="Jump: ^test_3 Unit"]; - 135 [label="Stub" style="filled" fillcolor=gray]; - 136 [label="Lhs of ?: is not null"]; - 137 [label="Exit ?:"]; - 138 [label="Access variable R|/x|"]; - 139 [label="Function call: R|/x|.R|/A.foo|()"]; - 140 [label="Exit block"]; - } - 141 [label="Exit function test_3" style="filled" fillcolor=red]; - } + 128 -> {129}; 129 -> {130}; 130 -> {131}; - 131 -> {132}; - 132 -> {136 133}; + + subgraph cluster_39 { + color=red + 132 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_40 { + color=blue + 133 [label="Enter block"]; + subgraph cluster_41 { + color=blue + 134 [label="Enter when"]; + subgraph cluster_42 { + color=blue + 135 [label="Enter when branch condition "]; + 136 [label="Access variable R|/x|"]; + 137 [label="Enter safe call"]; + 138 [label="Function call: $subj$.R|/A.getA|()"]; + 139 [label="Exit safe call"]; + 140 [label="Const: Null(null)"]; + 141 [label="Equality operator =="]; + 142 [label="Exit when branch condition"]; + } + 143 [label="Synthetic else branch"]; + 144 [label="Enter when branch result"]; + subgraph cluster_43 { + color=blue + 145 [label="Enter block"]; + 146 [label="Jump: ^test_4 Unit"]; + 147 [label="Stub" style="filled" fillcolor=gray]; + 148 [label="Exit block" style="filled" fillcolor=gray]; + } + 149 [label="Exit when branch result" style="filled" fillcolor=gray]; + 150 [label="Exit when"]; + } + 151 [label="Access variable R|/x|"]; + 152 [label="Function call: R|/x|.R|/A.foo|()"]; + 153 [label="Exit block"]; + } + 154 [label="Exit function test_4" style="filled" fillcolor=red]; + } + 132 -> {133}; 133 -> {134}; - 134 -> {141}; - 134 -> {135} [style=dotted]; - 135 -> {137} [style=dotted]; - 136 -> {137}; + 134 -> {135}; + 135 -> {136}; + 136 -> {137 139}; 137 -> {138}; 138 -> {139}; 139 -> {140}; 140 -> {141}; + 141 -> {142}; + 142 -> {144 143}; + 143 -> {150}; + 144 -> {145}; + 145 -> {146}; + 146 -> {154}; + 146 -> {147} [style=dotted]; + 147 -> {148} [style=dotted]; + 148 -> {149} [style=dotted]; + 149 -> {150} [style=dotted]; + 150 -> {151}; + 151 -> {152}; + 152 -> {153}; + 153 -> {154}; subgraph cluster_44 { color=red - 142 [label="Enter function test_4" style="filled" fillcolor=red]; + 155 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_45 { color=blue - 143 [label="Enter block"]; + 156 [label="Enter block"]; subgraph cluster_46 { color=blue - 144 [label="Enter when"]; + 157 [label="Enter when"]; subgraph cluster_47 { color=blue - 145 [label="Enter when branch condition "]; - 146 [label="Access variable R|/x|"]; - 147 [label="Enter safe call"]; - 148 [label="Function call: $subj$.R|/A.getA|()"]; - 149 [label="Exit safe call"]; - 150 [label="Const: Null(null)"]; - 151 [label="Equality operator =="]; - 152 [label="Exit when branch condition"]; + 158 [label="Enter when branch condition "]; + 159 [label="Access variable R|/q|"]; + 160 [label="Enter safe call"]; + 161 [label="Access variable R|/Q.data|"]; + 162 [label="Exit safe call"]; + 163 [label="Enter safe call"]; + 164 [label="Access variable R|/MyData.s|"]; + 165 [label="Exit safe call"]; + 166 [label="Enter safe call"]; + 167 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 168 [label="Exit safe call"]; + 169 [label="Const: Null(null)"]; + 170 [label="Equality operator !="]; + 171 [label="Exit when branch condition"]; } - 153 [label="Synthetic else branch"]; - 154 [label="Enter when branch result"]; + 172 [label="Synthetic else branch"]; + 173 [label="Enter when branch result"]; subgraph cluster_48 { color=blue - 155 [label="Enter block"]; - 156 [label="Jump: ^test_4 Unit"]; - 157 [label="Stub" style="filled" fillcolor=gray]; - 158 [label="Exit block" style="filled" fillcolor=gray]; + 174 [label="Enter block"]; + 175 [label="Access variable R|/q|"]; + 176 [label="Access variable R|/Q.data|"]; + 177 [label="Access variable R|/q|"]; + 178 [label="Access variable R|/Q.data|"]; + 179 [label="Access variable #"]; + 180 [label="Access variable R|/q|"]; + 181 [label="Access variable R|/Q.data|"]; + 182 [label="Access variable #"]; + 183 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; + 184 [label="Exit block"]; } - 159 [label="Exit when branch result" style="filled" fillcolor=gray]; - 160 [label="Exit when"]; + 185 [label="Exit when branch result"]; + 186 [label="Exit when"]; } - 161 [label="Access variable R|/x|"]; - 162 [label="Function call: R|/x|.R|/A.foo|()"]; - 163 [label="Exit block"]; + 187 [label="Exit block"]; } - 164 [label="Exit function test_4" style="filled" fillcolor=red]; + 188 [label="Exit function test_5" style="filled" fillcolor=red]; } - 142 -> {143}; - 143 -> {144}; - 144 -> {145}; - 145 -> {146}; - 146 -> {147 149}; - 147 -> {148}; - 148 -> {149}; - 149 -> {150}; - 150 -> {151}; - 151 -> {152}; - 152 -> {154 153}; - 153 -> {160}; - 154 -> {155}; 155 -> {156}; - 156 -> {164}; - 156 -> {157} [style=dotted]; - 157 -> {158} [style=dotted]; - 158 -> {159} [style=dotted]; - 159 -> {160} [style=dotted]; + 156 -> {157}; + 157 -> {158}; + 158 -> {159}; + 159 -> {160 162}; 160 -> {161}; 161 -> {162}; - 162 -> {163}; + 162 -> {163 165}; 163 -> {164}; - - subgraph cluster_49 { - color=red - 165 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_50 { - color=blue - 166 [label="Enter block"]; - subgraph cluster_51 { - color=blue - 167 [label="Enter when"]; - subgraph cluster_52 { - color=blue - 168 [label="Enter when branch condition "]; - 169 [label="Access variable R|/q|"]; - 170 [label="Enter safe call"]; - 171 [label="Access variable R|/Q.data|"]; - 172 [label="Exit safe call"]; - 173 [label="Enter safe call"]; - 174 [label="Access variable R|/MyData.s|"]; - 175 [label="Exit safe call"]; - 176 [label="Enter safe call"]; - 177 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 178 [label="Exit safe call"]; - 179 [label="Const: Null(null)"]; - 180 [label="Equality operator !="]; - 181 [label="Exit when branch condition"]; - } - 182 [label="Synthetic else branch"]; - 183 [label="Enter when branch result"]; - subgraph cluster_53 { - color=blue - 184 [label="Enter block"]; - 185 [label="Access variable R|/q|"]; - 186 [label="Access variable R|/Q.data|"]; - 187 [label="Access variable R|/q|"]; - 188 [label="Access variable R|/Q.data|"]; - 189 [label="Access variable #"]; - 190 [label="Access variable R|/q|"]; - 191 [label="Access variable R|/Q.data|"]; - 192 [label="Access variable #"]; - 193 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; - 194 [label="Exit block"]; - } - 195 [label="Exit when branch result"]; - 196 [label="Exit when"]; - } - 197 [label="Exit block"]; - } - 198 [label="Exit function test_5" style="filled" fillcolor=red]; - } - 165 -> {166}; + 164 -> {165}; + 165 -> {166 168}; 166 -> {167}; 167 -> {168}; 168 -> {169}; - 169 -> {170 172}; + 169 -> {170}; 170 -> {171}; - 171 -> {172}; - 172 -> {173 175}; + 171 -> {173 172}; + 172 -> {186}; 173 -> {174}; 174 -> {175}; - 175 -> {176 178}; + 175 -> {176}; 176 -> {177}; 177 -> {178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; - 181 -> {183 182}; - 182 -> {196}; + 181 -> {182}; + 182 -> {183}; 183 -> {184}; 184 -> {185}; 185 -> {186}; 186 -> {187}; 187 -> {188}; - 188 -> {189}; + + subgraph cluster_49 { + color=red + 189 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_50 { + color=blue + 190 [label="Enter block"]; + 191 [label="Access variable R|/q|"]; + 192 [label="Enter safe call"]; + 193 [label="Access variable R|/Q.data|"]; + 194 [label="Exit safe call"]; + 195 [label="Enter safe call"]; + 196 [label="Access variable R|/MyData.s|"]; + 197 [label="Exit safe call"]; + 198 [label="Enter safe call"]; + 199 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 200 [label="Exit safe call"]; + 201 [label="Exit lhs of ?:"]; + 202 [label="Enter rhs of ?:"]; + 203 [label="Jump: ^test_6 Unit"]; + 204 [label="Stub" style="filled" fillcolor=gray]; + 205 [label="Lhs of ?: is not null"]; + 206 [label="Exit ?:"]; + 207 [label="Access variable R|/q|"]; + 208 [label="Access variable R|/Q.data|"]; + 209 [label="Access variable R|/q|"]; + 210 [label="Access variable R|/Q.data|"]; + 211 [label="Access variable #"]; + 212 [label="Access variable R|/q|"]; + 213 [label="Access variable R|/Q.data|"]; + 214 [label="Access variable #"]; + 215 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; + 216 [label="Exit block"]; + } + 217 [label="Exit function test_6" style="filled" fillcolor=red]; + } 189 -> {190}; 190 -> {191}; - 191 -> {192}; + 191 -> {192 194}; 192 -> {193}; 193 -> {194}; - 194 -> {195}; + 194 -> {195 197}; 195 -> {196}; 196 -> {197}; - 197 -> {198}; - - subgraph cluster_54 { - color=red - 199 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_55 { - color=blue - 200 [label="Enter block"]; - 201 [label="Access variable R|/q|"]; - 202 [label="Enter safe call"]; - 203 [label="Access variable R|/Q.data|"]; - 204 [label="Exit safe call"]; - 205 [label="Enter safe call"]; - 206 [label="Access variable R|/MyData.s|"]; - 207 [label="Exit safe call"]; - 208 [label="Enter safe call"]; - 209 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 210 [label="Exit safe call"]; - 211 [label="Exit lhs of ?:"]; - 212 [label="Enter rhs of ?:"]; - 213 [label="Jump: ^test_6 Unit"]; - 214 [label="Stub" style="filled" fillcolor=gray]; - 215 [label="Lhs of ?: is not null"]; - 216 [label="Exit ?:"]; - 217 [label="Access variable R|/q|"]; - 218 [label="Access variable R|/Q.data|"]; - 219 [label="Access variable R|/q|"]; - 220 [label="Access variable R|/Q.data|"]; - 221 [label="Access variable #"]; - 222 [label="Access variable R|/q|"]; - 223 [label="Access variable R|/Q.data|"]; - 224 [label="Access variable #"]; - 225 [label="Function call: R|/q|.R|/Q.data|.#.R|kotlin/Int.inc|()"]; - 226 [label="Exit block"]; - } - 227 [label="Exit function test_6" style="filled" fillcolor=red]; - } + 197 -> {198 200}; + 198 -> {199}; 199 -> {200}; 200 -> {201}; - 201 -> {202 204}; + 201 -> {205 202}; 202 -> {203}; - 203 -> {204}; - 204 -> {205 207}; + 203 -> {217}; + 203 -> {204} [style=dotted]; + 204 -> {206} [style=dotted]; 205 -> {206}; 206 -> {207}; - 207 -> {208 210}; + 207 -> {208}; 208 -> {209}; 209 -> {210}; 210 -> {211}; - 211 -> {215 212}; + 211 -> {212}; 212 -> {213}; - 213 -> {227}; - 213 -> {214} [style=dotted]; - 214 -> {216} [style=dotted]; + 213 -> {214}; + 214 -> {215}; 215 -> {216}; 216 -> {217}; - 217 -> {218}; + + subgraph cluster_51 { + color=red + 218 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_52 { + color=blue + 219 [label="Enter block"]; + subgraph cluster_53 { + color=blue + 220 [label="Enter when"]; + subgraph cluster_54 { + color=blue + 221 [label="Enter when branch condition "]; + 222 [label="Access variable R|/q|"]; + 223 [label="Enter safe call"]; + 224 [label="Function call: $subj$.R|/Q.fdata|()"]; + 225 [label="Exit safe call"]; + 226 [label="Enter safe call"]; + 227 [label="Function call: $subj$.R|/MyData.fs|()"]; + 228 [label="Exit safe call"]; + 229 [label="Enter safe call"]; + 230 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 231 [label="Exit safe call"]; + 232 [label="Const: Null(null)"]; + 233 [label="Equality operator !="]; + 234 [label="Exit when branch condition"]; + } + 235 [label="Synthetic else branch"]; + 236 [label="Enter when branch result"]; + subgraph cluster_55 { + color=blue + 237 [label="Enter block"]; + 238 [label="Access variable R|/q|"]; + 239 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 240 [label="Access variable R|/q|"]; + 241 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 242 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 243 [label="Access variable R|/q|"]; + 244 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 245 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 246 [label="Function call: R|/q|.R|/Q.fdata|().#().R|kotlin/Int.inc|()"]; + 247 [label="Exit block"]; + } + 248 [label="Exit when branch result"]; + 249 [label="Exit when"]; + } + 250 [label="Exit block"]; + } + 251 [label="Exit function test_7" style="filled" fillcolor=red]; + } 218 -> {219}; 219 -> {220}; 220 -> {221}; 221 -> {222}; - 222 -> {223}; + 222 -> {223 225}; 223 -> {224}; 224 -> {225}; - 225 -> {226}; + 225 -> {226 228}; 226 -> {227}; - - subgraph cluster_56 { - color=red - 228 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_57 { - color=blue - 229 [label="Enter block"]; - subgraph cluster_58 { - color=blue - 230 [label="Enter when"]; - subgraph cluster_59 { - color=blue - 231 [label="Enter when branch condition "]; - 232 [label="Access variable R|/q|"]; - 233 [label="Enter safe call"]; - 234 [label="Function call: $subj$.R|/Q.fdata|()"]; - 235 [label="Exit safe call"]; - 236 [label="Enter safe call"]; - 237 [label="Function call: $subj$.R|/MyData.fs|()"]; - 238 [label="Exit safe call"]; - 239 [label="Enter safe call"]; - 240 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 241 [label="Exit safe call"]; - 242 [label="Const: Null(null)"]; - 243 [label="Equality operator !="]; - 244 [label="Exit when branch condition"]; - } - 245 [label="Synthetic else branch"]; - 246 [label="Enter when branch result"]; - subgraph cluster_60 { - color=blue - 247 [label="Enter block"]; - 248 [label="Access variable R|/q|"]; - 249 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 250 [label="Access variable R|/q|"]; - 251 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 252 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 253 [label="Access variable R|/q|"]; - 254 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 255 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 256 [label="Function call: R|/q|.R|/Q.fdata|().#().R|kotlin/Int.inc|()"]; - 257 [label="Exit block"]; - } - 258 [label="Exit when branch result"]; - 259 [label="Exit when"]; - } - 260 [label="Exit block"]; - } - 261 [label="Exit function test_7" style="filled" fillcolor=red]; - } - 228 -> {229}; + 227 -> {228}; + 228 -> {229 231}; 229 -> {230}; 230 -> {231}; 231 -> {232}; - 232 -> {233 235}; + 232 -> {233}; 233 -> {234}; - 234 -> {235}; - 235 -> {236 238}; + 234 -> {236 235}; + 235 -> {249}; 236 -> {237}; 237 -> {238}; - 238 -> {239 241}; + 238 -> {239}; 239 -> {240}; 240 -> {241}; 241 -> {242}; 242 -> {243}; 243 -> {244}; - 244 -> {246 245}; - 245 -> {259}; + 244 -> {245}; + 245 -> {246}; 246 -> {247}; 247 -> {248}; 248 -> {249}; 249 -> {250}; 250 -> {251}; - 251 -> {252}; + + subgraph cluster_56 { + color=red + 252 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_57 { + color=blue + 253 [label="Enter block"]; + subgraph cluster_58 { + color=blue + 254 [label="Enter when"]; + subgraph cluster_59 { + color=blue + 255 [label="Enter when branch condition "]; + 256 [label="Access variable R|/b|"]; + 257 [label="Const: Boolean(true)"]; + 258 [label="Equality operator =="]; + 259 [label="Exit when branch condition"]; + } + 260 [label="Synthetic else branch"]; + 261 [label="Enter when branch result"]; + subgraph cluster_60 { + color=blue + 262 [label="Enter block"]; + 263 [label="Access variable R|/b|"]; + 264 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 265 [label="Exit block"]; + } + 266 [label="Exit when branch result"]; + 267 [label="Exit when"]; + } + 268 [label="Exit block"]; + } + 269 [label="Exit function test_8" style="filled" fillcolor=red]; + } 252 -> {253}; 253 -> {254}; 254 -> {255}; @@ -720,42 +728,9 @@ digraph nullability_kt { 256 -> {257}; 257 -> {258}; 258 -> {259}; - 259 -> {260}; - 260 -> {261}; - - subgraph cluster_61 { - color=red - 262 [label="Enter function test_8" style="filled" fillcolor=red]; - subgraph cluster_62 { - color=blue - 263 [label="Enter block"]; - subgraph cluster_63 { - color=blue - 264 [label="Enter when"]; - subgraph cluster_64 { - color=blue - 265 [label="Enter when branch condition "]; - 266 [label="Access variable R|/b|"]; - 267 [label="Const: Boolean(true)"]; - 268 [label="Equality operator =="]; - 269 [label="Exit when branch condition"]; - } - 270 [label="Synthetic else branch"]; - 271 [label="Enter when branch result"]; - subgraph cluster_65 { - color=blue - 272 [label="Enter block"]; - 273 [label="Access variable R|/b|"]; - 274 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 275 [label="Exit block"]; - } - 276 [label="Exit when branch result"]; - 277 [label="Exit when"]; - } - 278 [label="Exit block"]; - } - 279 [label="Exit function test_8" style="filled" fillcolor=red]; - } + 259 -> {261 260}; + 260 -> {267}; + 261 -> {262}; 262 -> {263}; 263 -> {264}; 264 -> {265}; @@ -763,127 +738,127 @@ digraph nullability_kt { 266 -> {267}; 267 -> {268}; 268 -> {269}; - 269 -> {271 270}; - 270 -> {277}; + + subgraph cluster_61 { + color=red + 270 [label="Enter function test_9" style="filled" fillcolor=red]; + subgraph cluster_62 { + color=blue + 271 [label="Enter block"]; + subgraph cluster_63 { + color=blue + 272 [label="Enter when"]; + subgraph cluster_64 { + color=blue + 273 [label="Enter when branch condition "]; + 274 [label="Access variable R|/a|"]; + 275 [label="Access variable R|/b|"]; + 276 [label="Equality operator =="]; + 277 [label="Exit when branch condition"]; + } + 278 [label="Synthetic else branch"]; + 279 [label="Enter when branch result"]; + subgraph cluster_65 { + color=blue + 280 [label="Enter block"]; + 281 [label="Access variable R|/b|"]; + 282 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 283 [label="Exit block"]; + } + 284 [label="Exit when branch result"]; + 285 [label="Exit when"]; + } + 286 [label="Access variable R|/b|"]; + 287 [label="Function call: R|/b|.#()"]; + subgraph cluster_66 { + color=blue + 288 [label="Enter when"]; + subgraph cluster_67 { + color=blue + 289 [label="Enter when branch condition "]; + 290 [label="Access variable R|/a|"]; + 291 [label="Access variable R|/b|"]; + 292 [label="Equality operator ==="]; + 293 [label="Exit when branch condition"]; + } + 294 [label="Synthetic else branch"]; + 295 [label="Enter when branch result"]; + subgraph cluster_68 { + color=blue + 296 [label="Enter block"]; + 297 [label="Access variable R|/b|"]; + 298 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 299 [label="Exit block"]; + } + 300 [label="Exit when branch result"]; + 301 [label="Exit when"]; + } + 302 [label="Access variable R|/b|"]; + 303 [label="Function call: R|/b|.#()"]; + subgraph cluster_69 { + color=blue + 304 [label="Enter when"]; + subgraph cluster_70 { + color=blue + 305 [label="Enter when branch condition "]; + 306 [label="Access variable R|/b|"]; + 307 [label="Access variable R|/a|"]; + 308 [label="Equality operator =="]; + 309 [label="Exit when branch condition"]; + } + 310 [label="Synthetic else branch"]; + 311 [label="Enter when branch result"]; + subgraph cluster_71 { + color=blue + 312 [label="Enter block"]; + 313 [label="Access variable R|/b|"]; + 314 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 315 [label="Exit block"]; + } + 316 [label="Exit when branch result"]; + 317 [label="Exit when"]; + } + 318 [label="Access variable R|/b|"]; + 319 [label="Function call: R|/b|.#()"]; + subgraph cluster_72 { + color=blue + 320 [label="Enter when"]; + subgraph cluster_73 { + color=blue + 321 [label="Enter when branch condition "]; + 322 [label="Access variable R|/b|"]; + 323 [label="Access variable R|/a|"]; + 324 [label="Equality operator ==="]; + 325 [label="Exit when branch condition"]; + } + 326 [label="Synthetic else branch"]; + 327 [label="Enter when branch result"]; + subgraph cluster_74 { + color=blue + 328 [label="Enter block"]; + 329 [label="Access variable R|/b|"]; + 330 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 331 [label="Exit block"]; + } + 332 [label="Exit when branch result"]; + 333 [label="Exit when"]; + } + 334 [label="Access variable R|/b|"]; + 335 [label="Function call: R|/b|.#()"]; + 336 [label="Exit block"]; + } + 337 [label="Exit function test_9" style="filled" fillcolor=red]; + } + 270 -> {271}; 271 -> {272}; 272 -> {273}; 273 -> {274}; 274 -> {275}; 275 -> {276}; 276 -> {277}; - 277 -> {278}; - 278 -> {279}; - - subgraph cluster_66 { - color=red - 280 [label="Enter function test_9" style="filled" fillcolor=red]; - subgraph cluster_67 { - color=blue - 281 [label="Enter block"]; - subgraph cluster_68 { - color=blue - 282 [label="Enter when"]; - subgraph cluster_69 { - color=blue - 283 [label="Enter when branch condition "]; - 284 [label="Access variable R|/a|"]; - 285 [label="Access variable R|/b|"]; - 286 [label="Equality operator =="]; - 287 [label="Exit when branch condition"]; - } - 288 [label="Synthetic else branch"]; - 289 [label="Enter when branch result"]; - subgraph cluster_70 { - color=blue - 290 [label="Enter block"]; - 291 [label="Access variable R|/b|"]; - 292 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 293 [label="Exit block"]; - } - 294 [label="Exit when branch result"]; - 295 [label="Exit when"]; - } - 296 [label="Access variable R|/b|"]; - 297 [label="Function call: R|/b|.#()"]; - subgraph cluster_71 { - color=blue - 298 [label="Enter when"]; - subgraph cluster_72 { - color=blue - 299 [label="Enter when branch condition "]; - 300 [label="Access variable R|/a|"]; - 301 [label="Access variable R|/b|"]; - 302 [label="Equality operator ==="]; - 303 [label="Exit when branch condition"]; - } - 304 [label="Synthetic else branch"]; - 305 [label="Enter when branch result"]; - subgraph cluster_73 { - color=blue - 306 [label="Enter block"]; - 307 [label="Access variable R|/b|"]; - 308 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 309 [label="Exit block"]; - } - 310 [label="Exit when branch result"]; - 311 [label="Exit when"]; - } - 312 [label="Access variable R|/b|"]; - 313 [label="Function call: R|/b|.#()"]; - subgraph cluster_74 { - color=blue - 314 [label="Enter when"]; - subgraph cluster_75 { - color=blue - 315 [label="Enter when branch condition "]; - 316 [label="Access variable R|/b|"]; - 317 [label="Access variable R|/a|"]; - 318 [label="Equality operator =="]; - 319 [label="Exit when branch condition"]; - } - 320 [label="Synthetic else branch"]; - 321 [label="Enter when branch result"]; - subgraph cluster_76 { - color=blue - 322 [label="Enter block"]; - 323 [label="Access variable R|/b|"]; - 324 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 325 [label="Exit block"]; - } - 326 [label="Exit when branch result"]; - 327 [label="Exit when"]; - } - 328 [label="Access variable R|/b|"]; - 329 [label="Function call: R|/b|.#()"]; - subgraph cluster_77 { - color=blue - 330 [label="Enter when"]; - subgraph cluster_78 { - color=blue - 331 [label="Enter when branch condition "]; - 332 [label="Access variable R|/b|"]; - 333 [label="Access variable R|/a|"]; - 334 [label="Equality operator ==="]; - 335 [label="Exit when branch condition"]; - } - 336 [label="Synthetic else branch"]; - 337 [label="Enter when branch result"]; - subgraph cluster_79 { - color=blue - 338 [label="Enter block"]; - 339 [label="Access variable R|/b|"]; - 340 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 341 [label="Exit block"]; - } - 342 [label="Exit when branch result"]; - 343 [label="Exit when"]; - } - 344 [label="Access variable R|/b|"]; - 345 [label="Function call: R|/b|.#()"]; - 346 [label="Exit block"]; - } - 347 [label="Exit function test_9" style="filled" fillcolor=red]; - } + 277 -> {279 278}; + 278 -> {285}; + 279 -> {280}; 280 -> {281}; 281 -> {282}; 282 -> {283}; @@ -891,14 +866,14 @@ digraph nullability_kt { 284 -> {285}; 285 -> {286}; 286 -> {287}; - 287 -> {289 288}; - 288 -> {295}; + 287 -> {288}; + 288 -> {289}; 289 -> {290}; 290 -> {291}; 291 -> {292}; 292 -> {293}; - 293 -> {294}; - 294 -> {295}; + 293 -> {295 294}; + 294 -> {301}; 295 -> {296}; 296 -> {297}; 297 -> {298}; @@ -907,14 +882,14 @@ digraph nullability_kt { 300 -> {301}; 301 -> {302}; 302 -> {303}; - 303 -> {305 304}; - 304 -> {311}; + 303 -> {304}; + 304 -> {305}; 305 -> {306}; 306 -> {307}; 307 -> {308}; 308 -> {309}; - 309 -> {310}; - 310 -> {311}; + 309 -> {311 310}; + 310 -> {317}; 311 -> {312}; 312 -> {313}; 313 -> {314}; @@ -923,14 +898,14 @@ digraph nullability_kt { 316 -> {317}; 317 -> {318}; 318 -> {319}; - 319 -> {321 320}; - 320 -> {327}; + 319 -> {320}; + 320 -> {321}; 321 -> {322}; 322 -> {323}; 323 -> {324}; 324 -> {325}; - 325 -> {326}; - 326 -> {327}; + 325 -> {327 326}; + 326 -> {333}; 327 -> {328}; 328 -> {329}; 329 -> {330}; @@ -939,9 +914,119 @@ digraph nullability_kt { 332 -> {333}; 333 -> {334}; 334 -> {335}; - 335 -> {337 336}; - 336 -> {343}; - 337 -> {338}; + 335 -> {336}; + 336 -> {337}; + + subgraph cluster_75 { + color=red + 338 [label="Enter function test_10" style="filled" fillcolor=red]; + subgraph cluster_76 { + color=blue + 339 [label="Enter block"]; + subgraph cluster_77 { + color=blue + 340 [label="Enter when"]; + subgraph cluster_78 { + color=blue + 341 [label="Enter when branch condition "]; + 342 [label="Access variable R|/a|"]; + 343 [label="Access variable R|/b|"]; + 344 [label="Equality operator =="]; + 345 [label="Exit when branch condition"]; + } + 346 [label="Synthetic else branch"]; + 347 [label="Enter when branch result"]; + subgraph cluster_79 { + color=blue + 348 [label="Enter block"]; + 349 [label="Access variable R|/b|"]; + 350 [label="Function call: R|/b|.#()"]; + 351 [label="Exit block"]; + } + 352 [label="Exit when branch result"]; + 353 [label="Exit when"]; + } + 354 [label="Access variable R|/b|"]; + 355 [label="Function call: R|/b|.#()"]; + subgraph cluster_80 { + color=blue + 356 [label="Enter when"]; + subgraph cluster_81 { + color=blue + 357 [label="Enter when branch condition "]; + 358 [label="Access variable R|/a|"]; + 359 [label="Access variable R|/b|"]; + 360 [label="Equality operator ==="]; + 361 [label="Exit when branch condition"]; + } + 362 [label="Synthetic else branch"]; + 363 [label="Enter when branch result"]; + subgraph cluster_82 { + color=blue + 364 [label="Enter block"]; + 365 [label="Access variable R|/b|"]; + 366 [label="Function call: R|/b|.#()"]; + 367 [label="Exit block"]; + } + 368 [label="Exit when branch result"]; + 369 [label="Exit when"]; + } + 370 [label="Access variable R|/b|"]; + 371 [label="Function call: R|/b|.#()"]; + subgraph cluster_83 { + color=blue + 372 [label="Enter when"]; + subgraph cluster_84 { + color=blue + 373 [label="Enter when branch condition "]; + 374 [label="Access variable R|/b|"]; + 375 [label="Access variable R|/a|"]; + 376 [label="Equality operator =="]; + 377 [label="Exit when branch condition"]; + } + 378 [label="Synthetic else branch"]; + 379 [label="Enter when branch result"]; + subgraph cluster_85 { + color=blue + 380 [label="Enter block"]; + 381 [label="Access variable R|/b|"]; + 382 [label="Function call: R|/b|.#()"]; + 383 [label="Exit block"]; + } + 384 [label="Exit when branch result"]; + 385 [label="Exit when"]; + } + 386 [label="Access variable R|/b|"]; + 387 [label="Function call: R|/b|.#()"]; + subgraph cluster_86 { + color=blue + 388 [label="Enter when"]; + subgraph cluster_87 { + color=blue + 389 [label="Enter when branch condition "]; + 390 [label="Access variable R|/b|"]; + 391 [label="Access variable R|/a|"]; + 392 [label="Equality operator ==="]; + 393 [label="Exit when branch condition"]; + } + 394 [label="Synthetic else branch"]; + 395 [label="Enter when branch result"]; + subgraph cluster_88 { + color=blue + 396 [label="Enter block"]; + 397 [label="Access variable R|/b|"]; + 398 [label="Function call: R|/b|.#()"]; + 399 [label="Exit block"]; + } + 400 [label="Exit when branch result"]; + 401 [label="Exit when"]; + } + 402 [label="Access variable R|/b|"]; + 403 [label="Function call: R|/b|.#()"]; + 404 [label="Exit block"]; + } + 405 [label="Exit function test_10" style="filled" fillcolor=red]; + } 338 -> {339}; 339 -> {340}; 340 -> {341}; @@ -949,119 +1034,9 @@ digraph nullability_kt { 342 -> {343}; 343 -> {344}; 344 -> {345}; - 345 -> {346}; - 346 -> {347}; - - subgraph cluster_80 { - color=red - 348 [label="Enter function test_10" style="filled" fillcolor=red]; - subgraph cluster_81 { - color=blue - 349 [label="Enter block"]; - subgraph cluster_82 { - color=blue - 350 [label="Enter when"]; - subgraph cluster_83 { - color=blue - 351 [label="Enter when branch condition "]; - 352 [label="Access variable R|/a|"]; - 353 [label="Access variable R|/b|"]; - 354 [label="Equality operator =="]; - 355 [label="Exit when branch condition"]; - } - 356 [label="Synthetic else branch"]; - 357 [label="Enter when branch result"]; - subgraph cluster_84 { - color=blue - 358 [label="Enter block"]; - 359 [label="Access variable R|/b|"]; - 360 [label="Function call: R|/b|.#()"]; - 361 [label="Exit block"]; - } - 362 [label="Exit when branch result"]; - 363 [label="Exit when"]; - } - 364 [label="Access variable R|/b|"]; - 365 [label="Function call: R|/b|.#()"]; - subgraph cluster_85 { - color=blue - 366 [label="Enter when"]; - subgraph cluster_86 { - color=blue - 367 [label="Enter when branch condition "]; - 368 [label="Access variable R|/a|"]; - 369 [label="Access variable R|/b|"]; - 370 [label="Equality operator ==="]; - 371 [label="Exit when branch condition"]; - } - 372 [label="Synthetic else branch"]; - 373 [label="Enter when branch result"]; - subgraph cluster_87 { - color=blue - 374 [label="Enter block"]; - 375 [label="Access variable R|/b|"]; - 376 [label="Function call: R|/b|.#()"]; - 377 [label="Exit block"]; - } - 378 [label="Exit when branch result"]; - 379 [label="Exit when"]; - } - 380 [label="Access variable R|/b|"]; - 381 [label="Function call: R|/b|.#()"]; - subgraph cluster_88 { - color=blue - 382 [label="Enter when"]; - subgraph cluster_89 { - color=blue - 383 [label="Enter when branch condition "]; - 384 [label="Access variable R|/b|"]; - 385 [label="Access variable R|/a|"]; - 386 [label="Equality operator =="]; - 387 [label="Exit when branch condition"]; - } - 388 [label="Synthetic else branch"]; - 389 [label="Enter when branch result"]; - subgraph cluster_90 { - color=blue - 390 [label="Enter block"]; - 391 [label="Access variable R|/b|"]; - 392 [label="Function call: R|/b|.#()"]; - 393 [label="Exit block"]; - } - 394 [label="Exit when branch result"]; - 395 [label="Exit when"]; - } - 396 [label="Access variable R|/b|"]; - 397 [label="Function call: R|/b|.#()"]; - subgraph cluster_91 { - color=blue - 398 [label="Enter when"]; - subgraph cluster_92 { - color=blue - 399 [label="Enter when branch condition "]; - 400 [label="Access variable R|/b|"]; - 401 [label="Access variable R|/a|"]; - 402 [label="Equality operator ==="]; - 403 [label="Exit when branch condition"]; - } - 404 [label="Synthetic else branch"]; - 405 [label="Enter when branch result"]; - subgraph cluster_93 { - color=blue - 406 [label="Enter block"]; - 407 [label="Access variable R|/b|"]; - 408 [label="Function call: R|/b|.#()"]; - 409 [label="Exit block"]; - } - 410 [label="Exit when branch result"]; - 411 [label="Exit when"]; - } - 412 [label="Access variable R|/b|"]; - 413 [label="Function call: R|/b|.#()"]; - 414 [label="Exit block"]; - } - 415 [label="Exit function test_10" style="filled" fillcolor=red]; - } + 345 -> {347 346}; + 346 -> {353}; + 347 -> {348}; 348 -> {349}; 349 -> {350}; 350 -> {351}; @@ -1069,14 +1044,14 @@ digraph nullability_kt { 352 -> {353}; 353 -> {354}; 354 -> {355}; - 355 -> {357 356}; - 356 -> {363}; + 355 -> {356}; + 356 -> {357}; 357 -> {358}; 358 -> {359}; 359 -> {360}; 360 -> {361}; - 361 -> {362}; - 362 -> {363}; + 361 -> {363 362}; + 362 -> {369}; 363 -> {364}; 364 -> {365}; 365 -> {366}; @@ -1085,14 +1060,14 @@ digraph nullability_kt { 368 -> {369}; 369 -> {370}; 370 -> {371}; - 371 -> {373 372}; - 372 -> {379}; + 371 -> {372}; + 372 -> {373}; 373 -> {374}; 374 -> {375}; 375 -> {376}; 376 -> {377}; - 377 -> {378}; - 378 -> {379}; + 377 -> {379 378}; + 378 -> {385}; 379 -> {380}; 380 -> {381}; 381 -> {382}; @@ -1101,14 +1076,14 @@ digraph nullability_kt { 384 -> {385}; 385 -> {386}; 386 -> {387}; - 387 -> {389 388}; - 388 -> {395}; + 387 -> {388}; + 388 -> {389}; 389 -> {390}; 390 -> {391}; 391 -> {392}; 392 -> {393}; - 393 -> {394}; - 394 -> {395}; + 393 -> {395 394}; + 394 -> {401}; 395 -> {396}; 396 -> {397}; 397 -> {398}; @@ -1117,124 +1092,124 @@ digraph nullability_kt { 400 -> {401}; 401 -> {402}; 402 -> {403}; - 403 -> {405 404}; - 404 -> {411}; - 405 -> {406}; + 403 -> {404}; + 404 -> {405}; + + subgraph cluster_89 { + color=red + 406 [label="Enter function test_11" style="filled" fillcolor=red]; + subgraph cluster_90 { + color=blue + 407 [label="Enter block"]; + subgraph cluster_91 { + color=blue + 408 [label="Enter when"]; + subgraph cluster_92 { + color=blue + 409 [label="Enter when branch condition "]; + 410 [label="Access variable R|/q|"]; + 411 [label="Enter safe call"]; + 412 [label="Access variable R|/QImpl.data|"]; + 413 [label="Exit safe call"]; + 414 [label="Enter safe call"]; + 415 [label="Access variable R|/MyData.s|"]; + 416 [label="Exit safe call"]; + 417 [label="Enter safe call"]; + 418 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 419 [label="Exit safe call"]; + 420 [label="Const: Null(null)"]; + 421 [label="Equality operator !="]; + 422 [label="Exit when branch condition"]; + } + 423 [label="Synthetic else branch"]; + 424 [label="Enter when branch result"]; + subgraph cluster_93 { + color=blue + 425 [label="Enter block"]; + 426 [label="Access variable R|/q|"]; + 427 [label="Access variable R|/QImpl.data|"]; + 428 [label="Access variable R|/q|"]; + 429 [label="Access variable R|/QImpl.data|"]; + 430 [label="Access variable R|/MyData.s|"]; + 431 [label="Access variable R|/q|"]; + 432 [label="Access variable R|/QImpl.data|"]; + 433 [label="Access variable R|/MyData.s|"]; + 434 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 435 [label="Access variable R|/q2|"]; + 436 [label="Access variable R|/QImpl.data|"]; + 437 [label="Access variable R|/q2|"]; + 438 [label="Access variable R|/QImpl.data|"]; + 439 [label="Access variable #"]; + 440 [label="Access variable R|/q2|"]; + 441 [label="Access variable R|/QImpl.data|"]; + 442 [label="Access variable #"]; + 443 [label="Function call: R|/q2|.R|/QImpl.data|.#.R|kotlin/Int.inc|()"]; + subgraph cluster_94 { + color=blue + 444 [label="Enter when"]; + subgraph cluster_95 { + color=blue + 445 [label="Enter when branch condition "]; + 446 [label="Access variable R|/q2|"]; + 447 [label="Access variable R|/QImpl.data|"]; + 448 [label="Const: Null(null)"]; + 449 [label="Equality operator !="]; + 450 [label="Exit when branch condition"]; + } + 451 [label="Synthetic else branch"]; + 452 [label="Enter when branch result"]; + subgraph cluster_96 { + color=blue + 453 [label="Enter block"]; + 454 [label="Access variable R|/q2|"]; + 455 [label="Access variable R|/QImpl.data|"]; + 456 [label="Access variable R|/MyData.s|"]; + 457 [label="Access variable R|/q2|"]; + 458 [label="Access variable R|/QImpl.data|"]; + 459 [label="Access variable R|/MyData.s|"]; + 460 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 461 [label="Exit block"]; + } + 462 [label="Exit when branch result"]; + 463 [label="Exit when"]; + } + 464 [label="Exit block"]; + } + 465 [label="Exit when branch result"]; + 466 [label="Exit when"]; + } + 467 [label="Exit block"]; + } + 468 [label="Exit function test_11" style="filled" fillcolor=red]; + } 406 -> {407}; 407 -> {408}; 408 -> {409}; 409 -> {410}; - 410 -> {411}; + 410 -> {411 413}; 411 -> {412}; 412 -> {413}; - 413 -> {414}; + 413 -> {414 416}; 414 -> {415}; - - subgraph cluster_94 { - color=red - 416 [label="Enter function test_11" style="filled" fillcolor=red]; - subgraph cluster_95 { - color=blue - 417 [label="Enter block"]; - subgraph cluster_96 { - color=blue - 418 [label="Enter when"]; - subgraph cluster_97 { - color=blue - 419 [label="Enter when branch condition "]; - 420 [label="Access variable R|/q|"]; - 421 [label="Enter safe call"]; - 422 [label="Access variable R|/QImpl.data|"]; - 423 [label="Exit safe call"]; - 424 [label="Enter safe call"]; - 425 [label="Access variable R|/MyData.s|"]; - 426 [label="Exit safe call"]; - 427 [label="Enter safe call"]; - 428 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 429 [label="Exit safe call"]; - 430 [label="Const: Null(null)"]; - 431 [label="Equality operator !="]; - 432 [label="Exit when branch condition"]; - } - 433 [label="Synthetic else branch"]; - 434 [label="Enter when branch result"]; - subgraph cluster_98 { - color=blue - 435 [label="Enter block"]; - 436 [label="Access variable R|/q|"]; - 437 [label="Access variable R|/QImpl.data|"]; - 438 [label="Access variable R|/q|"]; - 439 [label="Access variable R|/QImpl.data|"]; - 440 [label="Access variable R|/MyData.s|"]; - 441 [label="Access variable R|/q|"]; - 442 [label="Access variable R|/QImpl.data|"]; - 443 [label="Access variable R|/MyData.s|"]; - 444 [label="Function call: R|/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 445 [label="Access variable R|/q2|"]; - 446 [label="Access variable R|/QImpl.data|"]; - 447 [label="Access variable R|/q2|"]; - 448 [label="Access variable R|/QImpl.data|"]; - 449 [label="Access variable #"]; - 450 [label="Access variable R|/q2|"]; - 451 [label="Access variable R|/QImpl.data|"]; - 452 [label="Access variable #"]; - 453 [label="Function call: R|/q2|.R|/QImpl.data|.#.R|kotlin/Int.inc|()"]; - subgraph cluster_99 { - color=blue - 454 [label="Enter when"]; - subgraph cluster_100 { - color=blue - 455 [label="Enter when branch condition "]; - 456 [label="Access variable R|/q2|"]; - 457 [label="Access variable R|/QImpl.data|"]; - 458 [label="Const: Null(null)"]; - 459 [label="Equality operator !="]; - 460 [label="Exit when branch condition"]; - } - 461 [label="Synthetic else branch"]; - 462 [label="Enter when branch result"]; - subgraph cluster_101 { - color=blue - 463 [label="Enter block"]; - 464 [label="Access variable R|/q2|"]; - 465 [label="Access variable R|/QImpl.data|"]; - 466 [label="Access variable R|/MyData.s|"]; - 467 [label="Access variable R|/q2|"]; - 468 [label="Access variable R|/QImpl.data|"]; - 469 [label="Access variable R|/MyData.s|"]; - 470 [label="Function call: R|/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 471 [label="Exit block"]; - } - 472 [label="Exit when branch result"]; - 473 [label="Exit when"]; - } - 474 [label="Exit block"]; - } - 475 [label="Exit when branch result"]; - 476 [label="Exit when"]; - } - 477 [label="Exit block"]; - } - 478 [label="Exit function test_11" style="filled" fillcolor=red]; - } - 416 -> {417}; + 415 -> {416}; + 416 -> {417 419}; 417 -> {418}; 418 -> {419}; 419 -> {420}; - 420 -> {421 423}; + 420 -> {421}; 421 -> {422}; - 422 -> {423}; - 423 -> {424 426}; + 422 -> {424 423}; + 423 -> {466}; 424 -> {425}; 425 -> {426}; - 426 -> {427 429}; + 426 -> {427}; 427 -> {428}; 428 -> {429}; 429 -> {430}; 430 -> {431}; 431 -> {432}; - 432 -> {434 433}; - 433 -> {476}; + 432 -> {433}; + 433 -> {434}; 434 -> {435}; 435 -> {436}; 436 -> {437}; @@ -1251,8 +1226,8 @@ digraph nullability_kt { 447 -> {448}; 448 -> {449}; 449 -> {450}; - 450 -> {451}; - 451 -> {452}; + 450 -> {452 451}; + 451 -> {463}; 452 -> {453}; 453 -> {454}; 454 -> {455}; @@ -1261,189 +1236,179 @@ digraph nullability_kt { 457 -> {458}; 458 -> {459}; 459 -> {460}; - 460 -> {462 461}; - 461 -> {473}; + 460 -> {461}; + 461 -> {462}; 462 -> {463}; 463 -> {464}; 464 -> {465}; 465 -> {466}; 466 -> {467}; 467 -> {468}; - 468 -> {469}; + + subgraph cluster_97 { + color=red + 469 [label="Enter function test_12" style="filled" fillcolor=red]; + subgraph cluster_98 { + color=blue + 470 [label="Enter block"]; + subgraph cluster_99 { + color=blue + 471 [label="Enter when"]; + subgraph cluster_100 { + color=blue + 472 [label="Enter when branch condition "]; + 473 [label="Access variable R|/q|"]; + 474 [label="Enter safe call"]; + 475 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 476 [label="Exit safe call"]; + 477 [label="Enter safe call"]; + 478 [label="Access variable R|/MyData.s|"]; + 479 [label="Exit safe call"]; + 480 [label="Enter safe call"]; + 481 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 482 [label="Exit safe call"]; + 483 [label="Const: Null(null)"]; + 484 [label="Equality operator !="]; + 485 [label="Exit when branch condition"]; + } + 486 [label="Synthetic else branch"]; + 487 [label="Enter when branch result"]; + subgraph cluster_101 { + color=blue + 488 [label="Enter block"]; + 489 [label="Access variable R|/q|"]; + 490 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 491 [label="Access variable R|/q|"]; + 492 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 493 [label="Access variable #"]; + 494 [label="Access variable R|/q|"]; + 495 [label="Access variable R|/QImplWithCustomGetter.data|"]; + 496 [label="Access variable #"]; + 497 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.#.R|kotlin/Int.inc|()"]; + 498 [label="Exit block"]; + } + 499 [label="Exit when branch result"]; + 500 [label="Exit when"]; + } + 501 [label="Exit block"]; + } + 502 [label="Exit function test_12" style="filled" fillcolor=red]; + } 469 -> {470}; 470 -> {471}; 471 -> {472}; 472 -> {473}; - 473 -> {474}; + 473 -> {474 476}; 474 -> {475}; 475 -> {476}; - 476 -> {477}; + 476 -> {477 479}; 477 -> {478}; - - subgraph cluster_102 { - color=red - 479 [label="Enter function test_12" style="filled" fillcolor=red]; - subgraph cluster_103 { - color=blue - 480 [label="Enter block"]; - subgraph cluster_104 { - color=blue - 481 [label="Enter when"]; - subgraph cluster_105 { - color=blue - 482 [label="Enter when branch condition "]; - 483 [label="Access variable R|/q|"]; - 484 [label="Enter safe call"]; - 485 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 486 [label="Exit safe call"]; - 487 [label="Enter safe call"]; - 488 [label="Access variable R|/MyData.s|"]; - 489 [label="Exit safe call"]; - 490 [label="Enter safe call"]; - 491 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 492 [label="Exit safe call"]; - 493 [label="Const: Null(null)"]; - 494 [label="Equality operator !="]; - 495 [label="Exit when branch condition"]; - } - 496 [label="Synthetic else branch"]; - 497 [label="Enter when branch result"]; - subgraph cluster_106 { - color=blue - 498 [label="Enter block"]; - 499 [label="Access variable R|/q|"]; - 500 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 501 [label="Access variable R|/q|"]; - 502 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 503 [label="Access variable #"]; - 504 [label="Access variable R|/q|"]; - 505 [label="Access variable R|/QImplWithCustomGetter.data|"]; - 506 [label="Access variable #"]; - 507 [label="Function call: R|/q|.R|/QImplWithCustomGetter.data|.#.R|kotlin/Int.inc|()"]; - 508 [label="Exit block"]; - } - 509 [label="Exit when branch result"]; - 510 [label="Exit when"]; - } - 511 [label="Exit block"]; - } - 512 [label="Exit function test_12" style="filled" fillcolor=red]; - } - 479 -> {480}; + 478 -> {479}; + 479 -> {480 482}; 480 -> {481}; 481 -> {482}; 482 -> {483}; - 483 -> {484 486}; + 483 -> {484}; 484 -> {485}; - 485 -> {486}; - 486 -> {487 489}; + 485 -> {487 486}; + 486 -> {500}; 487 -> {488}; 488 -> {489}; - 489 -> {490 492}; + 489 -> {490}; 490 -> {491}; 491 -> {492}; 492 -> {493}; 493 -> {494}; 494 -> {495}; - 495 -> {497 496}; - 496 -> {510}; + 495 -> {496}; + 496 -> {497}; 497 -> {498}; 498 -> {499}; 499 -> {500}; 500 -> {501}; 501 -> {502}; - 502 -> {503}; + + subgraph cluster_102 { + color=red + 503 [label="Enter function test_13" style="filled" fillcolor=red]; + subgraph cluster_103 { + color=blue + 504 [label="Enter block"]; + subgraph cluster_104 { + color=blue + 505 [label="Enter when"]; + subgraph cluster_105 { + color=blue + 506 [label="Enter when branch condition "]; + 507 [label="Access variable R|/q|"]; + 508 [label="Enter safe call"]; + 509 [label="Access variable R|/QImplMutable.data|"]; + 510 [label="Exit safe call"]; + 511 [label="Enter safe call"]; + 512 [label="Access variable R|/MyData.s|"]; + 513 [label="Exit safe call"]; + 514 [label="Enter safe call"]; + 515 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; + 516 [label="Exit safe call"]; + 517 [label="Const: Null(null)"]; + 518 [label="Equality operator !="]; + 519 [label="Exit when branch condition"]; + } + 520 [label="Synthetic else branch"]; + 521 [label="Enter when branch result"]; + subgraph cluster_106 { + color=blue + 522 [label="Enter block"]; + 523 [label="Access variable R|/q|"]; + 524 [label="Access variable R|/QImplMutable.data|"]; + 525 [label="Access variable R|/q|"]; + 526 [label="Access variable R|/QImplMutable.data|"]; + 527 [label="Access variable #"]; + 528 [label="Access variable R|/q|"]; + 529 [label="Access variable R|/QImplMutable.data|"]; + 530 [label="Access variable #"]; + 531 [label="Function call: R|/q|.R|/QImplMutable.data|.#.R|kotlin/Int.inc|()"]; + 532 [label="Exit block"]; + } + 533 [label="Exit when branch result"]; + 534 [label="Exit when"]; + } + 535 [label="Exit block"]; + } + 536 [label="Exit function test_13" style="filled" fillcolor=red]; + } 503 -> {504}; 504 -> {505}; 505 -> {506}; 506 -> {507}; - 507 -> {508}; + 507 -> {508 510}; 508 -> {509}; 509 -> {510}; - 510 -> {511}; + 510 -> {511 513}; 511 -> {512}; - - subgraph cluster_107 { - color=red - 513 [label="Enter function test_13" style="filled" fillcolor=red]; - subgraph cluster_108 { - color=blue - 514 [label="Enter block"]; - subgraph cluster_109 { - color=blue - 515 [label="Enter when"]; - subgraph cluster_110 { - color=blue - 516 [label="Enter when branch condition "]; - 517 [label="Access variable R|/q|"]; - 518 [label="Enter safe call"]; - 519 [label="Access variable R|/QImplMutable.data|"]; - 520 [label="Exit safe call"]; - 521 [label="Enter safe call"]; - 522 [label="Access variable R|/MyData.s|"]; - 523 [label="Exit safe call"]; - 524 [label="Enter safe call"]; - 525 [label="Function call: $subj$.R|kotlin/Int.inc|()"]; - 526 [label="Exit safe call"]; - 527 [label="Const: Null(null)"]; - 528 [label="Equality operator !="]; - 529 [label="Exit when branch condition"]; - } - 530 [label="Synthetic else branch"]; - 531 [label="Enter when branch result"]; - subgraph cluster_111 { - color=blue - 532 [label="Enter block"]; - 533 [label="Access variable R|/q|"]; - 534 [label="Access variable R|/QImplMutable.data|"]; - 535 [label="Access variable R|/q|"]; - 536 [label="Access variable R|/QImplMutable.data|"]; - 537 [label="Access variable #"]; - 538 [label="Access variable R|/q|"]; - 539 [label="Access variable R|/QImplMutable.data|"]; - 540 [label="Access variable #"]; - 541 [label="Function call: R|/q|.R|/QImplMutable.data|.#.R|kotlin/Int.inc|()"]; - 542 [label="Exit block"]; - } - 543 [label="Exit when branch result"]; - 544 [label="Exit when"]; - } - 545 [label="Exit block"]; - } - 546 [label="Exit function test_13" style="filled" fillcolor=red]; - } - 513 -> {514}; + 512 -> {513}; + 513 -> {514 516}; 514 -> {515}; 515 -> {516}; 516 -> {517}; - 517 -> {518 520}; + 517 -> {518}; 518 -> {519}; - 519 -> {520}; - 520 -> {521 523}; + 519 -> {521 520}; + 520 -> {534}; 521 -> {522}; 522 -> {523}; - 523 -> {524 526}; + 523 -> {524}; 524 -> {525}; 525 -> {526}; 526 -> {527}; 527 -> {528}; 528 -> {529}; - 529 -> {531 530}; - 530 -> {544}; + 529 -> {530}; + 530 -> {531}; 531 -> {532}; 532 -> {533}; 533 -> {534}; 534 -> {535}; 535 -> {536}; - 536 -> {537}; - 537 -> {538}; - 538 -> {539}; - 539 -> {540}; - 540 -> {541}; - 541 -> {542}; - 542 -> {543}; - 543 -> {544}; - 544 -> {545}; - 545 -> {546}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/thisOfExtensionProperty.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/thisOfExtensionProperty.dot index 77d87f454a8..b55a5d47c51 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/thisOfExtensionProperty.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/receivers/thisOfExtensionProperty.dot @@ -20,82 +20,75 @@ digraph thisOfExtensionProperty_kt { subgraph cluster_2 { color=red 4 [label="Enter function getter" style="filled" fillcolor=red]; - 5 [label="Exit function getter" style="filled" fillcolor=red]; + subgraph cluster_3 { + color=blue + 5 [label="Enter block"]; + subgraph cluster_4 { + color=blue + 6 [label="Enter &&"]; + 7 [label="Access variable this@R|/check_1|"]; + 8 [label="Type operator: (this@R|/check_1| is R|B|)"]; + 9 [label="Exit left part of &&"]; + 10 [label="Enter right part of &&"]; + 11 [label="Access variable R|/B.b|"]; + 12 [label="Exit &&"]; + } + 13 [label="Jump: ^ (this@R|/check_1| is R|B|) && this@R|/check_1|.R|/B.b|"]; + 14 [label="Stub" style="filled" fillcolor=gray]; + 15 [label="Exit block" style="filled" fillcolor=gray]; + } + 16 [label="Exit function getter" style="filled" fillcolor=red]; } 4 -> {5}; - - subgraph cluster_3 { - color=red - 6 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 7 [label="Enter block"]; - subgraph cluster_5 { - color=blue - 8 [label="Enter &&"]; - 9 [label="Access variable this@R|/check_1|"]; - 10 [label="Type operator: (this@R|/check_1| is R|B|)"]; - 11 [label="Exit left part of &&"]; - 12 [label="Enter right part of &&"]; - 13 [label="Access variable R|/B.b|"]; - 14 [label="Exit &&"]; - } - 15 [label="Jump: ^ (this@R|/check_1| is R|B|) && this@R|/check_1|.R|/B.b|"]; - 16 [label="Stub" style="filled" fillcolor=gray]; - 17 [label="Exit block" style="filled" fillcolor=gray]; - } - 18 [label="Exit function getter" style="filled" fillcolor=red]; - } + 5 -> {6}; 6 -> {7}; 7 -> {8}; 8 -> {9}; - 9 -> {10}; + 9 -> {12 10}; 10 -> {11}; - 11 -> {14 12}; + 11 -> {12}; 12 -> {13}; - 13 -> {14}; - 14 -> {15}; - 15 -> {18}; + 13 -> {16}; + 13 -> {14} [style=dotted]; + 14 -> {15} [style=dotted]; 15 -> {16} [style=dotted]; - 16 -> {17} [style=dotted]; - 17 -> {18} [style=dotted]; - subgraph cluster_6 { + subgraph cluster_5 { color=red - 19 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_7 { + 17 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 20 [label="Enter block"]; - subgraph cluster_8 { + 18 [label="Enter block"]; + subgraph cluster_7 { color=blue - 21 [label="Enter &&"]; - 22 [label="Access variable this@R|/check_2|"]; - 23 [label="Type operator: (this@R|/check_2| is R|B|)"]; - 24 [label="Exit left part of &&"]; - 25 [label="Enter right part of &&"]; - 26 [label="Access variable this@R|/check_2|"]; - 27 [label="Access variable R|/B.b|"]; - 28 [label="Exit &&"]; + 19 [label="Enter &&"]; + 20 [label="Access variable this@R|/check_2|"]; + 21 [label="Type operator: (this@R|/check_2| is R|B|)"]; + 22 [label="Exit left part of &&"]; + 23 [label="Enter right part of &&"]; + 24 [label="Access variable this@R|/check_2|"]; + 25 [label="Access variable R|/B.b|"]; + 26 [label="Exit &&"]; } - 29 [label="Jump: ^ (this@R|/check_2| is R|B|) && this@R|/check_2|.R|/B.b|"]; - 30 [label="Stub" style="filled" fillcolor=gray]; - 31 [label="Exit block" style="filled" fillcolor=gray]; + 27 [label="Jump: ^ (this@R|/check_2| is R|B|) && this@R|/check_2|.R|/B.b|"]; + 28 [label="Stub" style="filled" fillcolor=gray]; + 29 [label="Exit block" style="filled" fillcolor=gray]; } - 32 [label="Exit function getter" style="filled" fillcolor=red]; + 30 [label="Exit function getter" style="filled" fillcolor=red]; } + 17 -> {18}; + 18 -> {19}; 19 -> {20}; 20 -> {21}; 21 -> {22}; - 22 -> {23}; + 22 -> {26 23}; 23 -> {24}; - 24 -> {28 25}; + 24 -> {25}; 25 -> {26}; 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {32}; + 27 -> {30}; + 27 -> {28} [style=dotted]; + 28 -> {29} [style=dotted]; 29 -> {30} [style=dotted]; - 30 -> {31} [style=dotted]; - 31 -> {32} [style=dotted]; } 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 6f1f1540ed2..a98c894cff3 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/safeCalls/assignSafeCall.dot @@ -11,8 +11,8 @@ digraph assignSafeCall_kt { } 0 -> {1} [color=green]; 1 -> {2} [style=dotted]; - 1 -> {15} [color=green]; - 1 -> {15} [style=dashed]; + 1 -> {13} [color=green]; + 1 -> {13} [style=dashed]; subgraph cluster_1 { color=red @@ -46,76 +46,71 @@ digraph assignSafeCall_kt { subgraph cluster_4 { color=red - 13 [label="Enter function getter" style="filled" fillcolor=red]; - 14 [label="Exit function getter" style="filled" fillcolor=red]; + 13 [label="Enter property" style="filled" fillcolor=red]; + 14 [label="Const: Int(1)"]; + 15 [label="Exit property" style="filled" fillcolor=red]; } 13 -> {14}; + 14 -> {15}; + 15 -> {2} [color=green]; subgraph cluster_5 { color=red - 15 [label="Enter property" style="filled" fillcolor=red]; - 16 [label="Const: Int(1)"]; - 17 [label="Exit property" style="filled" fillcolor=red]; - } - 15 -> {16}; - 16 -> {17}; - 17 -> {2} [color=green]; - - subgraph cluster_6 { - color=red - 18 [label="Enter function bar" style="filled" fillcolor=red]; - subgraph cluster_7 { + 16 [label="Enter function bar" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 19 [label="Enter block"]; - 20 [label="Exit block"]; + 17 [label="Enter block"]; + 18 [label="Exit block"]; } - 21 [label="Exit function bar" style="filled" fillcolor=red]; + 19 [label="Exit function bar" style="filled" fillcolor=red]; } + 16 -> {17}; + 17 -> {18}; 18 -> {19}; - 19 -> {20}; - 20 -> {21}; - subgraph cluster_8 { + subgraph cluster_7 { color=red - 22 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_9 { + 20 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/a|"]; - 25 [label="Enter safe call"]; - 26 [label="Access variable R|/A.x|"]; - 27 [label="Exit safe call"]; - 28 [label="Variable declaration: lval x: R|kotlin/Int?|"]; - subgraph cluster_10 { + 21 [label="Enter block"]; + 22 [label="Access variable R|/a|"]; + 23 [label="Enter safe call"]; + 24 [label="Access variable R|/A.x|"]; + 25 [label="Exit safe call"]; + 26 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + subgraph cluster_9 { color=blue - 29 [label="Enter when"]; + 27 [label="Enter when"]; + subgraph cluster_10 { + color=blue + 28 [label="Enter when branch condition "]; + 29 [label="Access variable R|/x|"]; + 30 [label="Const: Null(null)"]; + 31 [label="Equality operator !="]; + 32 [label="Exit when branch condition"]; + } + 33 [label="Synthetic else branch"]; + 34 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 30 [label="Enter when branch condition "]; - 31 [label="Access variable R|/x|"]; - 32 [label="Const: Null(null)"]; - 33 [label="Equality operator !="]; - 34 [label="Exit when branch condition"]; + 35 [label="Enter block"]; + 36 [label="Access variable R|/a|"]; + 37 [label="Function call: R|/a|.R|/A.bar|()"]; + 38 [label="Exit block"]; } - 35 [label="Synthetic else branch"]; - 36 [label="Enter when branch result"]; - subgraph cluster_12 { - color=blue - 37 [label="Enter block"]; - 38 [label="Access variable R|/a|"]; - 39 [label="Function call: R|/a|.R|/A.bar|()"]; - 40 [label="Exit block"]; - } - 41 [label="Exit when branch result"]; - 42 [label="Exit when"]; + 39 [label="Exit when branch result"]; + 40 [label="Exit when"]; } - 43 [label="Exit block"]; + 41 [label="Exit block"]; } - 44 [label="Exit function test_1" style="filled" fillcolor=red]; + 42 [label="Exit function test_1" style="filled" fillcolor=red]; } - 22 -> {23}; + 20 -> {21}; + 21 -> {22}; + 22 -> {23 25}; 23 -> {24}; - 24 -> {25 27}; + 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; @@ -123,60 +118,60 @@ digraph assignSafeCall_kt { 29 -> {30}; 30 -> {31}; 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {36 35}; - 35 -> {42}; + 32 -> {34 33}; + 33 -> {40}; + 34 -> {35}; + 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; - 43 -> {44}; - subgraph cluster_13 { + subgraph cluster_12 { color=red - 45 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_14 { + 43 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_13 { color=blue - 46 [label="Enter block"]; - 47 [label="Access variable R|/a|"]; - 48 [label="Enter safe call"]; - 49 [label="Function call: $subj$.R|/A.foo|()"]; - 50 [label="Exit safe call"]; - 51 [label="Variable declaration: lval x: R|kotlin/Int?|"]; - subgraph cluster_15 { + 44 [label="Enter block"]; + 45 [label="Access variable R|/a|"]; + 46 [label="Enter safe call"]; + 47 [label="Function call: $subj$.R|/A.foo|()"]; + 48 [label="Exit safe call"]; + 49 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + subgraph cluster_14 { color=blue - 52 [label="Enter when"]; + 50 [label="Enter when"]; + subgraph cluster_15 { + color=blue + 51 [label="Enter when branch condition "]; + 52 [label="Access variable R|/x|"]; + 53 [label="Const: Null(null)"]; + 54 [label="Equality operator !="]; + 55 [label="Exit when branch condition"]; + } + 56 [label="Synthetic else branch"]; + 57 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 53 [label="Enter when branch condition "]; - 54 [label="Access variable R|/x|"]; - 55 [label="Const: Null(null)"]; - 56 [label="Equality operator !="]; - 57 [label="Exit when branch condition"]; + 58 [label="Enter block"]; + 59 [label="Access variable R|/a|"]; + 60 [label="Function call: R|/a|.R|/A.bar|()"]; + 61 [label="Exit block"]; } - 58 [label="Synthetic else branch"]; - 59 [label="Enter when branch result"]; - subgraph cluster_17 { - color=blue - 60 [label="Enter block"]; - 61 [label="Access variable R|/a|"]; - 62 [label="Function call: R|/a|.R|/A.bar|()"]; - 63 [label="Exit block"]; - } - 64 [label="Exit when branch result"]; - 65 [label="Exit when"]; + 62 [label="Exit when branch result"]; + 63 [label="Exit when"]; } - 66 [label="Exit block"]; + 64 [label="Exit block"]; } - 67 [label="Exit function test_2" style="filled" fillcolor=red]; + 65 [label="Exit function test_2" style="filled" fillcolor=red]; } - 45 -> {46}; + 43 -> {44}; + 44 -> {45}; + 45 -> {46 48}; 46 -> {47}; - 47 -> {48 50}; + 47 -> {48}; 48 -> {49}; 49 -> {50}; 50 -> {51}; @@ -184,249 +179,240 @@ digraph assignSafeCall_kt { 52 -> {53}; 53 -> {54}; 54 -> {55}; - 55 -> {56}; - 56 -> {57}; - 57 -> {59 58}; - 58 -> {65}; + 55 -> {57 56}; + 56 -> {63}; + 57 -> {58}; + 58 -> {59}; 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; - 65 -> {66}; - 66 -> {67}; - subgraph cluster_18 { + subgraph cluster_17 { color=red - 68 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_19 { + 66 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_18 { color=blue - 69 [label="Enter block"]; - 70 [label="Access variable R|/x|"]; - 71 [label="Type operator: (R|/x| as? R|A|)"]; - 72 [label="Exit lhs of ?:"]; - 73 [label="Enter rhs of ?:"]; - 74 [label="Jump: ^test_3 Unit"]; - 75 [label="Stub" style="filled" fillcolor=gray]; - 76 [label="Lhs of ?: is not null"]; - 77 [label="Exit ?:"]; - 78 [label="Variable declaration: lval a: R|A|"]; - 79 [label="Access variable R|/a|"]; - 80 [label="Function call: R|/a|.R|/A.foo|()"]; - 81 [label="Access variable R|/x|"]; - 82 [label="Function call: R|/x|.R|/A.foo|()"]; - 83 [label="Exit block"]; + 67 [label="Enter block"]; + 68 [label="Access variable R|/x|"]; + 69 [label="Type operator: (R|/x| as? R|A|)"]; + 70 [label="Exit lhs of ?:"]; + 71 [label="Enter rhs of ?:"]; + 72 [label="Jump: ^test_3 Unit"]; + 73 [label="Stub" style="filled" fillcolor=gray]; + 74 [label="Lhs of ?: is not null"]; + 75 [label="Exit ?:"]; + 76 [label="Variable declaration: lval a: R|A|"]; + 77 [label="Access variable R|/a|"]; + 78 [label="Function call: R|/a|.R|/A.foo|()"]; + 79 [label="Access variable R|/x|"]; + 80 [label="Function call: R|/x|.R|/A.foo|()"]; + 81 [label="Exit block"]; } - 84 [label="Exit function test_3" style="filled" fillcolor=red]; + 82 [label="Exit function test_3" style="filled" fillcolor=red]; } + 66 -> {67}; + 67 -> {68}; 68 -> {69}; 69 -> {70}; - 70 -> {71}; + 70 -> {74 71}; 71 -> {72}; - 72 -> {76 73}; - 73 -> {74}; - 74 -> {84}; - 74 -> {75} [style=dotted]; - 75 -> {77} [style=dotted]; + 72 -> {82}; + 72 -> {73} [style=dotted]; + 73 -> {75} [style=dotted]; + 74 -> {75}; + 75 -> {76}; 76 -> {77}; 77 -> {78}; 78 -> {79}; 79 -> {80}; 80 -> {81}; 81 -> {82}; - 82 -> {83}; - 83 -> {84}; + + subgraph cluster_19 { + color=red + 83 [label="Enter class B" style="filled" fillcolor=red]; + 84 [label="Exit class B" style="filled" fillcolor=red]; + } + 83 -> {84} [color=green]; subgraph cluster_20 { color=red - 85 [label="Enter class B" style="filled" fillcolor=red]; - 86 [label="Exit class B" style="filled" fillcolor=red]; + 85 [label="Enter function foo" style="filled" fillcolor=red]; + 86 [label="Exit function foo" style="filled" fillcolor=red]; } - 85 -> {86} [color=green]; + 85 -> {86}; subgraph cluster_21 { color=red - 87 [label="Enter function foo" style="filled" fillcolor=red]; - 88 [label="Exit function foo" style="filled" fillcolor=red]; + 87 [label="Enter function bar" style="filled" fillcolor=red]; + 88 [label="Exit function bar" style="filled" fillcolor=red]; } 87 -> {88}; subgraph cluster_22 { color=red - 89 [label="Enter function getter" style="filled" fillcolor=red]; - 90 [label="Exit function getter" style="filled" fillcolor=red]; + 89 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_23 { + color=blue + 90 [label="Enter block"]; + 91 [label="Access variable R|/a|"]; + 92 [label="Enter safe call"]; + 93 [label="Access variable R|/B.x|"]; + 94 [label="Exit safe call"]; + 95 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + subgraph cluster_24 { + color=blue + 96 [label="Enter when"]; + subgraph cluster_25 { + color=blue + 97 [label="Enter when branch condition "]; + 98 [label="Access variable R|/x|"]; + 99 [label="Const: Null(null)"]; + 100 [label="Equality operator !="]; + 101 [label="Exit when branch condition"]; + } + 102 [label="Synthetic else branch"]; + 103 [label="Enter when branch result"]; + subgraph cluster_26 { + color=blue + 104 [label="Enter block"]; + 105 [label="Access variable R|/a|"]; + 106 [label="Function call: R|/a|.R|/B.bar|()"]; + 107 [label="Exit block"]; + } + 108 [label="Exit when branch result"]; + 109 [label="Exit when"]; + } + 110 [label="Exit block"]; + } + 111 [label="Exit function test_1" style="filled" fillcolor=red]; } 89 -> {90}; - - subgraph cluster_23 { - color=red - 91 [label="Enter function bar" style="filled" fillcolor=red]; - 92 [label="Exit function bar" style="filled" fillcolor=red]; - } - 91 -> {92}; - - subgraph cluster_24 { - color=red - 93 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_25 { - color=blue - 94 [label="Enter block"]; - 95 [label="Access variable R|/a|"]; - 96 [label="Enter safe call"]; - 97 [label="Access variable R|/B.x|"]; - 98 [label="Exit safe call"]; - 99 [label="Variable declaration: lval x: R|kotlin/Int?|"]; - subgraph cluster_26 { - color=blue - 100 [label="Enter when"]; - subgraph cluster_27 { - color=blue - 101 [label="Enter when branch condition "]; - 102 [label="Access variable R|/x|"]; - 103 [label="Const: Null(null)"]; - 104 [label="Equality operator !="]; - 105 [label="Exit when branch condition"]; - } - 106 [label="Synthetic else branch"]; - 107 [label="Enter when branch result"]; - subgraph cluster_28 { - color=blue - 108 [label="Enter block"]; - 109 [label="Access variable R|/a|"]; - 110 [label="Function call: R|/a|.R|/B.bar|()"]; - 111 [label="Exit block"]; - } - 112 [label="Exit when branch result"]; - 113 [label="Exit when"]; - } - 114 [label="Exit block"]; - } - 115 [label="Exit function test_1" style="filled" fillcolor=red]; - } + 90 -> {91}; + 91 -> {92 94}; + 92 -> {93}; 93 -> {94}; 94 -> {95}; - 95 -> {96 98}; + 95 -> {96}; 96 -> {97}; 97 -> {98}; 98 -> {99}; 99 -> {100}; 100 -> {101}; - 101 -> {102}; - 102 -> {103}; + 101 -> {103 102}; + 102 -> {109}; 103 -> {104}; 104 -> {105}; - 105 -> {107 106}; - 106 -> {113}; + 105 -> {106}; + 106 -> {107}; 107 -> {108}; 108 -> {109}; 109 -> {110}; 110 -> {111}; - 111 -> {112}; + + subgraph cluster_27 { + color=red + 112 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_28 { + color=blue + 113 [label="Enter block"]; + 114 [label="Access variable R|/a|"]; + 115 [label="Enter safe call"]; + 116 [label="Function call: $subj$.R|/B.foo|()"]; + 117 [label="Exit safe call"]; + 118 [label="Variable declaration: lval x: R|kotlin/Int?|"]; + subgraph cluster_29 { + color=blue + 119 [label="Enter when"]; + subgraph cluster_30 { + color=blue + 120 [label="Enter when branch condition "]; + 121 [label="Access variable R|/x|"]; + 122 [label="Const: Null(null)"]; + 123 [label="Equality operator !="]; + 124 [label="Exit when branch condition"]; + } + 125 [label="Synthetic else branch"]; + 126 [label="Enter when branch result"]; + subgraph cluster_31 { + color=blue + 127 [label="Enter block"]; + 128 [label="Access variable R|/a|"]; + 129 [label="Function call: R|/a|.R|/B.bar|()"]; + 130 [label="Exit block"]; + } + 131 [label="Exit when branch result"]; + 132 [label="Exit when"]; + } + 133 [label="Exit block"]; + } + 134 [label="Exit function test_2" style="filled" fillcolor=red]; + } 112 -> {113}; 113 -> {114}; - 114 -> {115}; - - subgraph cluster_29 { - color=red - 116 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_30 { - color=blue - 117 [label="Enter block"]; - 118 [label="Access variable R|/a|"]; - 119 [label="Enter safe call"]; - 120 [label="Function call: $subj$.R|/B.foo|()"]; - 121 [label="Exit safe call"]; - 122 [label="Variable declaration: lval x: R|kotlin/Int?|"]; - subgraph cluster_31 { - color=blue - 123 [label="Enter when"]; - subgraph cluster_32 { - color=blue - 124 [label="Enter when branch condition "]; - 125 [label="Access variable R|/x|"]; - 126 [label="Const: Null(null)"]; - 127 [label="Equality operator !="]; - 128 [label="Exit when branch condition"]; - } - 129 [label="Synthetic else branch"]; - 130 [label="Enter when branch result"]; - subgraph cluster_33 { - color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/a|"]; - 133 [label="Function call: R|/a|.R|/B.bar|()"]; - 134 [label="Exit block"]; - } - 135 [label="Exit when branch result"]; - 136 [label="Exit when"]; - } - 137 [label="Exit block"]; - } - 138 [label="Exit function test_2" style="filled" fillcolor=red]; - } + 114 -> {115 117}; + 115 -> {116}; 116 -> {117}; 117 -> {118}; - 118 -> {119 121}; + 118 -> {119}; 119 -> {120}; 120 -> {121}; 121 -> {122}; 122 -> {123}; 123 -> {124}; - 124 -> {125}; - 125 -> {126}; + 124 -> {126 125}; + 125 -> {132}; 126 -> {127}; 127 -> {128}; - 128 -> {130 129}; - 129 -> {136}; + 128 -> {129}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; 132 -> {133}; 133 -> {134}; - 134 -> {135}; + + subgraph cluster_32 { + color=red + 135 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_33 { + color=blue + 136 [label="Enter block"]; + 137 [label="Access variable R|/x|"]; + 138 [label="Type operator: (R|/x| as? R|B|)"]; + 139 [label="Exit lhs of ?:"]; + 140 [label="Enter rhs of ?:"]; + 141 [label="Jump: ^test_3 Unit"]; + 142 [label="Stub" style="filled" fillcolor=gray]; + 143 [label="Lhs of ?: is not null"]; + 144 [label="Exit ?:"]; + 145 [label="Variable declaration: lval a: R|B|"]; + 146 [label="Access variable R|/a|"]; + 147 [label="Function call: R|/a|.R|/B.foo|()"]; + 148 [label="Access variable R|/x|"]; + 149 [label="Function call: R|/x|.R|/B.foo|()"]; + 150 [label="Exit block"]; + } + 151 [label="Exit function test_3" style="filled" fillcolor=red]; + } 135 -> {136}; 136 -> {137}; 137 -> {138}; - - subgraph cluster_34 { - color=red - 139 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_35 { - color=blue - 140 [label="Enter block"]; - 141 [label="Access variable R|/x|"]; - 142 [label="Type operator: (R|/x| as? R|B|)"]; - 143 [label="Exit lhs of ?:"]; - 144 [label="Enter rhs of ?:"]; - 145 [label="Jump: ^test_3 Unit"]; - 146 [label="Stub" style="filled" fillcolor=gray]; - 147 [label="Lhs of ?: is not null"]; - 148 [label="Exit ?:"]; - 149 [label="Variable declaration: lval a: R|B|"]; - 150 [label="Access variable R|/a|"]; - 151 [label="Function call: R|/a|.R|/B.foo|()"]; - 152 [label="Access variable R|/x|"]; - 153 [label="Function call: R|/x|.R|/B.foo|()"]; - 154 [label="Exit block"]; - } - 155 [label="Exit function test_3" style="filled" fillcolor=red]; - } - 139 -> {140}; + 138 -> {139}; + 139 -> {143 140}; 140 -> {141}; - 141 -> {142}; - 142 -> {143}; - 143 -> {147 144}; + 141 -> {151}; + 141 -> {142} [style=dotted]; + 142 -> {144} [style=dotted]; + 143 -> {144}; 144 -> {145}; - 145 -> {155}; - 145 -> {146} [style=dotted]; - 146 -> {148} [style=dotted]; + 145 -> {146}; + 146 -> {147}; 147 -> {148}; 148 -> {149}; 149 -> {150}; 150 -> {151}; - 151 -> {152}; - 152 -> {153}; - 153 -> {154}; - 154 -> {155}; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot index 8426e250ced..1c0fb82f8d4 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartCastInInit.dot @@ -55,8 +55,8 @@ digraph smartCastInInit_kt { } 14 -> {15} [color=green]; 15 -> {16} [style=dotted]; - 15 -> {22} [color=green]; - 15 -> {22} [style=dashed]; + 15 -> {20} [color=green]; + 15 -> {20} [style=dashed]; subgraph cluster_6 { color=red @@ -69,32 +69,25 @@ digraph smartCastInInit_kt { subgraph cluster_7 { color=red - 20 [label="Enter function getter" style="filled" fillcolor=red]; - 21 [label="Exit function getter" style="filled" fillcolor=red]; + 20 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_8 { + color=blue + 21 [label="Enter block"]; + 22 [label="Function call: R|/s|()"]; + 23 [label="Assignment: R|/Main.x|"]; + 24 [label="Access variable R|/Main.x|"]; + 25 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"]; + 26 [label="Exit block"]; + } + 27 [label="Exit init block" style="filled" fillcolor=red]; } 20 -> {21}; - - subgraph cluster_8 { - color=red - 22 [label="Enter init block" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 23 [label="Enter block"]; - 24 [label="Function call: R|/s|()"]; - 25 [label="Assignment: R|/Main.x|"]; - 26 [label="Access variable R|/Main.x|"]; - 27 [label="Function call: this@R|/Main|.R|/Main.x|.R|/S.foo|()"]; - 28 [label="Exit block"]; - } - 29 [label="Exit init block" style="filled" fillcolor=red]; - } + 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; 25 -> {26}; 26 -> {27}; - 27 -> {28}; - 28 -> {29}; - 29 -> {16} [color=green]; + 27 -> {16} [color=green]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot index a27549dd671..d658facab69 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/smartcastToNothing.dot @@ -123,11 +123,11 @@ digraph smartcastToNothing_kt { } 38 -> {39} [color=green]; 39 -> {40} [style=dotted]; - 39 -> {47} [color=green]; - 39 -> {47} [style=dashed]; + 39 -> {45} [color=green]; + 39 -> {45} [style=dashed]; 40 -> {41} [style=dotted]; - 40 -> {52} [color=green]; - 40 -> {52} [style=dashed]; + 40 -> {48} [color=green]; + 40 -> {48} [style=dashed]; subgraph cluster_11 { color=red @@ -140,124 +140,114 @@ digraph smartcastToNothing_kt { subgraph cluster_12 { color=red - 45 [label="Enter function getter" style="filled" fillcolor=red]; - 46 [label="Exit function getter" style="filled" fillcolor=red]; + 45 [label="Enter property" style="filled" fillcolor=red]; + 46 [label="Const: Int(1)"]; + 47 [label="Exit property" style="filled" fillcolor=red]; } 45 -> {46}; + 46 -> {47}; + 47 -> {40} [color=green]; subgraph cluster_13 { color=red - 47 [label="Enter property" style="filled" fillcolor=red]; - 48 [label="Const: Int(1)"]; - 49 [label="Exit property" style="filled" fillcolor=red]; + 48 [label="Enter property" style="filled" fillcolor=red]; + 49 [label="Const: Boolean(true)"]; + 50 [label="Exit property" style="filled" fillcolor=red]; } - 47 -> {48}; 48 -> {49}; - 49 -> {40} [color=green]; + 49 -> {50}; + 50 -> {41} [color=green]; subgraph cluster_14 { color=red - 50 [label="Enter function getter" style="filled" fillcolor=red]; - 51 [label="Exit function getter" style="filled" fillcolor=red]; - } - 50 -> {51}; - - subgraph cluster_15 { - color=red - 52 [label="Enter property" style="filled" fillcolor=red]; - 53 [label="Const: Boolean(true)"]; - 54 [label="Exit property" style="filled" fillcolor=red]; + 51 [label="Enter function test_0" style="filled" fillcolor=red]; + subgraph cluster_15 { + color=blue + 52 [label="Enter block"]; + 53 [label="Const: Null(null)"]; + 54 [label="Variable declaration: lvar s: R|A?|"]; + 55 [label="Access variable R|/results|"]; + 56 [label="Function call: R|/results|.R|SubstitutionOverride|>|()"]; + 57 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; + subgraph cluster_16 { + color=blue + 58 [label="Enter while loop"]; + subgraph cluster_17 { + color=blue + 59 [label="Enter loop condition"]; + 60 [label="Access variable R|/|"]; + 61 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; + 62 [label="Exit loop condition"]; + } + subgraph cluster_18 { + color=blue + 63 [label="Enter loop block"]; + subgraph cluster_19 { + color=blue + 64 [label="Enter block"]; + 65 [label="Access variable R|/|"]; + 66 [label="Function call: R|/|.R|SubstitutionOverride|()"]; + 67 [label="Stub" style="filled" fillcolor=gray]; + 68 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; + 69 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 70 [label="Stub" style="filled" fillcolor=gray]; + 71 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; + subgraph cluster_20 { + color=blue + 72 [label="Enter when" style="filled" fillcolor=gray]; + subgraph cluster_21 { + color=blue + 73 [label="Enter when branch condition " style="filled" fillcolor=gray]; + 74 [label="Access variable R|/result|" style="filled" fillcolor=gray]; + 75 [label="Stub" style="filled" fillcolor=gray]; + 76 [label="Access variable #" style="filled" fillcolor=gray]; + 77 [label="Exit when branch condition" style="filled" fillcolor=gray]; + } + 78 [label="Synthetic else branch" style="filled" fillcolor=gray]; + 79 [label="Enter when branch result" style="filled" fillcolor=gray]; + subgraph cluster_22 { + color=blue + 80 [label="Enter block" style="filled" fillcolor=gray]; + 81 [label="Jump: break@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray]; + 82 [label="Stub" style="filled" fillcolor=gray]; + 83 [label="Exit block" style="filled" fillcolor=gray]; + } + 84 [label="Exit when branch result" style="filled" fillcolor=gray]; + 85 [label="Exit when" style="filled" fillcolor=gray]; + } + 86 [label="Exit block" style="filled" fillcolor=gray]; + } + 87 [label="Exit loop block" style="filled" fillcolor=gray]; + } + 88 [label="Exit whileloop"]; + } + 89 [label="Access variable R|/s|"]; + 90 [label="Enter safe call"]; + 91 [label="Postponed enter to lambda"]; + subgraph cluster_23 { + color=blue + 98 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_24 { + color=blue + 99 [label="Enter block"]; + 100 [label="Access variable R|/it|"]; + 101 [label="Access variable R|/A.a|"]; + 102 [label="Exit block"]; + } + 103 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 92 [label="Call arguments union" style="filled" fillcolor=yellow]; + 93 [label="Postponed exit from lambda"]; + 94 [label="Function call: $subj$.R|kotlin/let|(...)"]; + 95 [label="Exit safe call"]; + 96 [label="Exit block"]; + } + 97 [label="Exit function test_0" style="filled" fillcolor=red]; } + 51 -> {52}; 52 -> {53}; 53 -> {54}; - 54 -> {41} [color=green]; - - subgraph cluster_16 { - color=red - 55 [label="Enter function test_0" style="filled" fillcolor=red]; - subgraph cluster_17 { - color=blue - 56 [label="Enter block"]; - 57 [label="Const: Null(null)"]; - 58 [label="Variable declaration: lvar s: R|A?|"]; - 59 [label="Access variable R|/results|"]; - 60 [label="Function call: R|/results|.R|SubstitutionOverride|>|()"]; - 61 [label="Variable declaration: lval : R|kotlin/collections/Iterator|"]; - subgraph cluster_18 { - color=blue - 62 [label="Enter while loop"]; - subgraph cluster_19 { - color=blue - 63 [label="Enter loop condition"]; - 64 [label="Access variable R|/|"]; - 65 [label="Function call: R|/|.R|kotlin/collections/Iterator.hasNext|()"]; - 66 [label="Exit loop condition"]; - } - subgraph cluster_20 { - color=blue - 67 [label="Enter loop block"]; - subgraph cluster_21 { - color=blue - 68 [label="Enter block"]; - 69 [label="Access variable R|/|"]; - 70 [label="Function call: R|/|.R|SubstitutionOverride|()"]; - 71 [label="Stub" style="filled" fillcolor=gray]; - 72 [label="Variable declaration: lval result: R|kotlin/Nothing|" style="filled" fillcolor=gray]; - 73 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 74 [label="Stub" style="filled" fillcolor=gray]; - 75 [label="Assignment: R|/s|" style="filled" fillcolor=gray]; - subgraph cluster_22 { - color=blue - 76 [label="Enter when" style="filled" fillcolor=gray]; - subgraph cluster_23 { - color=blue - 77 [label="Enter when branch condition " style="filled" fillcolor=gray]; - 78 [label="Access variable R|/result|" style="filled" fillcolor=gray]; - 79 [label="Stub" style="filled" fillcolor=gray]; - 80 [label="Access variable #" style="filled" fillcolor=gray]; - 81 [label="Exit when branch condition" style="filled" fillcolor=gray]; - } - 82 [label="Synthetic else branch" style="filled" fillcolor=gray]; - 83 [label="Enter when branch result" style="filled" fillcolor=gray]; - subgraph cluster_24 { - color=blue - 84 [label="Enter block" style="filled" fillcolor=gray]; - 85 [label="Jump: break@@@[R|/|.R|kotlin/collections/Iterator.hasNext|()] " style="filled" fillcolor=gray]; - 86 [label="Stub" style="filled" fillcolor=gray]; - 87 [label="Exit block" style="filled" fillcolor=gray]; - } - 88 [label="Exit when branch result" style="filled" fillcolor=gray]; - 89 [label="Exit when" style="filled" fillcolor=gray]; - } - 90 [label="Exit block" style="filled" fillcolor=gray]; - } - 91 [label="Exit loop block" style="filled" fillcolor=gray]; - } - 92 [label="Exit whileloop"]; - } - 93 [label="Access variable R|/s|"]; - 94 [label="Enter safe call"]; - 95 [label="Postponed enter to lambda"]; - subgraph cluster_25 { - color=blue - 102 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_26 { - color=blue - 103 [label="Enter block"]; - 104 [label="Access variable R|/it|"]; - 105 [label="Access variable R|/A.a|"]; - 106 [label="Exit block"]; - } - 107 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; - } - 96 [label="Call arguments union" style="filled" fillcolor=yellow]; - 97 [label="Postponed exit from lambda"]; - 98 [label="Function call: $subj$.R|kotlin/let|(...)"]; - 99 [label="Exit safe call"]; - 100 [label="Exit block"]; - } - 101 [label="Exit function test_0" style="filled" fillcolor=red]; - } + 54 -> {55}; 55 -> {56}; 56 -> {57}; 57 -> {58}; @@ -265,56 +255,52 @@ digraph smartcastToNothing_kt { 59 -> {60}; 60 -> {61}; 61 -> {62}; - 62 -> {63}; + 62 -> {88 63}; 63 -> {64}; 64 -> {65}; 65 -> {66}; - 66 -> {92 67}; - 67 -> {68}; - 68 -> {69}; - 69 -> {70}; - 70 -> {101} [label=onUncaughtException]; + 66 -> {97} [label=onUncaughtException]; + 66 -> {67} [style=dotted]; + 67 -> {68} [style=dotted]; + 68 -> {69} [style=dotted]; + 69 -> {70} [style=dotted]; + 69 -> {97} [style=dotted] [label=onUncaughtException]; 70 -> {71} [style=dotted]; 71 -> {72} [style=dotted]; 72 -> {73} [style=dotted]; 73 -> {74} [style=dotted]; - 73 -> {101} [style=dotted] [label=onUncaughtException]; 74 -> {75} [style=dotted]; + 74 -> {97} [style=dotted] [label=onUncaughtException]; 75 -> {76} [style=dotted]; 76 -> {77} [style=dotted]; - 77 -> {78} [style=dotted]; - 78 -> {79} [style=dotted]; - 78 -> {101} [style=dotted] [label=onUncaughtException]; + 77 -> {79 78} [style=dotted]; + 78 -> {85} [style=dotted]; 79 -> {80} [style=dotted]; 80 -> {81} [style=dotted]; - 81 -> {83 82} [style=dotted]; - 82 -> {89} [style=dotted]; + 81 -> {88 82} [style=dotted]; + 82 -> {83} [style=dotted]; 83 -> {84} [style=dotted]; 84 -> {85} [style=dotted]; - 85 -> {92 86} [style=dotted]; + 85 -> {86} [style=dotted]; 86 -> {87} [style=dotted]; - 87 -> {88} [style=dotted]; - 88 -> {89} [style=dotted]; - 89 -> {90} [style=dotted]; - 90 -> {91} [style=dotted]; - 91 -> {63} [color=green style=dotted]; - 92 -> {93}; - 93 -> {94 99}; + 87 -> {59} [color=green style=dotted]; + 88 -> {89}; + 89 -> {90 95}; + 90 -> {91}; + 91 -> {98}; + 91 -> {93} [color=red]; + 91 -> {98} [style=dashed]; + 92 -> {94} [color=red]; + 93 -> {94} [color=green]; 94 -> {95}; - 95 -> {102}; - 95 -> {97} [color=red]; - 95 -> {102} [style=dashed]; - 96 -> {98} [color=red]; - 97 -> {98} [color=green]; + 95 -> {96}; + 96 -> {97}; 98 -> {99}; 99 -> {100}; 100 -> {101}; + 101 -> {102}; 102 -> {103}; - 103 -> {104}; - 104 -> {105}; - 105 -> {106}; - 106 -> {107}; - 107 -> {96} [color=red]; - 107 -> {97} [color=green]; + 103 -> {92} [color=red]; + 103 -> {93} [color=green]; } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot index a654a2366e5..9f3cdb8caa6 100644 --- a/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/stability/overridenOpenVal.dot @@ -11,8 +11,8 @@ digraph overridenOpenVal_kt { } 0 -> {1} [color=green]; 1 -> {2} [style=dotted]; - 1 -> {8} [color=green]; - 1 -> {8} [style=dashed]; + 1 -> {6} [color=green]; + 1 -> {6} [style=dashed]; subgraph cluster_1 { color=red @@ -25,131 +25,126 @@ digraph overridenOpenVal_kt { subgraph cluster_2 { color=red - 6 [label="Enter function getter" style="filled" fillcolor=red]; - 7 [label="Exit function getter" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Access variable R|/x|"]; + 8 [label="Exit property" style="filled" fillcolor=red]; } 6 -> {7}; + 7 -> {8}; + 8 -> {2} [color=green]; subgraph cluster_3 { color=red - 8 [label="Enter property" style="filled" fillcolor=red]; - 9 [label="Access variable R|/x|"]; - 10 [label="Exit property" style="filled" fillcolor=red]; + 9 [label="Enter class B" style="filled" fillcolor=red]; + 10 [label="Exit class B" style="filled" fillcolor=red]; } - 8 -> {9}; - 9 -> {10}; - 10 -> {2} [color=green]; + 9 -> {10} [color=green]; subgraph cluster_4 { color=red - 11 [label="Enter class B" style="filled" fillcolor=red]; - 12 [label="Exit class B" style="filled" fillcolor=red]; + 11 [label="Enter function " style="filled" fillcolor=red]; + 12 [label="Access variable R|/x|"]; + 13 [label="Delegated constructor call: super(...)"]; + 14 [label="Exit function " style="filled" fillcolor=red]; } - 11 -> {12} [color=green]; + 11 -> {12}; + 12 -> {13}; + 13 -> {14}; subgraph cluster_5 { color=red - 13 [label="Enter function " style="filled" fillcolor=red]; - 14 [label="Access variable R|/x|"]; - 15 [label="Delegated constructor call: super(...)"]; - 16 [label="Exit function " style="filled" fillcolor=red]; - } - 13 -> {14}; - 14 -> {15}; - 15 -> {16}; - - subgraph cluster_6 { - color=red - 17 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_7 { + 15 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_6 { color=blue - 18 [label="Enter block"]; - subgraph cluster_8 { + 16 [label="Enter block"]; + subgraph cluster_7 { color=blue - 19 [label="Enter when"]; + 17 [label="Enter when"]; + subgraph cluster_8 { + color=blue + 18 [label="Enter when branch condition "]; + 19 [label="Access variable R|/A.x|"]; + 20 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; + 21 [label="Exit when branch condition"]; + } + 22 [label="Synthetic else branch"]; + 23 [label="Enter when branch result"]; subgraph cluster_9 { color=blue - 20 [label="Enter when branch condition "]; - 21 [label="Access variable R|/A.x|"]; - 22 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"]; - 23 [label="Exit when branch condition"]; + 24 [label="Enter block"]; + 25 [label="Access variable R|/A.x|"]; + 26 [label="Access variable R|kotlin/String.length|"]; + 27 [label="Exit block"]; } - 24 [label="Synthetic else branch"]; - 25 [label="Enter when branch result"]; - subgraph cluster_10 { - color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/A.x|"]; - 28 [label="Access variable R|kotlin/String.length|"]; - 29 [label="Exit block"]; - } - 30 [label="Exit when branch result"]; - 31 [label="Exit when"]; + 28 [label="Exit when branch result"]; + 29 [label="Exit when"]; } - 32 [label="Exit block"]; + 30 [label="Exit block"]; } - 33 [label="Exit function test_1" style="filled" fillcolor=red]; + 31 [label="Exit function test_1" style="filled" fillcolor=red]; } + 15 -> {16}; + 16 -> {17}; 17 -> {18}; 18 -> {19}; 19 -> {20}; 20 -> {21}; - 21 -> {22}; - 22 -> {23}; - 23 -> {25 24}; - 24 -> {31}; + 21 -> {23 22}; + 22 -> {29}; + 23 -> {24}; + 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {33}; - subgraph cluster_11 { + subgraph cluster_10 { color=red - 34 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_12 { + 32 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_11 { color=blue - 35 [label="Enter block"]; - subgraph cluster_13 { + 33 [label="Enter block"]; + subgraph cluster_12 { color=blue - 36 [label="Enter when"]; + 34 [label="Enter when"]; + subgraph cluster_13 { + color=blue + 35 [label="Enter when branch condition "]; + 36 [label="Access variable R|/b|"]; + 37 [label="Access variable R|/A.x|"]; + 38 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; + 39 [label="Exit when branch condition"]; + } + 40 [label="Synthetic else branch"]; + 41 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 37 [label="Enter when branch condition "]; - 38 [label="Access variable R|/b|"]; - 39 [label="Access variable R|/A.x|"]; - 40 [label="Type operator: (R|/b|.R|/A.x| is R|kotlin/String|)"]; - 41 [label="Exit when branch condition"]; + 42 [label="Enter block"]; + 43 [label="Access variable R|/b|"]; + 44 [label="Access variable R|/A.x|"]; + 45 [label="Access variable R|kotlin/String.length|"]; + 46 [label="Exit block"]; } - 42 [label="Synthetic else branch"]; - 43 [label="Enter when branch result"]; - subgraph cluster_15 { - color=blue - 44 [label="Enter block"]; - 45 [label="Access variable R|/b|"]; - 46 [label="Access variable R|/A.x|"]; - 47 [label="Access variable R|kotlin/String.length|"]; - 48 [label="Exit block"]; - } - 49 [label="Exit when branch result"]; - 50 [label="Exit when"]; + 47 [label="Exit when branch result"]; + 48 [label="Exit when"]; } - 51 [label="Exit block"]; + 49 [label="Exit block"]; } - 52 [label="Exit function test_2" style="filled" fillcolor=red]; + 50 [label="Exit function test_2" style="filled" fillcolor=red]; } + 32 -> {33}; + 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; 38 -> {39}; - 39 -> {40}; - 40 -> {41}; - 41 -> {43 42}; - 42 -> {50}; + 39 -> {41 40}; + 40 -> {48}; + 41 -> {42}; + 42 -> {43}; 43 -> {44}; 44 -> {45}; 45 -> {46}; @@ -157,7 +152,5 @@ digraph overridenOpenVal_kt { 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51}; - 51 -> {52}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot index 430d833bf8e..2fcac12ad47 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 @@ -27,10 +27,10 @@ digraph inAnonymousObject_kt { } 0 -> {1}; 1 -> {2}; - 1 -> {13 18 16 21 23 29} [color=red]; + 1 -> {13 16 19 25} [color=red]; 2 -> {3}; - 2 -> {13 29 9} [color=green]; - 2 -> {13 29 9} [style=dashed]; + 2 -> {13 25 9} [color=green]; + 2 -> {13 25 9} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {6}; @@ -38,11 +38,11 @@ digraph inAnonymousObject_kt { 7 -> {8}; 9 -> {10} [color=green]; 10 -> {11} [style=dotted]; - 10 -> {18} [color=green]; - 10 -> {18} [style=dashed]; + 10 -> {16} [color=green]; + 10 -> {16} [style=dashed]; 11 -> {12} [style=dotted]; - 11 -> {23} [color=green]; - 11 -> {23} [style=dashed]; + 11 -> {19} [color=green]; + 11 -> {19} [style=dashed]; subgraph cluster_3 { color=red @@ -55,61 +55,47 @@ digraph inAnonymousObject_kt { subgraph cluster_4 { color=red - 16 [label="Enter function getter" style="filled" fillcolor=red]; - 17 [label="Exit function getter" style="filled" fillcolor=red]; + 16 [label="Enter property" style="filled" fillcolor=red]; + 17 [label="Access variable R|/a|"]; + 18 [label="Exit property" style="filled" fillcolor=red]; } 16 -> {17}; + 17 -> {18}; + 18 -> {11} [color=green]; subgraph cluster_5 { color=red - 18 [label="Enter property" style="filled" fillcolor=red]; - 19 [label="Access variable R|/a|"]; - 20 [label="Exit property" style="filled" fillcolor=red]; + 19 [label="Enter init block" style="filled" fillcolor=red]; + subgraph cluster_6 { + color=blue + 20 [label="Enter block"]; + 21 [label="Access variable R|/b|"]; + 22 [label="Assignment: R|/.leaked|"]; + 23 [label="Exit block"]; + } + 24 [label="Exit init block" style="filled" fillcolor=red]; } - 18 -> {19}; 19 -> {20}; - 20 -> {11} [color=green]; - - subgraph cluster_6 { - color=red - 21 [label="Enter function getter" style="filled" fillcolor=red]; - 22 [label="Exit function getter" style="filled" fillcolor=red]; - } + 20 -> {21}; 21 -> {22}; + 22 -> {23}; + 23 -> {24}; + 24 -> {12} [color=green]; subgraph cluster_7 { color=red - 23 [label="Enter init block" style="filled" fillcolor=red]; + 25 [label="Enter function run" style="filled" fillcolor=red]; subgraph cluster_8 { color=blue - 24 [label="Enter block"]; - 25 [label="Access variable R|/b|"]; - 26 [label="Assignment: R|/.leaked|"]; - 27 [label="Exit block"]; + 26 [label="Enter block"]; + 27 [label="Function call: R|/c|.R|SubstitutionOverride|()"]; + 28 [label="Exit block"]; } - 28 [label="Exit init block" style="filled" fillcolor=red]; + 29 [label="Exit function run" style="filled" fillcolor=red]; } - 23 -> {24}; - 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; - 28 -> {12} [color=green]; - - subgraph cluster_9 { - color=red - 29 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_10 { - color=blue - 30 [label="Enter block"]; - 31 [label="Function call: R|/c|.R|SubstitutionOverride|()"]; - 32 [label="Exit block"]; - } - 33 [label="Exit function run" style="filled" fillcolor=red]; - } - 29 -> {30}; - 30 -> {31}; - 31 -> {32}; - 32 -> {33}; + 28 -> {29}; } 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 4f0ab306c9d..49e19f74b96 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 @@ -26,97 +26,83 @@ digraph inLocalClass_kt { } 0 -> {1}; 1 -> {2}; - 1 -> {14 12 17 19 25 31} [color=red]; + 1 -> {12 15 21 27} [color=red]; 2 -> {3}; - 2 -> {19 31 8} [color=green]; - 2 -> {19 31 8} [style=dashed]; + 2 -> {15 27 8} [color=green]; + 2 -> {15 27 8} [style=dashed]; 3 -> {4}; 4 -> {5}; 5 -> {6}; 6 -> {7}; 8 -> {9} [color=green]; 9 -> {10} [style=dotted]; - 9 -> {14} [color=green]; - 9 -> {14} [style=dashed]; + 9 -> {12} [color=green]; + 9 -> {12} [style=dashed]; 10 -> {11} [style=dotted]; - 10 -> {25} [color=green]; - 10 -> {25} [style=dashed]; + 10 -> {21} [color=green]; + 10 -> {21} [style=dashed]; subgraph cluster_3 { color=red - 12 [label="Enter function getter" style="filled" fillcolor=red]; - 13 [label="Exit function getter" style="filled" fillcolor=red]; + 12 [label="Enter property" style="filled" fillcolor=red]; + 13 [label="Access variable R|/a|"]; + 14 [label="Exit property" style="filled" fillcolor=red]; } 12 -> {13}; + 13 -> {14}; + 14 -> {10} [color=green]; subgraph cluster_4 { color=red - 14 [label="Enter property" style="filled" fillcolor=red]; - 15 [label="Access variable R|/a|"]; - 16 [label="Exit property" style="filled" fillcolor=red]; + 15 [label="Enter function " style="filled" fillcolor=red]; + 16 [label="Delegated constructor call: super()"]; + subgraph cluster_5 { + color=blue + 17 [label="Enter block"]; + 18 [label="Function call: R|/b|.R|SubstitutionOverride|()"]; + 19 [label="Exit block"]; + } + 20 [label="Exit function " style="filled" fillcolor=red]; } - 14 -> {15}; 15 -> {16}; - 16 -> {10} [color=green]; - - subgraph cluster_5 { - color=red - 17 [label="Enter function getter" style="filled" fillcolor=red]; - 18 [label="Exit function getter" style="filled" fillcolor=red]; - } + 16 -> {17}; 17 -> {18}; + 18 -> {19}; + 19 -> {20}; subgraph cluster_6 { color=red - 19 [label="Enter function " style="filled" fillcolor=red]; - 20 [label="Delegated constructor call: super()"]; + 21 [label="Enter init block" style="filled" fillcolor=red]; subgraph cluster_7 { color=blue - 21 [label="Enter block"]; - 22 [label="Function call: R|/b|.R|SubstitutionOverride|()"]; - 23 [label="Exit block"]; + 22 [label="Enter block"]; + 23 [label="Access variable R|/c|"]; + 24 [label="Assignment: R|/LocalClass.leaked|"]; + 25 [label="Exit block"]; } - 24 [label="Exit function " style="filled" fillcolor=red]; + 26 [label="Exit init block" style="filled" fillcolor=red]; } - 19 -> {20}; - 20 -> {21}; 21 -> {22}; 22 -> {23}; 23 -> {24}; + 24 -> {25}; + 25 -> {26}; + 26 -> {11} [color=green]; subgraph cluster_8 { color=red - 25 [label="Enter init block" style="filled" fillcolor=red]; + 27 [label="Enter function run" style="filled" fillcolor=red]; subgraph cluster_9 { color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/c|"]; - 28 [label="Assignment: R|/LocalClass.leaked|"]; - 29 [label="Exit block"]; + 28 [label="Enter block"]; + 29 [label="Function call: R|/d|.R|SubstitutionOverride|()"]; + 30 [label="Exit block"]; } - 30 [label="Exit init block" style="filled" fillcolor=red]; + 31 [label="Exit function run" style="filled" fillcolor=red]; } - 25 -> {26}; - 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; - 30 -> {11} [color=green]; - - subgraph cluster_10 { - color=red - 31 [label="Enter function run" style="filled" fillcolor=red]; - subgraph cluster_11 { - color=blue - 32 [label="Enter block"]; - 33 [label="Function call: R|/d|.R|SubstitutionOverride|()"]; - 34 [label="Exit block"]; - } - 35 [label="Exit function run" style="filled" fillcolor=red]; - } - 31 -> {32}; - 32 -> {33}; - 33 -> {34}; - 34 -> {35}; + 30 -> {31}; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot index 6b4523b8d19..9c326e494bb 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/inference/plusAssignWithLambdaInRhs.dot @@ -58,8 +58,8 @@ digraph plusAssignWithLambdaInRhs_kt { } 16 -> {17} [color=green]; 17 -> {18} [style=dotted]; - 17 -> {24} [color=green]; - 17 -> {24} [style=dashed]; + 17 -> {22} [color=green]; + 17 -> {22} [style=dashed]; subgraph cluster_5 { color=red @@ -72,97 +72,90 @@ digraph plusAssignWithLambdaInRhs_kt { subgraph cluster_6 { color=red - 22 [label="Enter function getter" style="filled" fillcolor=red]; - 23 [label="Exit function getter" style="filled" fillcolor=red]; + 22 [label="Enter property" style="filled" fillcolor=red]; + 23 [label="Access variable R|/executor|"]; + 24 [label="Exit property" style="filled" fillcolor=red]; } 22 -> {23}; + 23 -> {24}; + 24 -> {18} [color=green]; subgraph cluster_7 { color=red - 24 [label="Enter property" style="filled" fillcolor=red]; - 25 [label="Access variable R|/executor|"]; - 26 [label="Exit property" style="filled" fillcolor=red]; - } - 24 -> {25}; - 25 -> {26}; - 26 -> {18} [color=green]; - - subgraph cluster_8 { - color=red - 27 [label="Enter function postpone" style="filled" fillcolor=red]; - subgraph cluster_9 { + 25 [label="Enter function postpone" style="filled" fillcolor=red]; + subgraph cluster_8 { color=blue - 28 [label="Enter block"]; - 29 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()"]; - 30 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; - 31 [label="Postponed enter to lambda"]; - subgraph cluster_10 { + 26 [label="Enter block"]; + 27 [label="Function call: R|kotlin/collections/mutableListOf| kotlin/Unit|>()"]; + 28 [label="Variable declaration: lval queue: R|kotlin/collections/MutableList>|"]; + 29 [label="Postponed enter to lambda"]; + subgraph cluster_9 { color=blue - 38 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_11 { + 36 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_10 { color=blue - 39 [label="Enter block"]; - 40 [label="Access variable R|/queue|"]; - 41 [label="Postponed enter to lambda"]; - subgraph cluster_12 { + 37 [label="Enter block"]; + 38 [label="Access variable R|/queue|"]; + 39 [label="Postponed enter to lambda"]; + subgraph cluster_11 { color=blue - 46 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; - subgraph cluster_13 { + 44 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_12 { color=blue - 47 [label="Enter block"]; - 48 [label="Function call: R|/computation|.R|SubstitutionOverride|()"]; - 49 [label="Function call: R|/resolve|.R|SubstitutionOverride|(...)"]; - 50 [label="Exit block"]; + 45 [label="Enter block"]; + 46 [label="Function call: R|/computation|.R|SubstitutionOverride|()"]; + 47 [label="Function call: R|/resolve|.R|SubstitutionOverride|(...)"]; + 48 [label="Exit block"]; } - 51 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 49 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 42 [label="Postponed exit from lambda"]; - 43 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)"]; - 44 [label="Exit block"]; + 40 [label="Postponed exit from lambda"]; + 41 [label="Function call: R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(...)"]; + 42 [label="Exit block"]; } - 45 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 43 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; } - 32 [label="Postponed exit from lambda"]; - 33 [label="Function call: R|/A.A|(...)"]; - 34 [label="Jump: ^postpone R|/A.A|( = A@fun (resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { + 30 [label="Postponed exit from lambda"]; + 31 [label="Function call: R|/A.A|(...)"]; + 32 [label="Jump: ^postpone R|/A.A|( = A@fun (resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { R|/queue|.R|kotlin/collections/plusAssign| kotlin/Unit|>(A@fun (): R|kotlin/Unit| { R|/resolve|.R|SubstitutionOverride|(R|/computation|.R|SubstitutionOverride|()) } ) } )"]; - 35 [label="Stub" style="filled" fillcolor=gray]; - 36 [label="Exit block" style="filled" fillcolor=gray]; + 33 [label="Stub" style="filled" fillcolor=gray]; + 34 [label="Exit block" style="filled" fillcolor=gray]; } - 37 [label="Exit function postpone" style="filled" fillcolor=red]; + 35 [label="Exit function postpone" style="filled" fillcolor=red]; } + 25 -> {26}; + 26 -> {27}; 27 -> {28}; 28 -> {29}; - 29 -> {30}; + 29 -> {30 36}; + 29 -> {36} [style=dashed]; 30 -> {31}; - 31 -> {32 38}; - 31 -> {38} [style=dashed]; - 32 -> {33}; - 33 -> {34}; - 34 -> {37}; + 31 -> {32}; + 32 -> {35}; + 32 -> {33} [style=dotted]; + 33 -> {34} [style=dotted]; 34 -> {35} [style=dotted]; - 35 -> {36} [style=dotted]; - 36 -> {37} [style=dotted]; + 36 -> {37}; + 37 -> {38}; 38 -> {39}; - 39 -> {40}; + 39 -> {44}; + 39 -> {40} [color=red]; + 39 -> {44} [style=dashed]; 40 -> {41}; - 41 -> {46}; - 41 -> {42} [color=red]; - 41 -> {46} [style=dashed]; + 41 -> {42}; 42 -> {43}; - 43 -> {44}; - 44 -> {45}; - 46 -> {51 47}; + 44 -> {49 45}; + 45 -> {46}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; - 49 -> {50}; - 50 -> {51}; - 51 -> {42} [color=green]; - 51 -> {46} [color=green style=dashed]; + 49 -> {40} [color=green]; + 49 -> {44} [color=green style=dashed]; } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index 6cfc7404150..28a991177eb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -38,7 +38,7 @@ abstract class FirDefaultPropertyAccessor( ) : FirPropertyAccessorImpl( source, session, - resolvePhase = FirResolvePhase.RAW_FIR, + resolvePhase = FirResolvePhase.BODY_RESOLVE, origin, FirDeclarationAttributes(), propertyTypeRef, @@ -53,7 +53,9 @@ abstract class FirDefaultPropertyAccessor( annotations = mutableListOf(), typeParameters = mutableListOf(), ) { - override var resolvePhase = FirResolvePhase.BODY_RESOLVE + override var resolvePhase + get() = FirResolvePhase.BODY_RESOLVE + set(_) {} final override var body: FirBlock? get() = null diff --git a/compiler/testData/codegen/box/smartCasts/kt44814.dot b/compiler/testData/codegen/box/smartCasts/kt44814.dot index 99c5ec3dd73..dc8f41bccce 100644 --- a/compiler/testData/codegen/box/smartCasts/kt44814.dot +++ b/compiler/testData/codegen/box/smartCasts/kt44814.dot @@ -37,776 +37,650 @@ digraph kt44814_kt { subgraph cluster_4 { color=red - 10 [label="Enter function getter [2]" style="filled" fillcolor=red]; - 11 [label="Exit function getter [2]" style="filled" fillcolor=red]; + 10 [label="Enter class FirPsiSourceElement [1]" style="filled" fillcolor=red]; + 11 [label="Part of class initialization [1]"]; + 12 [label="Part of class initialization [1]"]; + 13 [label="Part of class initialization [1]"]; + 14 [label="Exit class FirPsiSourceElement [1]" style="filled" fillcolor=red]; } - 10 -> {11}; + 10 -> {11} [color=green]; + 11 -> {12} [style=dotted]; + 11 -> {18} [color=green]; + 11 -> {18} [style=dashed]; + 12 -> {13} [style=dotted]; + 12 -> {21} [color=green]; + 12 -> {21} [style=dashed]; + 13 -> {14} [style=dotted]; + 13 -> {24} [color=green]; + 13 -> {24} [style=dashed]; subgraph cluster_5 { color=red - 12 [label="Enter function getter [2]" style="filled" fillcolor=red]; - 13 [label="Exit function getter [2]" style="filled" fillcolor=red]; + 15 [label="Enter function [2]" style="filled" fillcolor=red]; + 16 [label="Delegated constructor call: super() [2]"]; + 17 [label="Exit function [2]" style="filled" fillcolor=red]; } - 12 -> {13}; + 15 -> {16}; + 16 -> {17}; subgraph cluster_6 { color=red - 14 [label="Enter class FirPsiSourceElement [1]" style="filled" fillcolor=red]; - 15 [label="Part of class initialization [1]"]; - 16 [label="Part of class initialization [1]"]; - 17 [label="Part of class initialization [1]"]; - 18 [label="Exit class FirPsiSourceElement [1]" style="filled" fillcolor=red]; + 18 [label="Enter property [2]" style="filled" fillcolor=red]; + 19 [label="Access variable R|/psi| [2]"]; + 20 [label="Exit property [2]" style="filled" fillcolor=red]; } - 14 -> {15} [color=green]; - 15 -> {16} [style=dotted]; - 15 -> {24} [color=green]; - 15 -> {24} [style=dashed]; - 16 -> {17} [style=dotted]; - 16 -> {29} [color=green]; - 16 -> {29} [style=dashed]; - 17 -> {18} [style=dotted]; - 17 -> {34} [color=green]; - 17 -> {34} [style=dashed]; + 18 -> {19}; + 19 -> {20}; + 20 -> {12} [color=green]; subgraph cluster_7 { color=red - 19 [label="Enter function [2]" style="filled" fillcolor=red]; - 20 [label="Delegated constructor call: super() [2]"]; - 21 [label="Exit function [2]" style="filled" fillcolor=red]; + 21 [label="Enter property [2]" style="filled" fillcolor=red]; + 22 [label="Access variable R|/lighterASTNode| [2]"]; + 23 [label="Exit property [2]" style="filled" fillcolor=red]; } - 19 -> {20}; - 20 -> {21}; + 21 -> {22}; + 22 -> {23}; + 23 -> {13} [color=green]; subgraph cluster_8 { - color=red - 22 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 23 [label="Exit function getter [3]" style="filled" fillcolor=red]; - } - 22 -> {23}; - - subgraph cluster_9 { color=red 24 [label="Enter property [2]" style="filled" fillcolor=red]; - 25 [label="Access variable R|/psi| [2]"]; + 25 [label="Access variable R|/treeStructure| [2]"]; 26 [label="Exit property [2]" style="filled" fillcolor=red]; } 24 -> {25}; 25 -> {26}; - 26 -> {16} [color=green]; + 26 -> {14} [color=green]; + + subgraph cluster_9 { + color=red + 27 [label="Enter class FirLightSourceElement [1]" style="filled" fillcolor=red]; + 28 [label="Part of class initialization [1]"]; + 29 [label="Part of class initialization [1]"]; + 30 [label="Exit class FirLightSourceElement [1]" style="filled" fillcolor=red]; + } + 27 -> {28} [color=green]; + 28 -> {29} [style=dotted]; + 28 -> {34} [color=green]; + 28 -> {34} [style=dashed]; + 29 -> {30} [style=dotted]; + 29 -> {37} [color=green]; + 29 -> {37} [style=dashed]; subgraph cluster_10 { color=red - 27 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 28 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 31 [label="Enter function [2]" style="filled" fillcolor=red]; + 32 [label="Delegated constructor call: super() [2]"]; + 33 [label="Exit function [2]" style="filled" fillcolor=red]; } - 27 -> {28}; + 31 -> {32}; + 32 -> {33}; subgraph cluster_11 { - color=red - 29 [label="Enter property [2]" style="filled" fillcolor=red]; - 30 [label="Access variable R|/lighterASTNode| [2]"]; - 31 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 29 -> {30}; - 30 -> {31}; - 31 -> {17} [color=green]; - - subgraph cluster_12 { - color=red - 32 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 33 [label="Exit function getter [3]" style="filled" fillcolor=red]; - } - 32 -> {33}; - - subgraph cluster_13 { color=red 34 [label="Enter property [2]" style="filled" fillcolor=red]; - 35 [label="Access variable R|/treeStructure| [2]"]; + 35 [label="Access variable R|/lighterASTNode| [2]"]; 36 [label="Exit property [2]" style="filled" fillcolor=red]; } 34 -> {35}; 35 -> {36}; - 36 -> {18} [color=green]; + 36 -> {29} [color=green]; + + subgraph cluster_12 { + color=red + 37 [label="Enter property [2]" style="filled" fillcolor=red]; + 38 [label="Access variable R|/treeStructure| [2]"]; + 39 [label="Exit property [2]" style="filled" fillcolor=red]; + } + 37 -> {38}; + 38 -> {39}; + 39 -> {30} [color=green]; + + subgraph cluster_13 { + color=red + 40 [label="Enter class PsiElement [1]" style="filled" fillcolor=red]; + 41 [label="Exit class PsiElement [1]" style="filled" fillcolor=red]; + } + 40 -> {41} [color=green]; subgraph cluster_14 { color=red - 37 [label="Enter class FirLightSourceElement [1]" style="filled" fillcolor=red]; - 38 [label="Part of class initialization [1]"]; - 39 [label="Part of class initialization [1]"]; - 40 [label="Exit class FirLightSourceElement [1]" style="filled" fillcolor=red]; + 42 [label="Enter function [2]" style="filled" fillcolor=red]; + 43 [label="Delegated constructor call: super() [2]"]; + 44 [label="Exit function [2]" style="filled" fillcolor=red]; } - 37 -> {38} [color=green]; - 38 -> {39} [style=dotted]; - 38 -> {46} [color=green]; - 38 -> {46} [style=dashed]; - 39 -> {40} [style=dotted]; - 39 -> {51} [color=green]; - 39 -> {51} [style=dashed]; + 42 -> {43}; + 43 -> {44}; subgraph cluster_15 { color=red - 41 [label="Enter function [2]" style="filled" fillcolor=red]; - 42 [label="Delegated constructor call: super() [2]"]; - 43 [label="Exit function [2]" style="filled" fillcolor=red]; + 45 [label="Enter class ASTNode [1]" style="filled" fillcolor=red]; + 46 [label="Exit class ASTNode [1]" style="filled" fillcolor=red]; } - 41 -> {42}; - 42 -> {43}; + 45 -> {46} [color=green]; subgraph cluster_16 { color=red - 44 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 45 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 47 [label="Enter function [2]" style="filled" fillcolor=red]; + 48 [label="Delegated constructor call: super() [2]"]; + 49 [label="Exit function [2]" style="filled" fillcolor=red]; } - 44 -> {45}; + 47 -> {48}; + 48 -> {49}; subgraph cluster_17 { color=red - 46 [label="Enter property [2]" style="filled" fillcolor=red]; - 47 [label="Access variable R|/lighterASTNode| [2]"]; - 48 [label="Exit property [2]" style="filled" fillcolor=red]; + 50 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; + 51 [label="Part of class initialization [1]"]; + 52 [label="Part of class initialization [1]"]; + 53 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; } - 46 -> {47}; - 47 -> {48}; - 48 -> {39} [color=green]; + 50 -> {51} [color=green]; + 51 -> {52} [style=dotted]; + 51 -> {60} [color=green]; + 51 -> {60} [style=dashed]; + 52 -> {53} [style=dotted]; + 52 -> {70} [color=green]; + 52 -> {70} [style=dashed]; subgraph cluster_18 { color=red - 49 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 50 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 54 [label="Enter function [2]" style="filled" fillcolor=red]; + subgraph cluster_19 { + color=blue + 57 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; + 58 [label="Function call: R|kotlin/collections/emptyList|() [3]"]; + 59 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; + } + 55 [label="Delegated constructor call: super() [2]"]; + 56 [label="Exit function [2]" style="filled" fillcolor=red]; } - 49 -> {50}; - - subgraph cluster_19 { - color=red - 51 [label="Enter property [2]" style="filled" fillcolor=red]; - 52 [label="Access variable R|/treeStructure| [2]"]; - 53 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 51 -> {52}; - 52 -> {53}; - 53 -> {40} [color=green]; + 54 -> {57 55}; + 55 -> {56}; + 57 -> {58}; + 57 -> {57} [style=dashed]; + 58 -> {59}; subgraph cluster_20 { color=red - 54 [label="Enter class PsiElement [1]" style="filled" fillcolor=red]; - 55 [label="Exit class PsiElement [1]" style="filled" fillcolor=red]; + 60 [label="Enter property [2]" style="filled" fillcolor=red]; + 61 [label="Access variable R|/_children| [2]"]; + 62 [label="Exit property [2]" style="filled" fillcolor=red]; } - 54 -> {55} [color=green]; + 60 -> {61}; + 61 -> {62}; + 62 -> {52} [color=green]; subgraph cluster_21 { color=red - 56 [label="Enter function [2]" style="filled" fillcolor=red]; - 57 [label="Delegated constructor call: super() [2]"]; - 58 [label="Exit function [2]" style="filled" fillcolor=red]; + 63 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; + subgraph cluster_22 { + color=blue + 64 [label="Enter block [2]"]; + 65 [label="Access variable R|/LighterASTNode._children| [2]"]; + 66 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; + 67 [label="Stub [2]" style="filled" fillcolor=gray]; + 68 [label="Exit block [2]" style="filled" fillcolor=gray]; + } + 69 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; } - 56 -> {57}; - 57 -> {58}; - - subgraph cluster_22 { - color=red - 59 [label="Enter class ASTNode [1]" style="filled" fillcolor=red]; - 60 [label="Exit class ASTNode [1]" style="filled" fillcolor=red]; - } - 59 -> {60} [color=green]; + 63 -> {64}; + 64 -> {65}; + 65 -> {66}; + 66 -> {69}; + 66 -> {67} [style=dotted]; + 67 -> {68} [style=dotted]; + 68 -> {69} [style=dotted]; subgraph cluster_23 { color=red - 61 [label="Enter function [2]" style="filled" fillcolor=red]; - 62 [label="Delegated constructor call: super() [2]"]; - 63 [label="Exit function [2]" style="filled" fillcolor=red]; + 70 [label="Enter property [2]" style="filled" fillcolor=red]; + 71 [label="Access qualifier /TokenType [2]"]; + 72 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; + 73 [label="Exit property [2]" style="filled" fillcolor=red]; } - 61 -> {62}; - 62 -> {63}; + 70 -> {71}; + 71 -> {72}; + 72 -> {73}; + 73 -> {53} [color=green]; subgraph cluster_24 { color=red - 64 [label="Enter class LighterASTNode [1]" style="filled" fillcolor=red]; - 65 [label="Part of class initialization [1]"]; - 66 [label="Part of class initialization [1]"]; - 67 [label="Exit class LighterASTNode [1]" style="filled" fillcolor=red]; + 74 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; + 75 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; } - 64 -> {65} [color=green]; - 65 -> {66} [style=dotted]; - 65 -> {76} [color=green]; - 65 -> {76} [style=dashed]; - 66 -> {67} [style=dotted]; - 66 -> {88} [color=green]; - 66 -> {88} [style=dashed]; + 74 -> {75} [color=green]; subgraph cluster_25 { color=red - 68 [label="Enter function [2]" style="filled" fillcolor=red]; - subgraph cluster_26 { - color=blue - 71 [label="Enter default value of _children [3]" style="filled" fillcolor=red]; - 72 [label="Function call: R|kotlin/collections/emptyList|() [3]"]; - 73 [label="Exit default value of _children [3]" style="filled" fillcolor=red]; - } - 69 [label="Delegated constructor call: super() [2]"]; - 70 [label="Exit function [2]" style="filled" fillcolor=red]; - } - 68 -> {71 69}; - 69 -> {70}; - 71 -> {72}; - 71 -> {71} [style=dashed]; - 72 -> {73}; - - subgraph cluster_27 { - color=red - 74 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 75 [label="Exit function getter [3]" style="filled" fillcolor=red]; - } - 74 -> {75}; - - subgraph cluster_28 { - color=red - 76 [label="Enter property [2]" style="filled" fillcolor=red]; - 77 [label="Access variable R|/_children| [2]"]; - 78 [label="Exit property [2]" style="filled" fillcolor=red]; + 76 [label="Enter function [2]" style="filled" fillcolor=red]; + 77 [label="Delegated constructor call: super() [2]"]; + 78 [label="Exit function [2]" style="filled" fillcolor=red]; } 76 -> {77}; 77 -> {78}; - 78 -> {66} [color=green]; + + subgraph cluster_26 { + color=red + 79 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 80 [label="Part of class initialization [2]"]; + 81 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + } + 79 -> {80} [color=green]; + 80 -> {81} [style=dotted]; + 80 -> {85} [color=green]; + 80 -> {85} [style=dashed]; + + subgraph cluster_27 { + color=red + 82 [label="Enter function [3]" style="filled" fillcolor=red]; + 83 [label="Delegated constructor call: super() [3]"]; + 84 [label="Exit function [3]" style="filled" fillcolor=red]; + } + 82 -> {83}; + 83 -> {84}; + + subgraph cluster_28 { + color=red + 85 [label="Enter property [3]" style="filled" fillcolor=red]; + 86 [label="Function call: R|/TokenType.TokenType|() [3]"]; + 87 [label="Exit property [3]" style="filled" fillcolor=red]; + } + 85 -> {86}; + 86 -> {87}; + 87 -> {81} [color=green]; subgraph cluster_29 { color=red - 79 [label="Enter function getChildren [2]" style="filled" fillcolor=red]; - subgraph cluster_30 { - color=blue - 80 [label="Enter block [2]"]; - 81 [label="Access variable R|/LighterASTNode._children| [2]"]; - 82 [label="Jump: ^getChildren this@R|/LighterASTNode|.R|/LighterASTNode._children| [2]"]; - 83 [label="Stub [2]" style="filled" fillcolor=gray]; - 84 [label="Exit block [2]" style="filled" fillcolor=gray]; - } - 85 [label="Exit function getChildren [2]" style="filled" fillcolor=red]; + 88 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + 89 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; } - 79 -> {80}; - 80 -> {81}; - 81 -> {82}; - 82 -> {85}; - 82 -> {83} [style=dotted]; - 83 -> {84} [style=dotted]; - 84 -> {85} [style=dotted]; + 88 -> {89} [color=green]; + + subgraph cluster_30 { + color=red + 90 [label="Enter function [2]" style="filled" fillcolor=red]; + 91 [label="Delegated constructor call: super() [2]"]; + 92 [label="Exit function [2]" style="filled" fillcolor=red]; + } + 90 -> {91}; + 91 -> {92}; subgraph cluster_31 { color=red - 86 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 87 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 93 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; + 94 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; } - 86 -> {87}; + 93 -> {94} [color=green]; subgraph cluster_32 { color=red - 88 [label="Enter property [2]" style="filled" fillcolor=red]; - 89 [label="Access qualifier /TokenType [2]"]; - 90 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [2]"]; - 91 [label="Exit property [2]" style="filled" fillcolor=red]; + 95 [label="Enter function [2]" style="filled" fillcolor=red]; + 96 [label="Delegated constructor call: super() [2]"]; + 97 [label="Exit function [2]" style="filled" fillcolor=red]; } - 88 -> {89}; - 89 -> {90}; - 90 -> {91}; - 91 -> {67} [color=green]; + 95 -> {96}; + 96 -> {97}; subgraph cluster_33 { color=red - 92 [label="Enter class TokenType [1]" style="filled" fillcolor=red]; - 93 [label="Exit class TokenType [1]" style="filled" fillcolor=red]; + 98 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; + 99 [label="Part of class initialization [1]"]; + 100 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; } - 92 -> {93} [color=green]; + 98 -> {99} [color=green]; + 99 -> {100} [style=dotted]; + 99 -> {104} [color=green]; + 99 -> {104} [style=dashed]; subgraph cluster_34 { color=red - 94 [label="Enter function [2]" style="filled" fillcolor=red]; - 95 [label="Delegated constructor call: super() [2]"]; - 96 [label="Exit function [2]" style="filled" fillcolor=red]; + 101 [label="Enter function [2]" style="filled" fillcolor=red]; + 102 [label="Delegated constructor call: super() [2]"]; + 103 [label="Exit function [2]" style="filled" fillcolor=red]; } - 94 -> {95}; - 95 -> {96}; + 101 -> {102}; + 102 -> {103}; subgraph cluster_35 { color=red - 97 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 98 [label="Part of class initialization [2]"]; - 99 [label="Exit class Companion [2]" style="filled" fillcolor=red]; + 104 [label="Enter property [2]" style="filled" fillcolor=red]; + 105 [label="Function call: R|/KtModifierList.KtModifierList|() [2]"]; + 106 [label="Exit property [2]" style="filled" fillcolor=red]; } - 97 -> {98} [color=green]; - 98 -> {99} [style=dotted]; - 98 -> {105} [color=green]; - 98 -> {105} [style=dashed]; + 104 -> {105}; + 105 -> {106}; + 106 -> {100} [color=green]; subgraph cluster_36 { color=red - 100 [label="Enter function [3]" style="filled" fillcolor=red]; - 101 [label="Delegated constructor call: super() [3]"]; - 102 [label="Exit function [3]" style="filled" fillcolor=red]; + 107 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; + 108 [label="Part of class initialization [1]"]; + 109 [label="Part of class initialization [1]"]; + 110 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; } - 100 -> {101}; - 101 -> {102}; + 107 -> {108} [color=green]; + 108 -> {109} [style=dotted]; + 108 -> {114} [color=green]; + 108 -> {114} [style=dashed]; + 109 -> {110} [style=dotted]; + 109 -> {117} [color=green]; + 109 -> {117} [style=dashed]; subgraph cluster_37 { color=red - 103 [label="Enter function getter [4]" style="filled" fillcolor=red]; - 104 [label="Exit function getter [4]" style="filled" fillcolor=red]; + 111 [label="Enter function [2]" style="filled" fillcolor=red]; + 112 [label="Delegated constructor call: super() [2]"]; + 113 [label="Exit function [2]" style="filled" fillcolor=red]; } - 103 -> {104}; + 111 -> {112}; + 112 -> {113}; subgraph cluster_38 { color=red - 105 [label="Enter property [3]" style="filled" fillcolor=red]; - 106 [label="Function call: R|/TokenType.TokenType|() [3]"]; - 107 [label="Exit property [3]" style="filled" fillcolor=red]; + 114 [label="Enter property [2]" style="filled" fillcolor=red]; + 115 [label="Access variable R|/node| [2]"]; + 116 [label="Exit property [2]" style="filled" fillcolor=red]; } - 105 -> {106}; - 106 -> {107}; - 107 -> {99} [color=green]; + 114 -> {115}; + 115 -> {116}; + 116 -> {109} [color=green]; subgraph cluster_39 { color=red - 108 [label="Enter class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; - 109 [label="Exit class KtModifierKeywordToken [1]" style="filled" fillcolor=red]; + 117 [label="Enter property [2]" style="filled" fillcolor=red]; + 118 [label="Access variable R|/token| [2]"]; + 119 [label="Exit property [2]" style="filled" fillcolor=red]; } - 108 -> {109} [color=green]; + 117 -> {118}; + 118 -> {119}; + 119 -> {110} [color=green]; subgraph cluster_40 { color=red - 110 [label="Enter function [2]" style="filled" fillcolor=red]; - 111 [label="Delegated constructor call: super() [2]"]; - 112 [label="Exit function [2]" style="filled" fillcolor=red]; + 120 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; + 121 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; } - 110 -> {111}; - 111 -> {112}; + 120 -> {121} [color=green]; subgraph cluster_41 { color=red - 113 [label="Enter class KtModifierList [1]" style="filled" fillcolor=red]; - 114 [label="Exit class KtModifierList [1]" style="filled" fillcolor=red]; + 122 [label="Enter function [3]" style="filled" fillcolor=red]; + 123 [label="Access variable R|/node| [4]"]; + 124 [label="Access variable R|/token| [4]"]; + 125 [label="Delegated constructor call: super|>(...) [3]"]; + 126 [label="Exit function [3]" style="filled" fillcolor=red]; } - 113 -> {114} [color=green]; + 122 -> {123}; + 123 -> {124}; + 124 -> {125}; + 125 -> {126}; subgraph cluster_42 { color=red - 115 [label="Enter function [2]" style="filled" fillcolor=red]; - 116 [label="Delegated constructor call: super() [2]"]; - 117 [label="Exit function [2]" style="filled" fillcolor=red]; + 127 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; + 128 [label="Part of class initialization [2]"]; + 129 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; } - 115 -> {116}; - 116 -> {117}; + 127 -> {128} [color=green]; + 128 -> {129} [style=dotted]; + 128 -> {135} [color=green]; + 128 -> {135} [style=dashed]; subgraph cluster_43 { color=red - 118 [label="Enter class KtModifierListOwner [1]" style="filled" fillcolor=red]; - 119 [label="Part of class initialization [1]"]; - 120 [label="Exit class KtModifierListOwner [1]" style="filled" fillcolor=red]; + 130 [label="Enter function [3]" style="filled" fillcolor=red]; + 131 [label="Access variable R|/node| [4]"]; + 132 [label="Access variable R|/token| [4]"]; + 133 [label="Delegated constructor call: super|>(...) [3]"]; + 134 [label="Exit function [3]" style="filled" fillcolor=red]; } - 118 -> {119} [color=green]; - 119 -> {120} [style=dotted]; - 119 -> {126} [color=green]; - 119 -> {126} [style=dashed]; + 130 -> {131}; + 131 -> {132}; + 132 -> {133}; + 133 -> {134}; subgraph cluster_44 { color=red - 121 [label="Enter function [2]" style="filled" fillcolor=red]; - 122 [label="Delegated constructor call: super() [2]"]; - 123 [label="Exit function [2]" style="filled" fillcolor=red]; + 135 [label="Enter property [3]" style="filled" fillcolor=red]; + 136 [label="Access variable R|/tree| [3]"]; + 137 [label="Exit property [3]" style="filled" fillcolor=red]; } - 121 -> {122}; - 122 -> {123}; + 135 -> {136}; + 136 -> {137}; + 137 -> {129} [color=green]; subgraph cluster_45 { color=red - 124 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 125 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 138 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; + 139 [label="Part of class initialization [1]"]; + 140 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; } - 124 -> {125}; + 138 -> {139} [color=green]; + 139 -> {140} [style=dotted]; + 139 -> {144} [color=green]; + 139 -> {144} [style=dashed]; subgraph cluster_46 { color=red - 126 [label="Enter property [2]" style="filled" fillcolor=red]; - 127 [label="Function call: R|/KtModifierList.KtModifierList|() [2]"]; - 128 [label="Exit property [2]" style="filled" fillcolor=red]; + 141 [label="Enter function [2]" style="filled" fillcolor=red]; + 142 [label="Delegated constructor call: super() [2]"]; + 143 [label="Exit function [2]" style="filled" fillcolor=red]; } - 126 -> {127}; - 127 -> {128}; - 128 -> {120} [color=green]; + 141 -> {142}; + 142 -> {143}; subgraph cluster_47 { color=red - 129 [label="Enter class FirModifier [1]" style="filled" fillcolor=red]; - 130 [label="Part of class initialization [1]"]; - 131 [label="Part of class initialization [1]"]; - 132 [label="Exit class FirModifier [1]" style="filled" fillcolor=red]; + 144 [label="Enter property [2]" style="filled" fillcolor=red]; + 145 [label="Function call: R|kotlin/collections/emptyList||>() [2]"]; + 146 [label="Exit property [2]" style="filled" fillcolor=red]; } - 129 -> {130} [color=green]; - 130 -> {131} [style=dotted]; - 130 -> {138} [color=green]; - 130 -> {138} [style=dashed]; - 131 -> {132} [style=dotted]; - 131 -> {143} [color=green]; - 131 -> {143} [style=dashed]; + 144 -> {145}; + 145 -> {146}; + 146 -> {140} [color=green]; subgraph cluster_48 { color=red - 133 [label="Enter function [2]" style="filled" fillcolor=red]; - 134 [label="Delegated constructor call: super() [2]"]; - 135 [label="Exit function [2]" style="filled" fillcolor=red]; + 147 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; + 148 [label="Part of class initialization [2]"]; + 149 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; } - 133 -> {134}; - 134 -> {135}; + 147 -> {148} [color=green]; + 148 -> {149} [style=dotted]; + 148 -> {153} [color=green]; + 148 -> {153} [style=dashed]; subgraph cluster_49 { color=red - 136 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 137 [label="Exit function getter [3]" style="filled" fillcolor=red]; - } - 136 -> {137}; - - subgraph cluster_50 { - color=red - 138 [label="Enter property [2]" style="filled" fillcolor=red]; - 139 [label="Access variable R|/node| [2]"]; - 140 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 138 -> {139}; - 139 -> {140}; - 140 -> {131} [color=green]; - - subgraph cluster_51 { - color=red - 141 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 142 [label="Exit function getter [3]" style="filled" fillcolor=red]; - } - 141 -> {142}; - - subgraph cluster_52 { - color=red - 143 [label="Enter property [2]" style="filled" fillcolor=red]; - 144 [label="Access variable R|/token| [2]"]; - 145 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 143 -> {144}; - 144 -> {145}; - 145 -> {132} [color=green]; - - subgraph cluster_53 { - color=red - 146 [label="Enter class FirPsiModifier [2]" style="filled" fillcolor=red]; - 147 [label="Exit class FirPsiModifier [2]" style="filled" fillcolor=red]; - } - 146 -> {147} [color=green]; - - subgraph cluster_54 { - color=red - 148 [label="Enter function [3]" style="filled" fillcolor=red]; - 149 [label="Access variable R|/node| [4]"]; - 150 [label="Access variable R|/token| [4]"]; - 151 [label="Delegated constructor call: super|>(...) [3]"]; + 150 [label="Enter function [3]" style="filled" fillcolor=red]; + 151 [label="Delegated constructor call: super() [3]"]; 152 [label="Exit function [3]" style="filled" fillcolor=red]; } - 148 -> {149}; - 149 -> {150}; 150 -> {151}; 151 -> {152}; - subgraph cluster_55 { + subgraph cluster_50 { color=red - 153 [label="Enter class FirLightModifier [2]" style="filled" fillcolor=red]; - 154 [label="Part of class initialization [2]"]; - 155 [label="Exit class FirLightModifier [2]" style="filled" fillcolor=red]; + 153 [label="Enter property [3]" style="filled" fillcolor=red]; + 154 [label="Access variable R|/modifierList| [3]"]; + 155 [label="Exit property [3]" style="filled" fillcolor=red]; } - 153 -> {154} [color=green]; - 154 -> {155} [style=dotted]; - 154 -> {163} [color=green]; - 154 -> {163} [style=dashed]; + 153 -> {154}; + 154 -> {155}; + 155 -> {149} [color=green]; - subgraph cluster_56 { + subgraph cluster_51 { color=red - 156 [label="Enter function [3]" style="filled" fillcolor=red]; - 157 [label="Access variable R|/node| [4]"]; - 158 [label="Access variable R|/token| [4]"]; - 159 [label="Delegated constructor call: super|>(...) [3]"]; - 160 [label="Exit function [3]" style="filled" fillcolor=red]; + 156 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; + 157 [label="Part of class initialization [2]"]; + 158 [label="Part of class initialization [2]"]; + 159 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; } - 156 -> {157}; - 157 -> {158}; - 158 -> {159}; - 159 -> {160}; + 156 -> {157} [color=green]; + 157 -> {158} [style=dotted]; + 157 -> {163} [color=green]; + 157 -> {163} [style=dashed]; + 158 -> {159} [style=dotted]; + 158 -> {166} [color=green]; + 158 -> {166} [style=dashed]; - subgraph cluster_57 { + subgraph cluster_52 { color=red - 161 [label="Enter function getter [4]" style="filled" fillcolor=red]; - 162 [label="Exit function getter [4]" style="filled" fillcolor=red]; + 160 [label="Enter function [3]" style="filled" fillcolor=red]; + 161 [label="Delegated constructor call: super() [3]"]; + 162 [label="Exit function [3]" style="filled" fillcolor=red]; } + 160 -> {161}; 161 -> {162}; - subgraph cluster_58 { + subgraph cluster_53 { color=red 163 [label="Enter property [3]" style="filled" fillcolor=red]; - 164 [label="Access variable R|/tree| [3]"]; + 164 [label="Access variable R|/modifierList| [3]"]; 165 [label="Exit property [3]" style="filled" fillcolor=red]; } 163 -> {164}; 164 -> {165}; - 165 -> {155} [color=green]; + 165 -> {158} [color=green]; - subgraph cluster_59 { + subgraph cluster_54 { color=red - 166 [label="Enter class FirModifierList [1]" style="filled" fillcolor=red]; - 167 [label="Part of class initialization [1]"]; - 168 [label="Exit class FirModifierList [1]" style="filled" fillcolor=red]; + 166 [label="Enter property [3]" style="filled" fillcolor=red]; + 167 [label="Access variable R|/tree| [3]"]; + 168 [label="Exit property [3]" style="filled" fillcolor=red]; } - 166 -> {167} [color=green]; - 167 -> {168} [style=dotted]; - 167 -> {174} [color=green]; - 167 -> {174} [style=dashed]; + 166 -> {167}; + 167 -> {168}; + 168 -> {159} [color=green]; - subgraph cluster_60 { + subgraph cluster_55 { color=red - 169 [label="Enter function [2]" style="filled" fillcolor=red]; - 170 [label="Delegated constructor call: super() [2]"]; - 171 [label="Exit function [2]" style="filled" fillcolor=red]; + 169 [label="Enter class Companion [2]" style="filled" fillcolor=red]; + 170 [label="Exit class Companion [2]" style="filled" fillcolor=red]; } - 169 -> {170}; - 170 -> {171}; + 169 -> {170} [color=green]; - subgraph cluster_61 { + subgraph cluster_56 { color=red - 172 [label="Enter function getter [3]" style="filled" fillcolor=red]; - 173 [label="Exit function getter [3]" style="filled" fillcolor=red]; + 171 [label="Enter function [3]" style="filled" fillcolor=red]; + 172 [label="Delegated constructor call: super() [3]"]; + 173 [label="Exit function [3]" style="filled" fillcolor=red]; } + 171 -> {172}; 172 -> {173}; - subgraph cluster_62 { + subgraph cluster_57 { color=red - 174 [label="Enter property [2]" style="filled" fillcolor=red]; - 175 [label="Function call: R|kotlin/collections/emptyList||>() [2]"]; - 176 [label="Exit property [2]" style="filled" fillcolor=red]; - } - 174 -> {175}; - 175 -> {176}; - 176 -> {168} [color=green]; - - subgraph cluster_63 { - color=red - 177 [label="Enter class FirPsiModifierList [2]" style="filled" fillcolor=red]; - 178 [label="Part of class initialization [2]"]; - 179 [label="Exit class FirPsiModifierList [2]" style="filled" fillcolor=red]; - } - 177 -> {178} [color=green]; - 178 -> {179} [style=dotted]; - 178 -> {185} [color=green]; - 178 -> {185} [style=dashed]; - - subgraph cluster_64 { - color=red - 180 [label="Enter function [3]" style="filled" fillcolor=red]; - 181 [label="Delegated constructor call: super() [3]"]; - 182 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 180 -> {181}; - 181 -> {182}; - - subgraph cluster_65 { - color=red - 183 [label="Enter function getter [4]" style="filled" fillcolor=red]; - 184 [label="Exit function getter [4]" style="filled" fillcolor=red]; - } - 183 -> {184}; - - subgraph cluster_66 { - color=red - 185 [label="Enter property [3]" style="filled" fillcolor=red]; - 186 [label="Access variable R|/modifierList| [3]"]; - 187 [label="Exit property [3]" style="filled" fillcolor=red]; - } - 185 -> {186}; - 186 -> {187}; - 187 -> {179} [color=green]; - - subgraph cluster_67 { - color=red - 188 [label="Enter class FirLightModifierList [2]" style="filled" fillcolor=red]; - 189 [label="Part of class initialization [2]"]; - 190 [label="Part of class initialization [2]"]; - 191 [label="Exit class FirLightModifierList [2]" style="filled" fillcolor=red]; - } - 188 -> {189} [color=green]; - 189 -> {190} [style=dotted]; - 189 -> {197} [color=green]; - 189 -> {197} [style=dashed]; - 190 -> {191} [style=dotted]; - 190 -> {202} [color=green]; - 190 -> {202} [style=dashed]; - - subgraph cluster_68 { - color=red - 192 [label="Enter function [3]" style="filled" fillcolor=red]; - 193 [label="Delegated constructor call: super() [3]"]; - 194 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 192 -> {193}; - 193 -> {194}; - - subgraph cluster_69 { - color=red - 195 [label="Enter function getter [4]" style="filled" fillcolor=red]; - 196 [label="Exit function getter [4]" style="filled" fillcolor=red]; - } - 195 -> {196}; - - subgraph cluster_70 { - color=red - 197 [label="Enter property [3]" style="filled" fillcolor=red]; - 198 [label="Access variable R|/modifierList| [3]"]; - 199 [label="Exit property [3]" style="filled" fillcolor=red]; - } - 197 -> {198}; - 198 -> {199}; - 199 -> {190} [color=green]; - - subgraph cluster_71 { - color=red - 200 [label="Enter function getter [4]" style="filled" fillcolor=red]; - 201 [label="Exit function getter [4]" style="filled" fillcolor=red]; - } - 200 -> {201}; - - subgraph cluster_72 { - color=red - 202 [label="Enter property [3]" style="filled" fillcolor=red]; - 203 [label="Access variable R|/tree| [3]"]; - 204 [label="Exit property [3]" style="filled" fillcolor=red]; - } - 202 -> {203}; - 203 -> {204}; - 204 -> {191} [color=green]; - - subgraph cluster_73 { - color=red - 205 [label="Enter class Companion [2]" style="filled" fillcolor=red]; - 206 [label="Exit class Companion [2]" style="filled" fillcolor=red]; - } - 205 -> {206} [color=green]; - - subgraph cluster_74 { - color=red - 207 [label="Enter function [3]" style="filled" fillcolor=red]; - 208 [label="Delegated constructor call: super() [3]"]; - 209 [label="Exit function [3]" style="filled" fillcolor=red]; - } - 207 -> {208}; - 208 -> {209}; - - subgraph cluster_75 { - color=red - 210 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; - subgraph cluster_76 { + 174 [label="Enter function getModifierList [3]" style="filled" fillcolor=red]; + subgraph cluster_58 { color=blue - 211 [label="Enter block [3]"]; - subgraph cluster_77 { + 175 [label="Enter block [3]"]; + subgraph cluster_59 { color=blue - 212 [label="Enter when [3]"]; - 213 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; - subgraph cluster_78 { + 176 [label="Enter when [3]"]; + 177 [label="Access variable this@R|/FirModifierList.Companion.getModifierList| [4]"]; + subgraph cluster_60 { color=blue - 214 [label="Enter when branch condition [4]"]; - 215 [label="Const: Null(null) [5]"]; - 216 [label="Equality operator == [5]"]; - 217 [label="Exit when branch condition [4]"]; + 178 [label="Enter when branch condition [4]"]; + 179 [label="Const: Null(null) [5]"]; + 180 [label="Equality operator == [5]"]; + 181 [label="Exit when branch condition [4]"]; } - subgraph cluster_79 { + subgraph cluster_61 { color=blue - 218 [label="Enter when branch condition [4]"]; - 219 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [5]"]; - 220 [label="Exit when branch condition [4]"]; + 182 [label="Enter when branch condition [4]"]; + 183 [label="Type operator: ($subj$ is R|FirPsiSourceElement|) [5]"]; + 184 [label="Exit when branch condition [4]"]; } - subgraph cluster_80 { + subgraph cluster_62 { color=blue - 221 [label="Enter when branch condition [4]"]; - 222 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [5]"]; - 223 [label="Exit when branch condition [4]"]; + 185 [label="Enter when branch condition [4]"]; + 186 [label="Type operator: ($subj$ is R|FirLightSourceElement|) [5]"]; + 187 [label="Exit when branch condition [4]"]; } - 224 [label="Enter when branch result [5]"]; - subgraph cluster_81 { + 188 [label="Enter when branch result [5]"]; + subgraph cluster_63 { color=blue - 225 [label="Enter block [7]"]; - 226 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; - 227 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; - 228 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]"]; - 229 [label="Postponed enter to lambda [8]"]; - subgraph cluster_82 { + 189 [label="Enter block [7]"]; + 190 [label="Access variable R|/FirLightSourceElement.lighterASTNode| [9]"]; + 191 [label="Access variable R|/FirLightSourceElement.treeStructure| [9]"]; + 192 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...) [8]"]; + 193 [label="Postponed enter to lambda [8]"]; + subgraph cluster_64 { color=blue - 275 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; - subgraph cluster_83 { + 239 [label="Enter function anonymousFunction [9]" style="filled" fillcolor=red]; + subgraph cluster_65 { color=blue - 276 [label="Enter block [9]"]; - 277 [label="Access variable R|/it| [9]"]; - 278 [label="Enter safe call [9]"]; - 279 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; - 280 [label="Exit safe call [9]"]; - 281 [label="Access qualifier /TokenType [9]"]; - 282 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; - 283 [label="Equality operator == [9]"]; - 284 [label="Exit block [9]"]; + 240 [label="Enter block [9]"]; + 241 [label="Access variable R|/it| [9]"]; + 242 [label="Enter safe call [9]"]; + 243 [label="Access variable R|/LighterASTNode.tokenType| [9]"]; + 244 [label="Exit safe call [9]"]; + 245 [label="Access qualifier /TokenType [9]"]; + 246 [label="Access variable R|/TokenType.Companion.MODIFIER_LIST| [9]"]; + 247 [label="Equality operator == [9]"]; + 248 [label="Exit block [9]"]; } - 285 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; + 249 [label="Exit function anonymousFunction [9]" style="filled" fillcolor=red]; } - 230 [label="Postponed exit from lambda [8]"]; - 231 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]"]; - 232 [label="Exit lhs of ?: [7]"]; - 233 [label="Enter rhs of ?: [7]"]; - 234 [label="Const: Null(null) [7]"]; - 235 [label="Jump: ^getModifierList Null(null) [7]"]; - 236 [label="Stub [7]" style="filled" fillcolor=gray]; - 237 [label="Lhs of ?: is not null [7]"]; - 238 [label="Exit ?: [7]"]; - 239 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; - 240 [label="Access variable R|/modifierListNode| [8]"]; - 241 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; - 242 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]"]; - 243 [label="Exit block [7]"]; + 194 [label="Postponed exit from lambda [8]"]; + 195 [label="Function call: this@R|/FirModifierList.Companion.getModifierList|.R|/FirLightSourceElement.lighterASTNode|.R|/LighterASTNode.getChildren|(...).R|kotlin/collections/find|(...) [7]"]; + 196 [label="Exit lhs of ?: [7]"]; + 197 [label="Enter rhs of ?: [7]"]; + 198 [label="Const: Null(null) [7]"]; + 199 [label="Jump: ^getModifierList Null(null) [7]"]; + 200 [label="Stub [7]" style="filled" fillcolor=gray]; + 201 [label="Lhs of ?: is not null [7]"]; + 202 [label="Exit ?: [7]"]; + 203 [label="Variable declaration: lval modifierListNode: R|LighterASTNode| [7]"]; + 204 [label="Access variable R|/modifierListNode| [8]"]; + 205 [label="Access variable R|/FirLightSourceElement.treeStructure| [8]"]; + 206 [label="Function call: R|/FirModifierList.FirLightModifierList.FirLightModifierList|(...) [7]"]; + 207 [label="Exit block [7]"]; } - 244 [label="Exit when branch result [6]"]; - 245 [label="Enter when branch result [5]"]; - subgraph cluster_84 { + 208 [label="Exit when branch result [6]"]; + 209 [label="Enter when branch result [5]"]; + subgraph cluster_66 { color=blue - 246 [label="Enter block [6]"]; - 247 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; - 248 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; - 249 [label="Enter safe call [6]"]; - 250 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; - 251 [label="Exit safe call [6]"]; - 252 [label="Enter safe call [6]"]; - 253 [label="Postponed enter to lambda [7]"]; - subgraph cluster_85 { + 210 [label="Enter block [6]"]; + 211 [label="Access variable R|/FirPsiSourceElement.psi| [6]"]; + 212 [label="Type operator: (this@R|/FirModifierList.Companion.getModifierList|.R|/FirPsiSourceElement.psi| as? R|KtModifierListOwner|) [6]"]; + 213 [label="Enter safe call [6]"]; + 214 [label="Access variable R|/KtModifierListOwner.modifierList| [6]"]; + 215 [label="Exit safe call [6]"]; + 216 [label="Enter safe call [6]"]; + 217 [label="Postponed enter to lambda [7]"]; + subgraph cluster_67 { color=blue - 269 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; - subgraph cluster_86 { + 233 [label="Enter function anonymousFunction [8]" style="filled" fillcolor=red]; + subgraph cluster_68 { color=blue - 270 [label="Enter block [8]"]; - 271 [label="Access variable R|/it| [9]"]; - 272 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]"]; - 273 [label="Exit block [8]"]; + 234 [label="Enter block [8]"]; + 235 [label="Access variable R|/it| [9]"]; + 236 [label="Function call: R|/FirModifierList.FirPsiModifierList.FirPsiModifierList|(...) [8]"]; + 237 [label="Exit block [8]"]; } - 274 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; + 238 [label="Exit function anonymousFunction [8]" style="filled" fillcolor=red]; } - 254 [label="Postponed exit from lambda [7]"]; - 255 [label="Function call: $subj$.R|kotlin/let|(...) [6]"]; - 256 [label="Exit safe call [6]"]; - 257 [label="Exit block [6]"]; + 218 [label="Postponed exit from lambda [7]"]; + 219 [label="Function call: $subj$.R|kotlin/let|(...) [6]"]; + 220 [label="Exit safe call [6]"]; + 221 [label="Exit block [6]"]; } - 258 [label="Exit when branch result [5]"]; - 259 [label="Enter when branch result [5]"]; - subgraph cluster_87 { + 222 [label="Exit when branch result [5]"]; + 223 [label="Enter when branch result [5]"]; + subgraph cluster_69 { color=blue - 260 [label="Enter block [5]"]; - 261 [label="Const: Null(null) [5]"]; - 262 [label="Exit block [5]"]; + 224 [label="Enter block [5]"]; + 225 [label="Const: Null(null) [5]"]; + 226 [label="Exit block [5]"]; } - 263 [label="Exit when branch result [4]"]; - 264 [label="Exit when [3]"]; + 227 [label="Exit when branch result [4]"]; + 228 [label="Exit when [3]"]; } - 265 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { + 229 [label="Jump: ^getModifierList when (this@R|/FirModifierList.Companion.getModifierList|) { ==($subj$, Null(null)) -> { Null(null) } @@ -825,143 +699,143 @@ digraph kt44814_kt { } } [3]"]; - 266 [label="Stub [3]" style="filled" fillcolor=gray]; - 267 [label="Exit block [3]" style="filled" fillcolor=gray]; + 230 [label="Stub [3]" style="filled" fillcolor=gray]; + 231 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 268 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; + 232 [label="Exit function getModifierList [3]" style="filled" fillcolor=red]; } + 174 -> {175}; + 175 -> {176}; + 176 -> {177}; + 177 -> {178}; + 178 -> {179}; + 179 -> {180}; + 180 -> {181}; + 181 -> {223 182}; + 182 -> {183}; + 183 -> {184}; + 184 -> {209 185}; + 185 -> {186}; + 186 -> {187}; + 187 -> {188}; + 188 -> {189}; + 189 -> {190}; + 190 -> {191}; + 191 -> {192}; + 192 -> {193}; + 193 -> {239}; + 193 -> {194} [color=red]; + 193 -> {239} [style=dashed]; + 194 -> {195}; + 195 -> {196}; + 196 -> {201 197}; + 197 -> {198}; + 198 -> {199}; + 199 -> {232}; + 199 -> {200} [style=dotted]; + 200 -> {202} [style=dotted]; + 201 -> {202}; + 202 -> {203}; + 203 -> {204}; + 204 -> {205}; + 205 -> {206}; + 206 -> {207}; + 207 -> {208}; + 208 -> {228}; + 209 -> {210}; 210 -> {211}; 211 -> {212}; - 212 -> {213}; + 212 -> {213 215}; 213 -> {214}; 214 -> {215}; - 215 -> {216}; + 215 -> {216 220}; 216 -> {217}; - 217 -> {259 218}; + 217 -> {233}; + 217 -> {218} [color=red]; + 217 -> {233} [style=dashed]; 218 -> {219}; 219 -> {220}; - 220 -> {245 221}; + 220 -> {221}; 221 -> {222}; - 222 -> {223}; + 222 -> {228}; 223 -> {224}; 224 -> {225}; 225 -> {226}; 226 -> {227}; 227 -> {228}; 228 -> {229}; - 229 -> {275}; - 229 -> {230} [color=red]; - 229 -> {275} [style=dashed]; - 230 -> {231}; - 231 -> {232}; - 232 -> {237 233}; + 229 -> {232}; + 229 -> {230} [style=dotted]; + 230 -> {231} [style=dotted]; + 231 -> {232} [style=dotted]; 233 -> {234}; 234 -> {235}; - 235 -> {268}; - 235 -> {236} [style=dotted]; - 236 -> {238} [style=dotted]; + 235 -> {236}; + 236 -> {237}; 237 -> {238}; - 238 -> {239}; - 239 -> {240}; + 238 -> {218} [color=green]; + 239 -> {249 240}; 240 -> {241}; - 241 -> {242}; + 241 -> {242 244}; 242 -> {243}; 243 -> {244}; - 244 -> {264}; + 244 -> {245}; 245 -> {246}; 246 -> {247}; 247 -> {248}; - 248 -> {249 251}; - 249 -> {250}; - 250 -> {251}; - 251 -> {252 256}; - 252 -> {253}; - 253 -> {269}; - 253 -> {254} [color=red]; - 253 -> {269} [style=dashed]; - 254 -> {255}; - 255 -> {256}; - 256 -> {257}; - 257 -> {258}; - 258 -> {264}; - 259 -> {260}; - 260 -> {261}; - 261 -> {262}; - 262 -> {263}; - 263 -> {264}; - 264 -> {265}; - 265 -> {268}; - 265 -> {266} [style=dotted]; - 266 -> {267} [style=dotted]; - 267 -> {268} [style=dotted]; - 269 -> {270}; - 270 -> {271}; - 271 -> {272}; - 272 -> {273}; - 273 -> {274}; - 274 -> {254} [color=green]; - 275 -> {285 276}; - 276 -> {277}; - 277 -> {278 280}; - 278 -> {279}; - 279 -> {280}; - 280 -> {281}; - 281 -> {282}; - 282 -> {283}; - 283 -> {284}; - 284 -> {285}; - 285 -> {230} [color=green]; - 285 -> {275} [color=green style=dashed]; + 248 -> {249}; + 249 -> {194} [color=green]; + 249 -> {239} [color=green style=dashed]; - subgraph cluster_88 { + subgraph cluster_70 { color=red - 286 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; - subgraph cluster_89 { + 250 [label="Enter function boxImpl [3]" style="filled" fillcolor=red]; + subgraph cluster_71 { color=blue - 287 [label="Enter block [3]"]; - 288 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]"]; - 289 [label="Function call: R|kotlin/collections/listOf|(...) [5]"]; - 290 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]"]; - 291 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]"]; - 292 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]"]; - 293 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; - 294 [label="Access variable R|/sourceElement| [4]"]; - 295 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]"]; - 296 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; - subgraph cluster_90 { + 251 [label="Enter block [3]"]; + 252 [label="Function call: R|/LighterASTNode.LighterASTNode|() [6]"]; + 253 [label="Function call: R|kotlin/collections/listOf|(...) [5]"]; + 254 [label="Function call: R|/LighterASTNode.LighterASTNode|(...) [4]"]; + 255 [label="Function call: R|/FlyweightCapableTreeStructure.FlyweightCapableTreeStructure|() [4]"]; + 256 [label="Function call: R|/FirLightSourceElement.FirLightSourceElement|(...) [3]"]; + 257 [label="Variable declaration: lval sourceElement: R|FirSourceElement?| [3]"]; + 258 [label="Access variable R|/sourceElement| [4]"]; + 259 [label="Function call: (this@R|/FirModifierList.Companion|, R|/sourceElement|).R|/FirModifierList.Companion.getModifierList|() [3]"]; + 260 [label="Variable declaration: lval result: R|FirModifierList?| [3]"]; + subgraph cluster_72 { color=blue - 297 [label="Enter when [3]"]; - subgraph cluster_91 { + 261 [label="Enter when [3]"]; + subgraph cluster_73 { color=blue - 298 [label="Enter when branch condition [4]"]; - 299 [label="Access variable R|/result| [5]"]; - 300 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; - 301 [label="Exit when branch condition [4]"]; + 262 [label="Enter when branch condition [4]"]; + 263 [label="Access variable R|/result| [5]"]; + 264 [label="Type operator: (R|/result| is R|FirModifierList.FirLightModifierList|) [5]"]; + 265 [label="Exit when branch condition [4]"]; } - subgraph cluster_92 { + subgraph cluster_74 { color=blue - 302 [label="Enter when branch condition else [4]"]; - 303 [label="Exit when branch condition [4]"]; + 266 [label="Enter when branch condition else [4]"]; + 267 [label="Exit when branch condition [4]"]; } - 304 [label="Enter when branch result [5]"]; - subgraph cluster_93 { + 268 [label="Enter when branch result [5]"]; + subgraph cluster_75 { color=blue - 305 [label="Enter block [6]"]; - 306 [label="Const: String(Fail) [6]"]; - 307 [label="Exit block [6]"]; + 269 [label="Enter block [6]"]; + 270 [label="Const: String(Fail) [6]"]; + 271 [label="Exit block [6]"]; } - 308 [label="Exit when branch result [5]"]; - 309 [label="Enter when branch result [5]"]; - subgraph cluster_94 { + 272 [label="Exit when branch result [5]"]; + 273 [label="Enter when branch result [5]"]; + subgraph cluster_76 { color=blue - 310 [label="Enter block [5]"]; - 311 [label="Const: String(OK) [5]"]; - 312 [label="Exit block [5]"]; + 274 [label="Enter block [5]"]; + 275 [label="Const: String(OK) [5]"]; + 276 [label="Exit block [5]"]; } - 313 [label="Exit when branch result [4]"]; - 314 [label="Exit when [3]"]; + 277 [label="Exit when branch result [4]"]; + 278 [label="Exit when [3]"]; } - 315 [label="Jump: ^boxImpl when () { + 279 [label="Jump: ^boxImpl when () { (R|/result| is R|FirModifierList.FirLightModifierList|) -> { String(OK) } @@ -970,66 +844,66 @@ digraph kt44814_kt { } } [3]"]; - 316 [label="Stub [3]" style="filled" fillcolor=gray]; - 317 [label="Exit block [3]" style="filled" fillcolor=gray]; + 280 [label="Stub [3]" style="filled" fillcolor=gray]; + 281 [label="Exit block [3]" style="filled" fillcolor=gray]; } - 318 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; + 282 [label="Exit function boxImpl [3]" style="filled" fillcolor=red]; } - 286 -> {287}; - 287 -> {288}; - 288 -> {289}; - 289 -> {290}; - 290 -> {291}; - 291 -> {292}; - 292 -> {293}; - 293 -> {294}; - 294 -> {295}; - 295 -> {296}; - 296 -> {297}; - 297 -> {298}; - 298 -> {299}; - 299 -> {300}; - 300 -> {301}; - 301 -> {309 302}; - 302 -> {303}; - 303 -> {304}; - 304 -> {305}; - 305 -> {306}; - 306 -> {307}; - 307 -> {308}; - 308 -> {314}; - 309 -> {310}; - 310 -> {311}; - 311 -> {312}; - 312 -> {313}; - 313 -> {314}; - 314 -> {315}; - 315 -> {318}; - 315 -> {316} [style=dotted]; - 316 -> {317} [style=dotted]; - 317 -> {318} [style=dotted]; + 250 -> {251}; + 251 -> {252}; + 252 -> {253}; + 253 -> {254}; + 254 -> {255}; + 255 -> {256}; + 256 -> {257}; + 257 -> {258}; + 258 -> {259}; + 259 -> {260}; + 260 -> {261}; + 261 -> {262}; + 262 -> {263}; + 263 -> {264}; + 264 -> {265}; + 265 -> {273 266}; + 266 -> {267}; + 267 -> {268}; + 268 -> {269}; + 269 -> {270}; + 270 -> {271}; + 271 -> {272}; + 272 -> {278}; + 273 -> {274}; + 274 -> {275}; + 275 -> {276}; + 276 -> {277}; + 277 -> {278}; + 278 -> {279}; + 279 -> {282}; + 279 -> {280} [style=dotted]; + 280 -> {281} [style=dotted]; + 281 -> {282} [style=dotted]; - subgraph cluster_95 { + subgraph cluster_77 { color=red - 319 [label="Enter function box [1]" style="filled" fillcolor=red]; - subgraph cluster_96 { + 283 [label="Enter function box [1]" style="filled" fillcolor=red]; + subgraph cluster_78 { color=blue - 320 [label="Enter block [1]"]; - 321 [label="Access qualifier /FirModifierList [2]"]; - 322 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; - 323 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; - 324 [label="Stub [1]" style="filled" fillcolor=gray]; - 325 [label="Exit block [1]" style="filled" fillcolor=gray]; + 284 [label="Enter block [1]"]; + 285 [label="Access qualifier /FirModifierList [2]"]; + 286 [label="Function call: Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; + 287 [label="Jump: ^box Q|FirModifierList|.R|/FirModifierList.Companion.boxImpl|() [1]"]; + 288 [label="Stub [1]" style="filled" fillcolor=gray]; + 289 [label="Exit block [1]" style="filled" fillcolor=gray]; } - 326 [label="Exit function box [1]" style="filled" fillcolor=red]; + 290 [label="Exit function box [1]" style="filled" fillcolor=red]; } - 319 -> {320}; - 320 -> {321}; - 321 -> {322}; - 322 -> {323}; - 323 -> {326}; - 323 -> {324} [style=dotted]; - 324 -> {325} [style=dotted]; - 325 -> {326} [style=dotted]; + 283 -> {284}; + 284 -> {285}; + 285 -> {286}; + 286 -> {287}; + 287 -> {290}; + 287 -> {288} [style=dotted]; + 288 -> {289} [style=dotted]; + 289 -> {290} [style=dotted]; } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/propertyWithInitializer.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/propertyWithInitializer.txt index 80a8e1f5897..60e0f98be26 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/propertyWithInitializer.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/propertyWithInitializer.txt @@ -3,4 +3,4 @@ FILE: propertyWithInitializer.kt #(R|/property|) } public final [STATUS] val property: R|kotlin/Int| = LAZY_EXPRESSION - [STATUS] public get(): R|kotlin/Int| + [BODY_RESOLVE] public get(): R|kotlin/Int| diff --git a/idea/testData/fir/lazyResolve/elvis/main.txt b/idea/testData/fir/lazyResolve/elvis/main.txt index 92856ceab57..8370e550749 100644 --- a/idea/testData/fir/lazyResolve/elvis/main.txt +++ b/idea/testData/fir/lazyResolve/elvis/main.txt @@ -5,7 +5,7 @@ FILE: main.kt } public final [STATUS] val value: R|kotlin/String?| = R|/value| - [STATUS] public get(): R|kotlin/String?| + [BODY_RESOLVE] public get(): R|kotlin/String?| public final [BODY_RESOLVE] fun foo(): R|kotlin/String| { ^foo this@R|elvis/WithElvis|.R|elvis/WithElvis.value| ?: String() diff --git a/idea/testData/fir/lazyResolve/inSecondary/main.txt b/idea/testData/fir/lazyResolve/inSecondary/main.txt index 9ef8fc78fca..795d89f45f5 100644 --- a/idea/testData/fir/lazyResolve/inSecondary/main.txt +++ b/idea/testData/fir/lazyResolve/inSecondary/main.txt @@ -1,7 +1,7 @@ FILE: main.kt public final [STATUS] class Foo : R|kotlin/Any| { public final [STATUS] val x: R|kotlin/Int| - [STATUS] public get(): R|kotlin/Int| + [BODY_RESOLVE] public get(): R|kotlin/Int| public [BODY_RESOLVE] constructor(): R|Foo| { super()