diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirControlFlowStatementsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirControlFlowStatementsResolveTransformer.kt index 798244fb8da..c1b7e1edda1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirControlFlowStatementsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirControlFlowStatementsResolveTransformer.kt @@ -69,6 +69,7 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirBodyResolveTran whenExpression = whenExpression.transformBranches(transformer, null) whenExpression = syntheticCallGenerator.generateCalleeForWhenExpression(whenExpression) ?: run { + whenExpression = whenExpression.transformSingle(whenExhaustivenessTransformer, null) dataFlowAnalyzer.exitWhenExpression(whenExpression) whenExpression.resultType = FirErrorTypeRefImpl(null, "") return@with whenExpression.compose() diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/casts.dot b/compiler/fir/resolve/testData/resolve/smartcasts/casts.dot index 11e66f53ded..f08ce150454 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/casts.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/casts.dot @@ -278,72 +278,70 @@ digraph casts_kt { 102 [label="Enter when branch condition else"]; 103 [label="Exit when branch condition"]; } - 104 [label="Synthetic else branch"]; - 105 [label="Enter when branch result"]; + 104 [label="Enter when branch result"]; subgraph cluster_26 { color=blue - 106 [label="Enter block"]; - 107 [label="Access variable R|/b|"]; - 108 [label="Function call: R|/b|.#()"]; - 109 [label="Exit block"]; + 105 [label="Enter block"]; + 106 [label="Access variable R|/b|"]; + 107 [label="Function call: R|/b|.#()"]; + 108 [label="Exit block"]; } - 110 [label="Exit when branch result"]; - 111 [label="Enter when branch result"]; + 109 [label="Exit when branch result"]; + 110 [label="Enter when branch result"]; subgraph cluster_27 { color=blue - 112 [label="Enter block"]; - 113 [label="Access variable R|/b|"]; - 114 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 115 [label="Exit block"]; + 111 [label="Enter block"]; + 112 [label="Access variable R|/b|"]; + 113 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 114 [label="Exit block"]; } - 116 [label="Exit when branch result"]; - 117 [label="Exit when"]; + 115 [label="Exit when branch result"]; + 116 [label="Exit when"]; } - 118 [label="Access variable R|/b|"]; - 119 [label="Function call: R|/b|.#()"]; + 117 [label="Access variable R|/b|"]; + 118 [label="Function call: R|/b|.#()"]; subgraph cluster_28 { color=blue - 120 [label="Enter when"]; + 119 [label="Enter when"]; subgraph cluster_29 { color=blue - 121 [label="Enter when branch condition "]; - 122 [label="Access variable R|/b|"]; - 123 [label="Type operator: b as? Boolean"]; - 124 [label="Const: Null(null)"]; - 125 [label="Operator =="]; - 126 [label="Exit when branch condition"]; + 120 [label="Enter when branch condition "]; + 121 [label="Access variable R|/b|"]; + 122 [label="Type operator: b as? Boolean"]; + 123 [label="Const: Null(null)"]; + 124 [label="Operator =="]; + 125 [label="Exit when branch condition"]; } subgraph cluster_30 { color=blue - 127 [label="Enter when branch condition else"]; - 128 [label="Exit when branch condition"]; + 126 [label="Enter when branch condition else"]; + 127 [label="Exit when branch condition"]; } - 129 [label="Synthetic else branch"]; - 130 [label="Enter when branch result"]; + 128 [label="Enter when branch result"]; subgraph cluster_31 { color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/b|"]; - 133 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 134 [label="Exit block"]; + 129 [label="Enter block"]; + 130 [label="Access variable R|/b|"]; + 131 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 132 [label="Exit block"]; } - 135 [label="Exit when branch result"]; - 136 [label="Enter when branch result"]; + 133 [label="Exit when branch result"]; + 134 [label="Enter when branch result"]; subgraph cluster_32 { color=blue - 137 [label="Enter block"]; - 138 [label="Access variable R|/b|"]; - 139 [label="Function call: R|/b|.#()"]; - 140 [label="Exit block"]; + 135 [label="Enter block"]; + 136 [label="Access variable R|/b|"]; + 137 [label="Function call: R|/b|.#()"]; + 138 [label="Exit block"]; } - 141 [label="Exit when branch result"]; - 142 [label="Exit when"]; + 139 [label="Exit when branch result"]; + 140 [label="Exit when"]; } - 143 [label="Access variable R|/b|"]; - 144 [label="Function call: R|/b|.#()"]; - 145 [label="Exit block"]; + 141 [label="Access variable R|/b|"]; + 142 [label="Function call: R|/b|.#()"]; + 143 [label="Exit block"]; } - 146 [label="Exit function test_4" style="filled" fillcolor=red]; + 144 [label="Exit function test_4" style="filled" fillcolor=red]; } 93 -> {94}; @@ -354,16 +352,16 @@ digraph casts_kt { 98 -> {99}; 99 -> {100}; 100 -> {101}; - 101 -> {111 102}; + 101 -> {110 102}; 102 -> {103}; - 103 -> {105 104}; - 104 -> {117}; + 103 -> {104}; + 104 -> {105}; 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; - 109 -> {110}; - 110 -> {117}; + 109 -> {116}; + 110 -> {111}; 111 -> {112}; 112 -> {113}; 113 -> {114}; @@ -378,17 +376,17 @@ digraph casts_kt { 122 -> {123}; 123 -> {124}; 124 -> {125}; - 125 -> {126}; - 126 -> {136 127}; + 125 -> {134 126}; + 126 -> {127}; 127 -> {128}; - 128 -> {130 129}; - 129 -> {142}; + 128 -> {129}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; 132 -> {133}; - 133 -> {134}; + 133 -> {140}; 134 -> {135}; - 135 -> {142}; + 135 -> {136}; 136 -> {137}; 137 -> {138}; 138 -> {139}; @@ -397,7 +395,5 @@ digraph casts_kt { 141 -> {142}; 142 -> {143}; 143 -> {144}; - 144 -> {145}; - 145 -> {146}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot b/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot index bf36304a0ed..1db858f3b2d 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot @@ -51,30 +51,29 @@ digraph equalsToBoolean_kt { 16 [label="Enter when branch condition else"]; 17 [label="Exit when branch condition"]; } - 18 [label="Synthetic else branch"]; - 19 [label="Enter when branch result"]; + 18 [label="Enter when branch result"]; subgraph cluster_8 { color=blue - 20 [label="Enter block"]; - 21 [label="Access variable R|/b|"]; - 22 [label="Function call: R|/b|.#()"]; - 23 [label="Exit block"]; + 19 [label="Enter block"]; + 20 [label="Access variable R|/b|"]; + 21 [label="Function call: R|/b|.#()"]; + 22 [label="Exit block"]; } - 24 [label="Exit when branch result"]; - 25 [label="Enter when branch result"]; + 23 [label="Exit when branch result"]; + 24 [label="Enter when branch result"]; subgraph cluster_9 { color=blue - 26 [label="Enter block"]; - 27 [label="Access variable R|/b|"]; - 28 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 29 [label="Exit block"]; + 25 [label="Enter block"]; + 26 [label="Access variable R|/b|"]; + 27 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 28 [label="Exit block"]; } - 30 [label="Exit when branch result"]; - 31 [label="Exit when"]; + 29 [label="Exit when branch result"]; + 30 [label="Exit when"]; } - 32 [label="Exit block"]; + 31 [label="Exit block"]; } - 33 [label="Exit function test_1" style="filled" fillcolor=red]; + 32 [label="Exit function test_1" style="filled" fillcolor=red]; } 6 -> {7}; @@ -86,16 +85,16 @@ digraph equalsToBoolean_kt { 12 -> {13}; 13 -> {14}; 14 -> {15}; - 15 -> {25 16}; + 15 -> {24 16}; 16 -> {17}; - 17 -> {19 18}; - 18 -> {31}; + 17 -> {18}; + 18 -> {19}; 19 -> {20}; 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {24}; - 24 -> {31}; + 23 -> {30}; + 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; @@ -103,58 +102,57 @@ digraph equalsToBoolean_kt { 29 -> {30}; 30 -> {31}; 31 -> {32}; - 32 -> {33}; subgraph cluster_10 { color=red - 34 [label="Enter function test_2" style="filled" fillcolor=red]; + 33 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_11 { color=blue - 35 [label="Enter block"]; + 34 [label="Enter block"]; subgraph cluster_12 { color=blue - 36 [label="Enter when"]; + 35 [label="Enter when"]; subgraph cluster_13 { color=blue - 37 [label="Enter when branch condition "]; - 38 [label="Access variable R|/b|"]; - 39 [label="Const: Boolean(true)"]; - 40 [label="Operator =="]; - 41 [label="Const: Boolean(true)"]; - 42 [label="Operator !="]; - 43 [label="Exit when branch condition"]; + 36 [label="Enter when branch condition "]; + 37 [label="Access variable R|/b|"]; + 38 [label="Const: Boolean(true)"]; + 39 [label="Operator =="]; + 40 [label="Const: Boolean(true)"]; + 41 [label="Operator !="]; + 42 [label="Exit when branch condition"]; } subgraph cluster_14 { color=blue - 44 [label="Enter when branch condition else"]; - 45 [label="Exit when branch condition"]; + 43 [label="Enter when branch condition else"]; + 44 [label="Exit when branch condition"]; } - 46 [label="Synthetic else branch"]; - 47 [label="Enter when branch result"]; + 45 [label="Enter when branch result"]; subgraph cluster_15 { color=blue - 48 [label="Enter block"]; - 49 [label="Access variable R|/b|"]; - 50 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 51 [label="Exit block"]; + 46 [label="Enter block"]; + 47 [label="Access variable R|/b|"]; + 48 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 49 [label="Exit block"]; } - 52 [label="Exit when branch result"]; - 53 [label="Enter when branch result"]; + 50 [label="Exit when branch result"]; + 51 [label="Enter when branch result"]; subgraph cluster_16 { color=blue - 54 [label="Enter block"]; - 55 [label="Access variable R|/b|"]; - 56 [label="Function call: R|/b|.#()"]; - 57 [label="Exit block"]; + 52 [label="Enter block"]; + 53 [label="Access variable R|/b|"]; + 54 [label="Function call: R|/b|.#()"]; + 55 [label="Exit block"]; } - 58 [label="Exit when branch result"]; - 59 [label="Exit when"]; + 56 [label="Exit when branch result"]; + 57 [label="Exit when"]; } - 60 [label="Exit block"]; + 58 [label="Exit block"]; } - 61 [label="Exit function test_2" style="filled" fillcolor=red]; + 59 [label="Exit function test_2" style="filled" fillcolor=red]; } + 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; @@ -163,76 +161,75 @@ digraph equalsToBoolean_kt { 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; - 43 -> {53 44}; + 42 -> {51 43}; + 43 -> {44}; 44 -> {45}; - 45 -> {47 46}; - 46 -> {59}; + 45 -> {46}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51}; + 50 -> {57}; 51 -> {52}; - 52 -> {59}; + 52 -> {53}; 53 -> {54}; 54 -> {55}; 55 -> {56}; 56 -> {57}; 57 -> {58}; 58 -> {59}; - 59 -> {60}; - 60 -> {61}; subgraph cluster_17 { color=red - 62 [label="Enter function test_3" style="filled" fillcolor=red]; + 60 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_18 { color=blue - 63 [label="Enter block"]; + 61 [label="Enter block"]; subgraph cluster_19 { color=blue - 64 [label="Enter when"]; + 62 [label="Enter when"]; subgraph cluster_20 { color=blue - 65 [label="Enter when branch condition "]; - 66 [label="Access variable R|/b|"]; - 67 [label="Const: Boolean(true)"]; + 63 [label="Enter when branch condition "]; + 64 [label="Access variable R|/b|"]; + 65 [label="Const: Boolean(true)"]; + 66 [label="Operator =="]; + 67 [label="Const: Boolean(false)"]; 68 [label="Operator =="]; - 69 [label="Const: Boolean(false)"]; - 70 [label="Operator =="]; - 71 [label="Exit when branch condition"]; + 69 [label="Exit when branch condition"]; } subgraph cluster_21 { color=blue - 72 [label="Enter when branch condition else"]; - 73 [label="Exit when branch condition"]; + 70 [label="Enter when branch condition else"]; + 71 [label="Exit when branch condition"]; } - 74 [label="Synthetic else branch"]; - 75 [label="Enter when branch result"]; + 72 [label="Enter when branch result"]; subgraph cluster_22 { color=blue - 76 [label="Enter block"]; - 77 [label="Access variable R|/b|"]; - 78 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 79 [label="Exit block"]; + 73 [label="Enter block"]; + 74 [label="Access variable R|/b|"]; + 75 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 76 [label="Exit block"]; } - 80 [label="Exit when branch result"]; - 81 [label="Enter when branch result"]; + 77 [label="Exit when branch result"]; + 78 [label="Enter when branch result"]; subgraph cluster_23 { color=blue - 82 [label="Enter block"]; - 83 [label="Access variable R|/b|"]; - 84 [label="Function call: R|/b|.#()"]; - 85 [label="Exit block"]; + 79 [label="Enter block"]; + 80 [label="Access variable R|/b|"]; + 81 [label="Function call: R|/b|.#()"]; + 82 [label="Exit block"]; } - 86 [label="Exit when branch result"]; - 87 [label="Exit when"]; + 83 [label="Exit when branch result"]; + 84 [label="Exit when"]; } - 88 [label="Exit block"]; + 85 [label="Exit block"]; } - 89 [label="Exit function test_3" style="filled" fillcolor=red]; + 86 [label="Exit function test_3" style="filled" fillcolor=red]; } + 60 -> {61}; + 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; @@ -240,415 +237,402 @@ digraph equalsToBoolean_kt { 66 -> {67}; 67 -> {68}; 68 -> {69}; - 69 -> {70}; + 69 -> {78 70}; 70 -> {71}; - 71 -> {81 72}; + 71 -> {72}; 72 -> {73}; - 73 -> {75 74}; - 74 -> {87}; + 73 -> {74}; + 74 -> {75}; 75 -> {76}; 76 -> {77}; - 77 -> {78}; + 77 -> {84}; 78 -> {79}; 79 -> {80}; - 80 -> {87}; + 80 -> {81}; 81 -> {82}; 82 -> {83}; 83 -> {84}; 84 -> {85}; 85 -> {86}; - 86 -> {87}; - 87 -> {88}; - 88 -> {89}; subgraph cluster_24 { color=red - 90 [label="Enter function test_4" style="filled" fillcolor=red]; + 87 [label="Enter function test_4" style="filled" fillcolor=red]; subgraph cluster_25 { color=blue - 91 [label="Enter block"]; + 88 [label="Enter block"]; subgraph cluster_26 { color=blue - 92 [label="Enter when"]; + 89 [label="Enter when"]; subgraph cluster_27 { color=blue - 93 [label="Enter when branch condition "]; - 94 [label="Access variable R|/b|"]; - 95 [label="Const: Boolean(true)"]; - 96 [label="Operator =="]; - 97 [label="Const: Boolean(false)"]; - 98 [label="Operator !="]; - 99 [label="Exit when branch condition"]; + 90 [label="Enter when branch condition "]; + 91 [label="Access variable R|/b|"]; + 92 [label="Const: Boolean(true)"]; + 93 [label="Operator =="]; + 94 [label="Const: Boolean(false)"]; + 95 [label="Operator !="]; + 96 [label="Exit when branch condition"]; } subgraph cluster_28 { color=blue - 100 [label="Enter when branch condition else"]; - 101 [label="Exit when branch condition"]; + 97 [label="Enter when branch condition else"]; + 98 [label="Exit when branch condition"]; } - 102 [label="Synthetic else branch"]; - 103 [label="Enter when branch result"]; + 99 [label="Enter when branch result"]; subgraph cluster_29 { color=blue - 104 [label="Enter block"]; - 105 [label="Access variable R|/b|"]; - 106 [label="Function call: R|/b|.#()"]; - 107 [label="Exit block"]; + 100 [label="Enter block"]; + 101 [label="Access variable R|/b|"]; + 102 [label="Function call: R|/b|.#()"]; + 103 [label="Exit block"]; } - 108 [label="Exit when branch result"]; - 109 [label="Enter when branch result"]; + 104 [label="Exit when branch result"]; + 105 [label="Enter when branch result"]; subgraph cluster_30 { color=blue - 110 [label="Enter block"]; - 111 [label="Access variable R|/b|"]; - 112 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 113 [label="Exit block"]; + 106 [label="Enter block"]; + 107 [label="Access variable R|/b|"]; + 108 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 109 [label="Exit block"]; } - 114 [label="Exit when branch result"]; - 115 [label="Exit when"]; + 110 [label="Exit when branch result"]; + 111 [label="Exit when"]; } - 116 [label="Exit block"]; + 112 [label="Exit block"]; } - 117 [label="Exit function test_4" style="filled" fillcolor=red]; + 113 [label="Exit function test_4" style="filled" fillcolor=red]; } + 87 -> {88}; + 88 -> {89}; + 89 -> {90}; 90 -> {91}; 91 -> {92}; 92 -> {93}; 93 -> {94}; 94 -> {95}; 95 -> {96}; - 96 -> {97}; + 96 -> {105 97}; 97 -> {98}; 98 -> {99}; - 99 -> {109 100}; + 99 -> {100}; 100 -> {101}; - 101 -> {103 102}; - 102 -> {115}; + 101 -> {102}; + 102 -> {103}; 103 -> {104}; - 104 -> {105}; + 104 -> {111}; 105 -> {106}; 106 -> {107}; 107 -> {108}; - 108 -> {115}; + 108 -> {109}; 109 -> {110}; 110 -> {111}; 111 -> {112}; 112 -> {113}; - 113 -> {114}; - 114 -> {115}; - 115 -> {116}; - 116 -> {117}; subgraph cluster_31 { color=red - 118 [label="Enter function test_5" style="filled" fillcolor=red]; + 114 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_32 { color=blue - 119 [label="Enter block"]; + 115 [label="Enter block"]; subgraph cluster_33 { color=blue - 120 [label="Enter when"]; + 116 [label="Enter when"]; subgraph cluster_34 { color=blue - 121 [label="Enter when branch condition "]; - 122 [label="Access variable R|/b|"]; - 123 [label="Const: Boolean(true)"]; - 124 [label="Operator !="]; - 125 [label="Const: Boolean(true)"]; - 126 [label="Operator =="]; - 127 [label="Exit when branch condition"]; + 117 [label="Enter when branch condition "]; + 118 [label="Access variable R|/b|"]; + 119 [label="Const: Boolean(true)"]; + 120 [label="Operator !="]; + 121 [label="Const: Boolean(true)"]; + 122 [label="Operator =="]; + 123 [label="Exit when branch condition"]; } subgraph cluster_35 { color=blue - 128 [label="Enter when branch condition else"]; - 129 [label="Exit when branch condition"]; + 124 [label="Enter when branch condition else"]; + 125 [label="Exit when branch condition"]; } - 130 [label="Synthetic else branch"]; - 131 [label="Enter when branch result"]; + 126 [label="Enter when branch result"]; subgraph cluster_36 { color=blue - 132 [label="Enter block"]; - 133 [label="Access variable R|/b|"]; - 134 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 135 [label="Exit block"]; + 127 [label="Enter block"]; + 128 [label="Access variable R|/b|"]; + 129 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 130 [label="Exit block"]; } - 136 [label="Exit when branch result"]; - 137 [label="Enter when branch result"]; + 131 [label="Exit when branch result"]; + 132 [label="Enter when branch result"]; subgraph cluster_37 { color=blue - 138 [label="Enter block"]; - 139 [label="Access variable R|/b|"]; - 140 [label="Function call: R|/b|.#()"]; - 141 [label="Exit block"]; + 133 [label="Enter block"]; + 134 [label="Access variable R|/b|"]; + 135 [label="Function call: R|/b|.#()"]; + 136 [label="Exit block"]; } - 142 [label="Exit when branch result"]; - 143 [label="Exit when"]; + 137 [label="Exit when branch result"]; + 138 [label="Exit when"]; } - 144 [label="Exit block"]; + 139 [label="Exit block"]; } - 145 [label="Exit function test_5" style="filled" fillcolor=red]; + 140 [label="Exit function test_5" style="filled" fillcolor=red]; } + 114 -> {115}; + 115 -> {116}; + 116 -> {117}; + 117 -> {118}; 118 -> {119}; 119 -> {120}; 120 -> {121}; 121 -> {122}; 122 -> {123}; - 123 -> {124}; + 123 -> {132 124}; 124 -> {125}; 125 -> {126}; 126 -> {127}; - 127 -> {137 128}; + 127 -> {128}; 128 -> {129}; - 129 -> {131 130}; - 130 -> {143}; - 131 -> {132}; + 129 -> {130}; + 130 -> {131}; + 131 -> {138}; 132 -> {133}; 133 -> {134}; 134 -> {135}; 135 -> {136}; - 136 -> {143}; + 136 -> {137}; 137 -> {138}; 138 -> {139}; 139 -> {140}; - 140 -> {141}; + + subgraph cluster_38 { + color=red + 141 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_39 { + color=blue + 142 [label="Enter block"]; + subgraph cluster_40 { + color=blue + 143 [label="Enter when"]; + subgraph cluster_41 { + color=blue + 144 [label="Enter when branch condition "]; + 145 [label="Access variable R|/b|"]; + 146 [label="Const: Boolean(true)"]; + 147 [label="Operator !="]; + 148 [label="Const: Boolean(true)"]; + 149 [label="Operator !="]; + 150 [label="Exit when branch condition"]; + } + subgraph cluster_42 { + color=blue + 151 [label="Enter when branch condition else"]; + 152 [label="Exit when branch condition"]; + } + 153 [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="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"]; + } + 166 [label="Exit block"]; + } + 167 [label="Exit function test_6" style="filled" fillcolor=red]; + } + 141 -> {142}; 142 -> {143}; 143 -> {144}; 144 -> {145}; - - subgraph cluster_38 { - color=red - 146 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_39 { - color=blue - 147 [label="Enter block"]; - subgraph cluster_40 { - color=blue - 148 [label="Enter when"]; - subgraph cluster_41 { - color=blue - 149 [label="Enter when branch condition "]; - 150 [label="Access variable R|/b|"]; - 151 [label="Const: Boolean(true)"]; - 152 [label="Operator !="]; - 153 [label="Const: Boolean(true)"]; - 154 [label="Operator !="]; - 155 [label="Exit when branch condition"]; - } - subgraph cluster_42 { - color=blue - 156 [label="Enter when branch condition else"]; - 157 [label="Exit when branch condition"]; - } - 158 [label="Synthetic else branch"]; - 159 [label="Enter when branch result"]; - subgraph cluster_43 { - color=blue - 160 [label="Enter block"]; - 161 [label="Access variable R|/b|"]; - 162 [label="Function call: R|/b|.#()"]; - 163 [label="Exit block"]; - } - 164 [label="Exit when branch result"]; - 165 [label="Enter when branch result"]; - subgraph cluster_44 { - color=blue - 166 [label="Enter block"]; - 167 [label="Access variable R|/b|"]; - 168 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 169 [label="Exit block"]; - } - 170 [label="Exit when branch result"]; - 171 [label="Exit when"]; - } - 172 [label="Exit block"]; - } - 173 [label="Exit function test_6" style="filled" fillcolor=red]; - } - + 145 -> {146}; 146 -> {147}; 147 -> {148}; 148 -> {149}; 149 -> {150}; - 150 -> {151}; + 150 -> {159 151}; 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; - 155 -> {165 156}; + 155 -> {156}; 156 -> {157}; - 157 -> {159 158}; - 158 -> {171}; + 157 -> {158}; + 158 -> {165}; 159 -> {160}; 160 -> {161}; 161 -> {162}; 162 -> {163}; 163 -> {164}; - 164 -> {171}; + 164 -> {165}; 165 -> {166}; 166 -> {167}; - 167 -> {168}; + + subgraph cluster_45 { + color=red + 168 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_46 { + color=blue + 169 [label="Enter block"]; + subgraph cluster_47 { + color=blue + 170 [label="Enter when"]; + subgraph cluster_48 { + color=blue + 171 [label="Enter when branch condition "]; + 172 [label="Access variable R|/b|"]; + 173 [label="Const: Boolean(true)"]; + 174 [label="Operator !="]; + 175 [label="Const: Boolean(false)"]; + 176 [label="Operator =="]; + 177 [label="Exit when branch condition"]; + } + subgraph cluster_49 { + color=blue + 178 [label="Enter when branch condition else"]; + 179 [label="Exit when branch condition"]; + } + 180 [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="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"]; + } + 193 [label="Exit block"]; + } + 194 [label="Exit function test_7" style="filled" fillcolor=red]; + } + 168 -> {169}; 169 -> {170}; 170 -> {171}; 171 -> {172}; 172 -> {173}; - - subgraph cluster_45 { - color=red - 174 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_46 { - color=blue - 175 [label="Enter block"]; - subgraph cluster_47 { - color=blue - 176 [label="Enter when"]; - subgraph cluster_48 { - color=blue - 177 [label="Enter when branch condition "]; - 178 [label="Access variable R|/b|"]; - 179 [label="Const: Boolean(true)"]; - 180 [label="Operator !="]; - 181 [label="Const: Boolean(false)"]; - 182 [label="Operator =="]; - 183 [label="Exit when branch condition"]; - } - subgraph cluster_49 { - color=blue - 184 [label="Enter when branch condition else"]; - 185 [label="Exit when branch condition"]; - } - 186 [label="Synthetic else branch"]; - 187 [label="Enter when branch result"]; - subgraph cluster_50 { - color=blue - 188 [label="Enter block"]; - 189 [label="Access variable R|/b|"]; - 190 [label="Function call: R|/b|.#()"]; - 191 [label="Exit block"]; - } - 192 [label="Exit when branch result"]; - 193 [label="Enter when branch result"]; - subgraph cluster_51 { - color=blue - 194 [label="Enter block"]; - 195 [label="Access variable R|/b|"]; - 196 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 197 [label="Exit block"]; - } - 198 [label="Exit when branch result"]; - 199 [label="Exit when"]; - } - 200 [label="Exit block"]; - } - 201 [label="Exit function test_7" style="filled" fillcolor=red]; - } - + 173 -> {174}; 174 -> {175}; 175 -> {176}; 176 -> {177}; - 177 -> {178}; + 177 -> {186 178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; 181 -> {182}; 182 -> {183}; - 183 -> {193 184}; + 183 -> {184}; 184 -> {185}; - 185 -> {187 186}; - 186 -> {199}; + 185 -> {192}; + 186 -> {187}; 187 -> {188}; 188 -> {189}; 189 -> {190}; 190 -> {191}; 191 -> {192}; - 192 -> {199}; + 192 -> {193}; 193 -> {194}; - 194 -> {195}; + + subgraph cluster_52 { + color=red + 195 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_53 { + color=blue + 196 [label="Enter block"]; + subgraph cluster_54 { + color=blue + 197 [label="Enter when"]; + subgraph cluster_55 { + color=blue + 198 [label="Enter when branch condition "]; + 199 [label="Access variable R|/b|"]; + 200 [label="Const: Boolean(true)"]; + 201 [label="Operator !="]; + 202 [label="Const: Boolean(false)"]; + 203 [label="Operator !="]; + 204 [label="Exit when branch condition"]; + } + subgraph cluster_56 { + color=blue + 205 [label="Enter when branch condition else"]; + 206 [label="Exit when branch condition"]; + } + 207 [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="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"]; + } + 220 [label="Exit block"]; + } + 221 [label="Exit function test_8" style="filled" fillcolor=red]; + } + 195 -> {196}; 196 -> {197}; 197 -> {198}; 198 -> {199}; 199 -> {200}; 200 -> {201}; - - subgraph cluster_52 { - color=red - 202 [label="Enter function test_8" style="filled" fillcolor=red]; - subgraph cluster_53 { - color=blue - 203 [label="Enter block"]; - subgraph cluster_54 { - color=blue - 204 [label="Enter when"]; - subgraph cluster_55 { - color=blue - 205 [label="Enter when branch condition "]; - 206 [label="Access variable R|/b|"]; - 207 [label="Const: Boolean(true)"]; - 208 [label="Operator !="]; - 209 [label="Const: Boolean(false)"]; - 210 [label="Operator !="]; - 211 [label="Exit when branch condition"]; - } - subgraph cluster_56 { - color=blue - 212 [label="Enter when branch condition else"]; - 213 [label="Exit when branch condition"]; - } - 214 [label="Synthetic else branch"]; - 215 [label="Enter when branch result"]; - subgraph cluster_57 { - color=blue - 216 [label="Enter block"]; - 217 [label="Access variable R|/b|"]; - 218 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 219 [label="Exit block"]; - } - 220 [label="Exit when branch result"]; - 221 [label="Enter when branch result"]; - subgraph cluster_58 { - color=blue - 222 [label="Enter block"]; - 223 [label="Access variable R|/b|"]; - 224 [label="Function call: R|/b|.#()"]; - 225 [label="Exit block"]; - } - 226 [label="Exit when branch result"]; - 227 [label="Exit when"]; - } - 228 [label="Exit block"]; - } - 229 [label="Exit function test_8" style="filled" fillcolor=red]; - } - + 201 -> {202}; 202 -> {203}; 203 -> {204}; - 204 -> {205}; + 204 -> {213 205}; 205 -> {206}; 206 -> {207}; 207 -> {208}; 208 -> {209}; 209 -> {210}; 210 -> {211}; - 211 -> {221 212}; - 212 -> {213}; - 213 -> {215 214}; - 214 -> {227}; + 211 -> {212}; + 212 -> {219}; + 213 -> {214}; + 214 -> {215}; 215 -> {216}; 216 -> {217}; 217 -> {218}; 218 -> {219}; 219 -> {220}; - 220 -> {227}; - 221 -> {222}; - 222 -> {223}; - 223 -> {224}; - 224 -> {225}; - 225 -> {226}; - 226 -> {227}; - 227 -> {228}; - 228 -> {229}; + 220 -> {221}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/implicitReceivers.dot b/compiler/fir/resolve/testData/resolve/smartcasts/implicitReceivers.dot index 73fb05a5b29..e58cf388020 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/implicitReceivers.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/implicitReceivers.dot @@ -62,35 +62,34 @@ digraph implicitReceivers_kt { 17 [label="Enter when branch condition else"]; 18 [label="Exit when branch condition"]; } - 19 [label="Synthetic else branch"]; - 20 [label="Enter when branch result"]; + 19 [label="Enter when branch result"]; subgraph cluster_10 { color=blue - 21 [label="Enter block"]; - 22 [label="Access variable this@R|/test_1|"]; - 23 [label="Function call: this@R|/test_1|.#()"]; - 24 [label="Function call: #()"]; - 25 [label="Exit block"]; + 20 [label="Enter block"]; + 21 [label="Access variable this@R|/test_1|"]; + 22 [label="Function call: this@R|/test_1|.#()"]; + 23 [label="Function call: #()"]; + 24 [label="Exit block"]; } - 26 [label="Exit when branch result"]; - 27 [label="Enter when branch result"]; + 25 [label="Exit when branch result"]; + 26 [label="Enter when branch result"]; subgraph cluster_11 { color=blue - 28 [label="Enter block"]; - 29 [label="Access variable this@R|/test_1|"]; - 30 [label="Function call: this@R|/test_1|.R|/A.foo|()"]; - 31 [label="Function call: this@R|/A|.R|/A.foo|()"]; - 32 [label="Exit block"]; + 27 [label="Enter block"]; + 28 [label="Access variable this@R|/test_1|"]; + 29 [label="Function call: this@R|/test_1|.R|/A.foo|()"]; + 30 [label="Function call: this@R|/A|.R|/A.foo|()"]; + 31 [label="Exit block"]; } - 33 [label="Exit when branch result"]; - 34 [label="Exit when"]; + 32 [label="Exit when branch result"]; + 33 [label="Exit when"]; } - 35 [label="Access variable this@R|/test_1|"]; - 36 [label="Function call: this@R|/test_1|.#()"]; - 37 [label="Function call: #()"]; - 38 [label="Exit block"]; + 34 [label="Access variable this@R|/test_1|"]; + 35 [label="Function call: this@R|/test_1|.#()"]; + 36 [label="Function call: #()"]; + 37 [label="Exit block"]; } - 39 [label="Exit function test_1" style="filled" fillcolor=red]; + 38 [label="Exit function test_1" style="filled" fillcolor=red]; } 10 -> {11}; @@ -99,17 +98,17 @@ digraph implicitReceivers_kt { 13 -> {14}; 14 -> {15}; 15 -> {16}; - 16 -> {27 17}; + 16 -> {26 17}; 17 -> {18}; - 18 -> {20 19}; - 19 -> {34}; + 18 -> {19}; + 19 -> {20}; 20 -> {21}; 21 -> {22}; 22 -> {23}; 23 -> {24}; 24 -> {25}; - 25 -> {26}; - 26 -> {34}; + 25 -> {33}; + 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; @@ -121,77 +120,76 @@ digraph implicitReceivers_kt { 35 -> {36}; 36 -> {37}; 37 -> {38}; - 38 -> {39}; subgraph cluster_12 { color=red - 40 [label="Enter function test_2" style="filled" fillcolor=red]; + 39 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_13 { color=blue - 41 [label="Enter block"]; + 40 [label="Enter block"]; subgraph cluster_14 { color=blue - 42 [label="Enter when"]; + 41 [label="Enter when"]; subgraph cluster_15 { color=blue - 43 [label="Enter when branch condition "]; - 44 [label="Access variable this@R|/test_2|"]; - 45 [label="Type operator: this !is A"]; - 46 [label="Exit when branch condition"]; + 42 [label="Enter when branch condition "]; + 43 [label="Access variable this@R|/test_2|"]; + 44 [label="Type operator: this !is A"]; + 45 [label="Exit when branch condition"]; } subgraph cluster_16 { color=blue - 47 [label="Enter when branch condition else"]; - 48 [label="Exit when branch condition"]; + 46 [label="Enter when branch condition else"]; + 47 [label="Exit when branch condition"]; } - 49 [label="Synthetic else branch"]; - 50 [label="Enter when branch result"]; + 48 [label="Enter when branch result"]; subgraph cluster_17 { color=blue - 51 [label="Enter block"]; - 52 [label="Access variable this@R|/test_2|"]; - 53 [label="Function call: this@R|/test_2|.R|/A.foo|()"]; - 54 [label="Function call: this@R|/A|.R|/A.foo|()"]; - 55 [label="Exit block"]; + 49 [label="Enter block"]; + 50 [label="Access variable this@R|/test_2|"]; + 51 [label="Function call: this@R|/test_2|.R|/A.foo|()"]; + 52 [label="Function call: this@R|/A|.R|/A.foo|()"]; + 53 [label="Exit block"]; } - 56 [label="Exit when branch result"]; - 57 [label="Enter when branch result"]; + 54 [label="Exit when branch result"]; + 55 [label="Enter when branch result"]; subgraph cluster_18 { color=blue - 58 [label="Enter block"]; - 59 [label="Access variable this@R|/test_2|"]; - 60 [label="Function call: this@R|/test_2|.#()"]; - 61 [label="Function call: #()"]; - 62 [label="Exit block"]; + 56 [label="Enter block"]; + 57 [label="Access variable this@R|/test_2|"]; + 58 [label="Function call: this@R|/test_2|.#()"]; + 59 [label="Function call: #()"]; + 60 [label="Exit block"]; } - 63 [label="Exit when branch result"]; - 64 [label="Exit when"]; + 61 [label="Exit when branch result"]; + 62 [label="Exit when"]; } - 65 [label="Access variable this@R|/test_2|"]; - 66 [label="Function call: this@R|/test_2|.#()"]; - 67 [label="Function call: #()"]; - 68 [label="Exit block"]; + 63 [label="Access variable this@R|/test_2|"]; + 64 [label="Function call: this@R|/test_2|.#()"]; + 65 [label="Function call: #()"]; + 66 [label="Exit block"]; } - 69 [label="Exit function test_2" style="filled" fillcolor=red]; + 67 [label="Exit function test_2" style="filled" fillcolor=red]; } + 39 -> {40}; 40 -> {41}; 41 -> {42}; 42 -> {43}; 43 -> {44}; 44 -> {45}; - 45 -> {46}; - 46 -> {57 47}; + 45 -> {55 46}; + 46 -> {47}; 47 -> {48}; - 48 -> {50 49}; - 49 -> {64}; + 48 -> {49}; + 49 -> {50}; 50 -> {51}; 51 -> {52}; 52 -> {53}; 53 -> {54}; - 54 -> {55}; + 54 -> {62}; 55 -> {56}; - 56 -> {64}; + 56 -> {57}; 57 -> {58}; 58 -> {59}; 59 -> {60}; @@ -202,59 +200,57 @@ digraph implicitReceivers_kt { 64 -> {65}; 65 -> {66}; 66 -> {67}; - 67 -> {68}; - 68 -> {69}; subgraph cluster_19 { color=red - 70 [label="Enter function test_3" style="filled" fillcolor=red]; + 68 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_20 { color=blue - 71 [label="Enter block"]; - 72 [label="Access variable R|/a|"]; + 69 [label="Enter block"]; + 70 [label="Access variable R|/a|"]; subgraph cluster_21 { color=blue - 73 [label="Enter function anonymousFunction"]; + 71 [label="Enter function anonymousFunction"]; subgraph cluster_22 { color=blue - 74 [label="Enter block"]; - 75 [label="Access variable R|/b|"]; + 72 [label="Enter block"]; + 73 [label="Access variable R|/b|"]; subgraph cluster_23 { color=blue - 76 [label="Enter function anonymousFunction"]; + 74 [label="Enter function anonymousFunction"]; subgraph cluster_24 { color=blue - 77 [label="Enter block"]; - 78 [label="Access variable R|/c|"]; + 75 [label="Enter block"]; + 76 [label="Access variable R|/c|"]; subgraph cluster_25 { color=blue - 79 [label="Enter function anonymousFunction"]; + 77 [label="Enter function anonymousFunction"]; subgraph cluster_26 { color=blue - 80 [label="Enter block"]; + 78 [label="Enter block"]; + 79 [label="Access variable this@R|special/anonymous|"]; + 80 [label="Type operator: this@wb as A"]; 81 [label="Access variable this@R|special/anonymous|"]; - 82 [label="Type operator: this@wb as A"]; - 83 [label="Access variable this@R|special/anonymous|"]; - 84 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 85 [label="Function call: this@R|/A|.R|/A.foo|()"]; - 86 [label="Exit block"]; + 82 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 83 [label="Function call: this@R|/A|.R|/A.foo|()"]; + 84 [label="Exit block"]; } - 87 [label="Exit function anonymousFunction"]; + 85 [label="Exit function anonymousFunction"]; } - 88 [label="Function call: R|kotlin/with|(R|/c|, = wc@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { + 86 [label="Function call: R|kotlin/with|(R|/c|, = wc@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { (this@R|special/anonymous| as R|A|) this@R|special/anonymous|.R|/A.foo|() this@R|/A|.R|/A.foo|() } )"]; - 89 [label="Access variable this@R|special/anonymous|"]; - 90 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; - 91 [label="Function call: this@R|/A|.R|/A.foo|()"]; - 92 [label="Exit block"]; + 87 [label="Access variable this@R|special/anonymous|"]; + 88 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; + 89 [label="Function call: this@R|/A|.R|/A.foo|()"]; + 90 [label="Exit block"]; } - 93 [label="Exit function anonymousFunction"]; + 91 [label="Exit function anonymousFunction"]; } - 94 [label="Function call: R|kotlin/with|(R|/b|, = wb@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { + 92 [label="Function call: R|kotlin/with|(R|/b|, = wb@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { R|kotlin/with|(R|/c|, = wc@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { (this@R|special/anonymous| as R|A|) this@R|special/anonymous|.R|/A.foo|() @@ -265,11 +261,11 @@ digraph implicitReceivers_kt { this@R|/A|.R|/A.foo|() } )"]; - 95 [label="Exit block"]; + 93 [label="Exit block"]; } - 96 [label="Exit function anonymousFunction"]; + 94 [label="Exit function anonymousFunction"]; } - 97 [label="Function call: R|kotlin/with|(R|/a|, = wa@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { + 95 [label="Function call: R|kotlin/with|(R|/a|, = wa@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { R|kotlin/with|(R|/b|, = wb@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { R|kotlin/with|(R|/c|, = wc@fun R|kotlin/Any|.(it: R|kotlin/Any|): R|kotlin/Unit| { (this@R|special/anonymous| as R|A|) @@ -283,11 +279,13 @@ digraph implicitReceivers_kt { ) } )"]; - 98 [label="Exit block"]; + 96 [label="Exit block"]; } - 99 [label="Exit function test_3" style="filled" fillcolor=red]; + 97 [label="Exit function test_3" style="filled" fillcolor=red]; } + 68 -> {69}; + 69 -> {70}; 70 -> {71}; 71 -> {72}; 72 -> {73}; @@ -315,7 +313,5 @@ digraph implicitReceivers_kt { 94 -> {95}; 95 -> {96}; 96 -> {97}; - 97 -> {98}; - 98 -> {99}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot b/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot index cce140cb413..6496ab55ed4 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot @@ -89,32 +89,31 @@ digraph nullability_kt { 24 [label="Enter when branch condition else"]; 25 [label="Exit when branch condition"]; } - 26 [label="Synthetic else branch"]; - 27 [label="Enter when branch result"]; + 26 [label="Enter when branch result"]; subgraph cluster_13 { color=blue - 28 [label="Enter block"]; - 29 [label="Access variable R|/x|"]; - 30 [label="Function call: R|/x|.#()"]; - 31 [label="Exit block"]; + 27 [label="Enter block"]; + 28 [label="Access variable R|/x|"]; + 29 [label="Function call: R|/x|.#()"]; + 30 [label="Exit block"]; } - 32 [label="Exit when branch result"]; - 33 [label="Enter when branch result"]; + 31 [label="Exit when branch result"]; + 32 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 34 [label="Enter block"]; - 35 [label="Access variable R|/x|"]; - 36 [label="Function call: R|/x|.R|/A.foo|()"]; - 37 [label="Exit block"]; + 33 [label="Enter block"]; + 34 [label="Access variable R|/x|"]; + 35 [label="Function call: R|/x|.R|/A.foo|()"]; + 36 [label="Exit block"]; } - 38 [label="Exit when branch result"]; - 39 [label="Exit when"]; + 37 [label="Exit when branch result"]; + 38 [label="Exit when"]; } - 40 [label="Access variable R|/x|"]; - 41 [label="Function call: R|/x|.#()"]; - 42 [label="Exit block"]; + 39 [label="Access variable R|/x|"]; + 40 [label="Function call: R|/x|.#()"]; + 41 [label="Exit block"]; } - 43 [label="Exit function test_1" style="filled" fillcolor=red]; + 42 [label="Exit function test_1" style="filled" fillcolor=red]; } 16 -> {17}; @@ -124,16 +123,16 @@ digraph nullability_kt { 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {33 24}; + 23 -> {32 24}; 24 -> {25}; - 25 -> {27 26}; - 26 -> {39}; + 25 -> {26}; + 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; - 32 -> {39}; + 31 -> {38}; + 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; @@ -143,75 +142,74 @@ digraph nullability_kt { 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; subgraph cluster_15 { color=red - 44 [label="Enter function test_2" style="filled" fillcolor=red]; + 43 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_16 { color=blue - 45 [label="Enter block"]; + 44 [label="Enter block"]; subgraph cluster_17 { color=blue - 46 [label="Enter when"]; + 45 [label="Enter when"]; subgraph cluster_18 { color=blue - 47 [label="Enter when branch condition "]; - 48 [label="Access variable R|/x|"]; - 49 [label="Const: Null(null)"]; - 50 [label="Operator =="]; - 51 [label="Exit when branch condition"]; + 46 [label="Enter when branch condition "]; + 47 [label="Access variable R|/x|"]; + 48 [label="Const: Null(null)"]; + 49 [label="Operator =="]; + 50 [label="Exit when branch condition"]; } subgraph cluster_19 { color=blue - 52 [label="Enter when branch condition else"]; - 53 [label="Exit when branch condition"]; + 51 [label="Enter when branch condition else"]; + 52 [label="Exit when branch condition"]; } - 54 [label="Synthetic else branch"]; - 55 [label="Enter when branch result"]; + 53 [label="Enter when branch result"]; subgraph cluster_20 { color=blue - 56 [label="Enter block"]; - 57 [label="Access variable R|/x|"]; - 58 [label="Function call: R|/x|.R|/A.foo|()"]; - 59 [label="Exit block"]; + 54 [label="Enter block"]; + 55 [label="Access variable R|/x|"]; + 56 [label="Function call: R|/x|.R|/A.foo|()"]; + 57 [label="Exit block"]; } - 60 [label="Exit when branch result"]; - 61 [label="Enter when branch result"]; + 58 [label="Exit when branch result"]; + 59 [label="Enter when branch result"]; subgraph cluster_21 { color=blue - 62 [label="Enter block"]; - 63 [label="Access variable R|/x|"]; - 64 [label="Function call: R|/x|.#()"]; - 65 [label="Exit block"]; + 60 [label="Enter block"]; + 61 [label="Access variable R|/x|"]; + 62 [label="Function call: R|/x|.#()"]; + 63 [label="Exit block"]; } - 66 [label="Exit when branch result"]; - 67 [label="Exit when"]; + 64 [label="Exit when branch result"]; + 65 [label="Exit when"]; } - 68 [label="Access variable R|/x|"]; - 69 [label="Function call: R|/x|.#()"]; - 70 [label="Exit block"]; + 66 [label="Access variable R|/x|"]; + 67 [label="Function call: R|/x|.#()"]; + 68 [label="Exit block"]; } - 71 [label="Exit function test_2" style="filled" fillcolor=red]; + 69 [label="Exit function test_2" style="filled" fillcolor=red]; } + 43 -> {44}; 44 -> {45}; 45 -> {46}; 46 -> {47}; 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51}; - 51 -> {61 52}; + 50 -> {59 51}; + 51 -> {52}; 52 -> {53}; - 53 -> {55 54}; - 54 -> {67}; + 53 -> {54}; + 54 -> {55}; 55 -> {56}; 56 -> {57}; 57 -> {58}; - 58 -> {59}; + 58 -> {65}; 59 -> {60}; - 60 -> {67}; + 60 -> {61}; 61 -> {62}; 62 -> {63}; 63 -> {64}; @@ -220,189 +218,189 @@ digraph nullability_kt { 66 -> {67}; 67 -> {68}; 68 -> {69}; - 69 -> {70}; - 70 -> {71}; subgraph cluster_22 { color=red - 72 [label="Enter function test_3" style="filled" fillcolor=red]; + 70 [label="Enter function test_3" style="filled" fillcolor=red]; subgraph cluster_23 { color=blue - 73 [label="Enter block"]; + 71 [label="Enter block"]; subgraph cluster_24 { color=blue - 74 [label="Enter when"]; - 75 [label="Access variable R|/x|"]; - 76 [label="Variable declaration: lval : R|A?|"]; + 72 [label="Enter when"]; + 73 [label="Access variable R|/x|"]; + 74 [label="Variable declaration: lval : R|A?|"]; subgraph cluster_25 { color=blue - 77 [label="Enter when branch condition "]; - 78 [label="Const: Null(null)"]; - 79 [label="Operator =="]; - 80 [label="Exit when branch condition"]; + 75 [label="Enter when branch condition "]; + 76 [label="Const: Null(null)"]; + 77 [label="Operator =="]; + 78 [label="Exit when branch condition"]; } subgraph cluster_26 { color=blue - 81 [label="Enter when branch condition else"]; - 82 [label="Exit when branch condition"]; + 79 [label="Enter when branch condition else"]; + 80 [label="Exit when branch condition"]; } - 83 [label="Enter when branch result"]; + 81 [label="Enter when branch result"]; subgraph cluster_27 { color=blue - 84 [label="Enter block"]; - 85 [label="Access variable R|/|"]; - 86 [label="Exit block"]; + 82 [label="Enter block"]; + 83 [label="Access variable R|/|"]; + 84 [label="Exit block"]; } - 87 [label="Exit when branch result"]; - 88 [label="Enter when branch result"]; + 85 [label="Exit when branch result"]; + 86 [label="Enter when branch result"]; subgraph cluster_28 { color=blue - 89 [label="Enter block"]; - 90 [label="Jump: ^test_3 Unit"]; - 91 [label="Stub" style="filled" fillcolor=gray]; - 92 [label="Exit block" style="filled" fillcolor=gray]; + 87 [label="Enter block"]; + 88 [label="Jump: ^test_3 Unit"]; + 89 [label="Stub" style="filled" fillcolor=gray]; + 90 [label="Exit block" style="filled" fillcolor=gray]; } - 93 [label="Exit when branch result" style="filled" fillcolor=gray]; - 94 [label="Exit when"]; + 91 [label="Exit when branch result" style="filled" fillcolor=gray]; + 92 [label="Exit when"]; } - 95 [label="Access variable R|/x|"]; - 96 [label="Function call: R|/x|.R|/A.foo|()"]; - 97 [label="Exit block"]; + 93 [label="Access variable R|/x|"]; + 94 [label="Function call: R|/x|.R|/A.foo|()"]; + 95 [label="Exit block"]; } - 98 [label="Exit function test_3" style="filled" fillcolor=red]; + 96 [label="Exit function test_3" style="filled" fillcolor=red]; } + 70 -> {71}; + 71 -> {72}; 72 -> {73}; 73 -> {74}; 74 -> {75}; 75 -> {76}; 76 -> {77}; 77 -> {78}; - 78 -> {79}; + 78 -> {86 79}; 79 -> {80}; - 80 -> {88 81}; + 80 -> {81}; 81 -> {82}; 82 -> {83}; 83 -> {84}; 84 -> {85}; - 85 -> {86}; + 85 -> {92}; 86 -> {87}; - 87 -> {94}; - 88 -> {89}; - 89 -> {90}; - 90 -> {98}; + 87 -> {88}; + 88 -> {96}; + 88 -> {89} [style=dotted]; + 89 -> {90} [style=dotted]; 90 -> {91} [style=dotted]; 91 -> {92} [style=dotted]; - 92 -> {93} [style=dotted]; - 93 -> {94} [style=dotted]; + 92 -> {93}; + 93 -> {94}; 94 -> {95}; 95 -> {96}; - 96 -> {97}; - 97 -> {98}; subgraph cluster_29 { color=red - 99 [label="Enter function test_4" style="filled" fillcolor=red]; + 97 [label="Enter function test_4" style="filled" fillcolor=red]; subgraph cluster_30 { color=blue - 100 [label="Enter block"]; + 98 [label="Enter block"]; subgraph cluster_31 { color=blue - 101 [label="Enter when"]; + 99 [label="Enter when"]; subgraph cluster_32 { color=blue - 102 [label="Enter when branch condition "]; - 103 [label="Access variable R|/x|"]; - 104 [label="Function call: R|/x|?.R|/A.getA|()"]; - 105 [label="Const: Null(null)"]; - 106 [label="Operator =="]; - 107 [label="Exit when branch condition"]; + 100 [label="Enter when branch condition "]; + 101 [label="Access variable R|/x|"]; + 102 [label="Function call: R|/x|?.R|/A.getA|()"]; + 103 [label="Const: Null(null)"]; + 104 [label="Operator =="]; + 105 [label="Exit when branch condition"]; } - 108 [label="Synthetic else branch"]; - 109 [label="Enter when branch result"]; + 106 [label="Synthetic else branch"]; + 107 [label="Enter when branch result"]; subgraph cluster_33 { color=blue - 110 [label="Enter block"]; - 111 [label="Jump: ^test_4 Unit"]; - 112 [label="Stub" style="filled" fillcolor=gray]; - 113 [label="Exit block" style="filled" fillcolor=gray]; + 108 [label="Enter block"]; + 109 [label="Jump: ^test_4 Unit"]; + 110 [label="Stub" style="filled" fillcolor=gray]; + 111 [label="Exit block" style="filled" fillcolor=gray]; } - 114 [label="Exit when branch result" style="filled" fillcolor=gray]; - 115 [label="Exit when"]; + 112 [label="Exit when branch result" style="filled" fillcolor=gray]; + 113 [label="Exit when"]; } - 116 [label="Access variable R|/x|"]; - 117 [label="Function call: R|/x|.R|/A.foo|()"]; - 118 [label="Exit block"]; + 114 [label="Access variable R|/x|"]; + 115 [label="Function call: R|/x|.R|/A.foo|()"]; + 116 [label="Exit block"]; } - 119 [label="Exit function test_4" style="filled" fillcolor=red]; + 117 [label="Exit function test_4" style="filled" fillcolor=red]; } + 97 -> {98}; + 98 -> {99}; 99 -> {100}; 100 -> {101}; 101 -> {102}; 102 -> {103}; 103 -> {104}; 104 -> {105}; - 105 -> {106}; - 106 -> {107}; - 107 -> {109 108}; - 108 -> {115}; - 109 -> {110}; - 110 -> {111}; - 111 -> {119}; + 105 -> {107 106}; + 106 -> {113}; + 107 -> {108}; + 108 -> {109}; + 109 -> {117}; + 109 -> {110} [style=dotted]; + 110 -> {111} [style=dotted]; 111 -> {112} [style=dotted]; 112 -> {113} [style=dotted]; - 113 -> {114} [style=dotted]; - 114 -> {115} [style=dotted]; + 113 -> {114}; + 114 -> {115}; 115 -> {116}; 116 -> {117}; - 117 -> {118}; - 118 -> {119}; subgraph cluster_34 { color=red - 120 [label="Enter function test_5" style="filled" fillcolor=red]; + 118 [label="Enter function test_5" style="filled" fillcolor=red]; subgraph cluster_35 { color=blue - 121 [label="Enter block"]; + 119 [label="Enter block"]; subgraph cluster_36 { color=blue - 122 [label="Enter when"]; + 120 [label="Enter when"]; subgraph cluster_37 { color=blue - 123 [label="Enter when branch condition "]; - 124 [label="Access variable R|/q|"]; - 125 [label="Access variable R|/Q.data|"]; - 126 [label="Access variable R|/MyData.s|"]; - 127 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; - 128 [label="Const: Null(null)"]; - 129 [label="Operator !="]; - 130 [label="Exit when branch condition"]; + 121 [label="Enter when branch condition "]; + 122 [label="Access variable R|/q|"]; + 123 [label="Access variable R|/Q.data|"]; + 124 [label="Access variable R|/MyData.s|"]; + 125 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; + 126 [label="Const: Null(null)"]; + 127 [label="Operator !="]; + 128 [label="Exit when branch condition"]; } - 131 [label="Synthetic else branch"]; - 132 [label="Enter when branch result"]; + 129 [label="Synthetic else branch"]; + 130 [label="Enter when branch result"]; subgraph cluster_38 { color=blue - 133 [label="Enter block"]; + 131 [label="Enter block"]; + 132 [label="Access variable R|/q|"]; + 133 [label="Access variable R|/Q.data|"]; 134 [label="Access variable R|/q|"]; 135 [label="Access variable R|/Q.data|"]; - 136 [label="Access variable R|/q|"]; - 137 [label="Access variable R|/Q.data|"]; - 138 [label="Access variable R|/MyData.s|"]; - 139 [label="Access variable R|/q|"]; - 140 [label="Access variable R|/Q.data|"]; - 141 [label="Access variable R|/MyData.s|"]; - 142 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 143 [label="Exit block"]; + 136 [label="Access variable R|/MyData.s|"]; + 137 [label="Access variable R|/q|"]; + 138 [label="Access variable R|/Q.data|"]; + 139 [label="Access variable R|/MyData.s|"]; + 140 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 141 [label="Exit block"]; } - 144 [label="Exit when branch result"]; - 145 [label="Exit when"]; + 142 [label="Exit when branch result"]; + 143 [label="Exit when"]; } - 146 [label="Exit block"]; + 144 [label="Exit block"]; } - 147 [label="Exit function test_5" style="filled" fillcolor=red]; + 145 [label="Exit function test_5" style="filled" fillcolor=red]; } + 118 -> {119}; + 119 -> {120}; 120 -> {121}; 121 -> {122}; 122 -> {123}; @@ -411,10 +409,10 @@ digraph nullability_kt { 125 -> {126}; 126 -> {127}; 127 -> {128}; - 128 -> {129}; - 129 -> {130}; - 130 -> {132 131}; - 131 -> {145}; + 128 -> {130 129}; + 129 -> {143}; + 130 -> {131}; + 131 -> {132}; 132 -> {133}; 133 -> {134}; 134 -> {135}; @@ -428,68 +426,68 @@ digraph nullability_kt { 142 -> {143}; 143 -> {144}; 144 -> {145}; - 145 -> {146}; - 146 -> {147}; subgraph cluster_39 { color=red - 148 [label="Enter function test_6" style="filled" fillcolor=red]; + 146 [label="Enter function test_6" style="filled" fillcolor=red]; subgraph cluster_40 { color=blue - 149 [label="Enter block"]; + 147 [label="Enter block"]; subgraph cluster_41 { color=blue - 150 [label="Enter when"]; - 151 [label="Access variable R|/q|"]; - 152 [label="Access variable R|/Q.data|"]; - 153 [label="Access variable R|/MyData.s|"]; - 154 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; - 155 [label="Variable declaration: lval : R|kotlin/Int?|"]; + 148 [label="Enter when"]; + 149 [label="Access variable R|/q|"]; + 150 [label="Access variable R|/Q.data|"]; + 151 [label="Access variable R|/MyData.s|"]; + 152 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; + 153 [label="Variable declaration: lval : R|kotlin/Int?|"]; subgraph cluster_42 { color=blue - 156 [label="Enter when branch condition "]; - 157 [label="Const: Null(null)"]; - 158 [label="Operator =="]; - 159 [label="Exit when branch condition"]; + 154 [label="Enter when branch condition "]; + 155 [label="Const: Null(null)"]; + 156 [label="Operator =="]; + 157 [label="Exit when branch condition"]; } subgraph cluster_43 { color=blue - 160 [label="Enter when branch condition else"]; - 161 [label="Exit when branch condition"]; + 158 [label="Enter when branch condition else"]; + 159 [label="Exit when branch condition"]; } - 162 [label="Enter when branch result"]; + 160 [label="Enter when branch result"]; subgraph cluster_44 { color=blue - 163 [label="Enter block"]; - 164 [label="Access variable R|/|"]; - 165 [label="Exit block"]; + 161 [label="Enter block"]; + 162 [label="Access variable R|/|"]; + 163 [label="Exit block"]; } - 166 [label="Exit when branch result"]; - 167 [label="Enter when branch result"]; + 164 [label="Exit when branch result"]; + 165 [label="Enter when branch result"]; subgraph cluster_45 { color=blue - 168 [label="Enter block"]; - 169 [label="Jump: ^test_6 Unit"]; - 170 [label="Stub" style="filled" fillcolor=gray]; - 171 [label="Exit block" style="filled" fillcolor=gray]; + 166 [label="Enter block"]; + 167 [label="Jump: ^test_6 Unit"]; + 168 [label="Stub" style="filled" fillcolor=gray]; + 169 [label="Exit block" style="filled" fillcolor=gray]; } - 172 [label="Exit when branch result" style="filled" fillcolor=gray]; - 173 [label="Exit when"]; + 170 [label="Exit when branch result" style="filled" fillcolor=gray]; + 171 [label="Exit when"]; } + 172 [label="Access variable R|/q|"]; + 173 [label="Access variable R|/Q.data|"]; 174 [label="Access variable R|/q|"]; 175 [label="Access variable R|/Q.data|"]; - 176 [label="Access variable R|/q|"]; - 177 [label="Access variable R|/Q.data|"]; - 178 [label="Access variable R|/MyData.s|"]; - 179 [label="Access variable R|/q|"]; - 180 [label="Access variable R|/Q.data|"]; - 181 [label="Access variable R|/MyData.s|"]; - 182 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 183 [label="Exit block"]; + 176 [label="Access variable R|/MyData.s|"]; + 177 [label="Access variable R|/q|"]; + 178 [label="Access variable R|/Q.data|"]; + 179 [label="Access variable R|/MyData.s|"]; + 180 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 181 [label="Exit block"]; } - 184 [label="Exit function test_6" style="filled" fillcolor=red]; + 182 [label="Exit function test_6" style="filled" fillcolor=red]; } + 146 -> {147}; + 147 -> {148}; 148 -> {149}; 149 -> {150}; 150 -> {151}; @@ -499,23 +497,23 @@ digraph nullability_kt { 154 -> {155}; 155 -> {156}; 156 -> {157}; - 157 -> {158}; + 157 -> {165 158}; 158 -> {159}; - 159 -> {167 160}; + 159 -> {160}; 160 -> {161}; 161 -> {162}; 162 -> {163}; 163 -> {164}; - 164 -> {165}; + 164 -> {171}; 165 -> {166}; - 166 -> {173}; - 167 -> {168}; - 168 -> {169}; - 169 -> {184}; + 166 -> {167}; + 167 -> {182}; + 167 -> {168} [style=dotted]; + 168 -> {169} [style=dotted]; 169 -> {170} [style=dotted]; 170 -> {171} [style=dotted]; - 171 -> {172} [style=dotted]; - 172 -> {173} [style=dotted]; + 171 -> {172}; + 172 -> {173}; 173 -> {174}; 174 -> {175}; 175 -> {176}; @@ -525,53 +523,53 @@ digraph nullability_kt { 179 -> {180}; 180 -> {181}; 181 -> {182}; - 182 -> {183}; - 183 -> {184}; subgraph cluster_46 { color=red - 185 [label="Enter function test_7" style="filled" fillcolor=red]; + 183 [label="Enter function test_7" style="filled" fillcolor=red]; subgraph cluster_47 { color=blue - 186 [label="Enter block"]; + 184 [label="Enter block"]; subgraph cluster_48 { color=blue - 187 [label="Enter when"]; + 185 [label="Enter when"]; subgraph cluster_49 { color=blue - 188 [label="Enter when branch condition "]; - 189 [label="Access variable R|/q|"]; - 190 [label="Function call: R|/q|?.R|/Q.fdata|()"]; - 191 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()"]; - 192 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|()"]; - 193 [label="Const: Null(null)"]; - 194 [label="Operator !="]; - 195 [label="Exit when branch condition"]; + 186 [label="Enter when branch condition "]; + 187 [label="Access variable R|/q|"]; + 188 [label="Function call: R|/q|?.R|/Q.fdata|()"]; + 189 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()"]; + 190 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|()"]; + 191 [label="Const: Null(null)"]; + 192 [label="Operator !="]; + 193 [label="Exit when branch condition"]; } - 196 [label="Synthetic else branch"]; - 197 [label="Enter when branch result"]; + 194 [label="Synthetic else branch"]; + 195 [label="Enter when branch result"]; subgraph cluster_50 { color=blue - 198 [label="Enter block"]; + 196 [label="Enter block"]; + 197 [label="Access variable R|/q|"]; + 198 [label="Function call: R|/q|.R|/Q.fdata|()"]; 199 [label="Access variable R|/q|"]; 200 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 201 [label="Access variable R|/q|"]; - 202 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 203 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 204 [label="Access variable R|/q|"]; - 205 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 206 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 207 [label="Function call: R|/q|.R|/Q.fdata|().#().#()"]; - 208 [label="Exit block"]; + 201 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 202 [label="Access variable R|/q|"]; + 203 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 204 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 205 [label="Function call: R|/q|.R|/Q.fdata|().#().#()"]; + 206 [label="Exit block"]; } - 209 [label="Exit when branch result"]; - 210 [label="Exit when"]; + 207 [label="Exit when branch result"]; + 208 [label="Exit when"]; } - 211 [label="Exit block"]; + 209 [label="Exit block"]; } - 212 [label="Exit function test_7" style="filled" fillcolor=red]; + 210 [label="Exit function test_7" style="filled" fillcolor=red]; } + 183 -> {184}; + 184 -> {185}; 185 -> {186}; 186 -> {187}; 187 -> {188}; @@ -580,10 +578,10 @@ digraph nullability_kt { 190 -> {191}; 191 -> {192}; 192 -> {193}; - 193 -> {194}; - 194 -> {195}; - 195 -> {197 196}; - 196 -> {210}; + 193 -> {195 194}; + 194 -> {208}; + 195 -> {196}; + 196 -> {197}; 197 -> {198}; 198 -> {199}; 199 -> {200}; @@ -597,181 +595,181 @@ digraph nullability_kt { 207 -> {208}; 208 -> {209}; 209 -> {210}; - 210 -> {211}; - 211 -> {212}; subgraph cluster_51 { color=red - 213 [label="Enter function test_8" style="filled" fillcolor=red]; + 211 [label="Enter function test_8" style="filled" fillcolor=red]; subgraph cluster_52 { color=blue - 214 [label="Enter block"]; + 212 [label="Enter block"]; subgraph cluster_53 { color=blue - 215 [label="Enter when"]; + 213 [label="Enter when"]; subgraph cluster_54 { color=blue - 216 [label="Enter when branch condition "]; - 217 [label="Access variable R|/b|"]; - 218 [label="Const: Boolean(true)"]; - 219 [label="Operator =="]; - 220 [label="Exit when branch condition"]; + 214 [label="Enter when branch condition "]; + 215 [label="Access variable R|/b|"]; + 216 [label="Const: Boolean(true)"]; + 217 [label="Operator =="]; + 218 [label="Exit when branch condition"]; } - 221 [label="Synthetic else branch"]; - 222 [label="Enter when branch result"]; + 219 [label="Synthetic else branch"]; + 220 [label="Enter when branch result"]; subgraph cluster_55 { color=blue - 223 [label="Enter block"]; - 224 [label="Access variable R|/b|"]; - 225 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 226 [label="Exit block"]; + 221 [label="Enter block"]; + 222 [label="Access variable R|/b|"]; + 223 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 224 [label="Exit block"]; } - 227 [label="Exit when branch result"]; - 228 [label="Exit when"]; + 225 [label="Exit when branch result"]; + 226 [label="Exit when"]; } - 229 [label="Exit block"]; + 227 [label="Exit block"]; } - 230 [label="Exit function test_8" style="filled" fillcolor=red]; + 228 [label="Exit function test_8" style="filled" fillcolor=red]; } + 211 -> {212}; + 212 -> {213}; 213 -> {214}; 214 -> {215}; 215 -> {216}; 216 -> {217}; 217 -> {218}; - 218 -> {219}; - 219 -> {220}; - 220 -> {222 221}; - 221 -> {228}; + 218 -> {220 219}; + 219 -> {226}; + 220 -> {221}; + 221 -> {222}; 222 -> {223}; 223 -> {224}; 224 -> {225}; 225 -> {226}; 226 -> {227}; 227 -> {228}; - 228 -> {229}; - 229 -> {230}; subgraph cluster_56 { color=red - 231 [label="Enter function test_9" style="filled" fillcolor=red]; + 229 [label="Enter function test_9" style="filled" fillcolor=red]; subgraph cluster_57 { color=blue - 232 [label="Enter block"]; + 230 [label="Enter block"]; subgraph cluster_58 { color=blue - 233 [label="Enter when"]; + 231 [label="Enter when"]; subgraph cluster_59 { color=blue - 234 [label="Enter when branch condition "]; - 235 [label="Access variable R|/a|"]; - 236 [label="Access variable R|/b|"]; - 237 [label="Operator =="]; - 238 [label="Exit when branch condition"]; + 232 [label="Enter when branch condition "]; + 233 [label="Access variable R|/a|"]; + 234 [label="Access variable R|/b|"]; + 235 [label="Operator =="]; + 236 [label="Exit when branch condition"]; } - 239 [label="Synthetic else branch"]; - 240 [label="Enter when branch result"]; + 237 [label="Synthetic else branch"]; + 238 [label="Enter when branch result"]; subgraph cluster_60 { color=blue - 241 [label="Enter block"]; - 242 [label="Access variable R|/b|"]; - 243 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 244 [label="Exit block"]; + 239 [label="Enter block"]; + 240 [label="Access variable R|/b|"]; + 241 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 242 [label="Exit block"]; } - 245 [label="Exit when branch result"]; - 246 [label="Exit when"]; + 243 [label="Exit when branch result"]; + 244 [label="Exit when"]; } - 247 [label="Access variable R|/b|"]; - 248 [label="Function call: R|/b|.#()"]; + 245 [label="Access variable R|/b|"]; + 246 [label="Function call: R|/b|.#()"]; subgraph cluster_61 { color=blue - 249 [label="Enter when"]; + 247 [label="Enter when"]; subgraph cluster_62 { color=blue - 250 [label="Enter when branch condition "]; - 251 [label="Access variable R|/a|"]; - 252 [label="Access variable R|/b|"]; - 253 [label="Operator ==="]; - 254 [label="Exit when branch condition"]; + 248 [label="Enter when branch condition "]; + 249 [label="Access variable R|/a|"]; + 250 [label="Access variable R|/b|"]; + 251 [label="Operator ==="]; + 252 [label="Exit when branch condition"]; } - 255 [label="Synthetic else branch"]; - 256 [label="Enter when branch result"]; + 253 [label="Synthetic else branch"]; + 254 [label="Enter when branch result"]; subgraph cluster_63 { color=blue - 257 [label="Enter block"]; - 258 [label="Access variable R|/b|"]; - 259 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 260 [label="Exit block"]; + 255 [label="Enter block"]; + 256 [label="Access variable R|/b|"]; + 257 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 258 [label="Exit block"]; } - 261 [label="Exit when branch result"]; - 262 [label="Exit when"]; + 259 [label="Exit when branch result"]; + 260 [label="Exit when"]; } - 263 [label="Access variable R|/b|"]; - 264 [label="Function call: R|/b|.#()"]; + 261 [label="Access variable R|/b|"]; + 262 [label="Function call: R|/b|.#()"]; subgraph cluster_64 { color=blue - 265 [label="Enter when"]; + 263 [label="Enter when"]; subgraph cluster_65 { color=blue - 266 [label="Enter when branch condition "]; - 267 [label="Access variable R|/b|"]; - 268 [label="Access variable R|/a|"]; - 269 [label="Operator =="]; - 270 [label="Exit when branch condition"]; + 264 [label="Enter when branch condition "]; + 265 [label="Access variable R|/b|"]; + 266 [label="Access variable R|/a|"]; + 267 [label="Operator =="]; + 268 [label="Exit when branch condition"]; } - 271 [label="Synthetic else branch"]; - 272 [label="Enter when branch result"]; + 269 [label="Synthetic else branch"]; + 270 [label="Enter when branch result"]; subgraph cluster_66 { color=blue - 273 [label="Enter block"]; - 274 [label="Access variable R|/b|"]; - 275 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 276 [label="Exit block"]; + 271 [label="Enter block"]; + 272 [label="Access variable R|/b|"]; + 273 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 274 [label="Exit block"]; } - 277 [label="Exit when branch result"]; - 278 [label="Exit when"]; + 275 [label="Exit when branch result"]; + 276 [label="Exit when"]; } - 279 [label="Access variable R|/b|"]; - 280 [label="Function call: R|/b|.#()"]; + 277 [label="Access variable R|/b|"]; + 278 [label="Function call: R|/b|.#()"]; subgraph cluster_67 { color=blue - 281 [label="Enter when"]; + 279 [label="Enter when"]; subgraph cluster_68 { color=blue - 282 [label="Enter when branch condition "]; - 283 [label="Access variable R|/b|"]; - 284 [label="Access variable R|/a|"]; - 285 [label="Operator ==="]; - 286 [label="Exit when branch condition"]; + 280 [label="Enter when branch condition "]; + 281 [label="Access variable R|/b|"]; + 282 [label="Access variable R|/a|"]; + 283 [label="Operator ==="]; + 284 [label="Exit when branch condition"]; } - 287 [label="Synthetic else branch"]; - 288 [label="Enter when branch result"]; + 285 [label="Synthetic else branch"]; + 286 [label="Enter when branch result"]; subgraph cluster_69 { color=blue - 289 [label="Enter block"]; - 290 [label="Access variable R|/b|"]; - 291 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 292 [label="Exit block"]; + 287 [label="Enter block"]; + 288 [label="Access variable R|/b|"]; + 289 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 290 [label="Exit block"]; } - 293 [label="Exit when branch result"]; - 294 [label="Exit when"]; + 291 [label="Exit when branch result"]; + 292 [label="Exit when"]; } - 295 [label="Access variable R|/b|"]; - 296 [label="Function call: R|/b|.#()"]; - 297 [label="Exit block"]; + 293 [label="Access variable R|/b|"]; + 294 [label="Function call: R|/b|.#()"]; + 295 [label="Exit block"]; } - 298 [label="Exit function test_9" style="filled" fillcolor=red]; + 296 [label="Exit function test_9" style="filled" fillcolor=red]; } + 229 -> {230}; + 230 -> {231}; 231 -> {232}; 232 -> {233}; 233 -> {234}; 234 -> {235}; 235 -> {236}; - 236 -> {237}; - 237 -> {238}; - 238 -> {240 239}; - 239 -> {246}; + 236 -> {238 237}; + 237 -> {244}; + 238 -> {239}; + 239 -> {240}; 240 -> {241}; 241 -> {242}; 242 -> {243}; @@ -784,10 +782,10 @@ digraph nullability_kt { 249 -> {250}; 250 -> {251}; 251 -> {252}; - 252 -> {253}; - 253 -> {254}; - 254 -> {256 255}; - 255 -> {262}; + 252 -> {254 253}; + 253 -> {260}; + 254 -> {255}; + 255 -> {256}; 256 -> {257}; 257 -> {258}; 258 -> {259}; @@ -800,10 +798,10 @@ digraph nullability_kt { 265 -> {266}; 266 -> {267}; 267 -> {268}; - 268 -> {269}; - 269 -> {270}; - 270 -> {272 271}; - 271 -> {278}; + 268 -> {270 269}; + 269 -> {276}; + 270 -> {271}; + 271 -> {272}; 272 -> {273}; 273 -> {274}; 274 -> {275}; @@ -816,10 +814,10 @@ digraph nullability_kt { 281 -> {282}; 282 -> {283}; 283 -> {284}; - 284 -> {285}; - 285 -> {286}; - 286 -> {288 287}; - 287 -> {294}; + 284 -> {286 285}; + 285 -> {292}; + 286 -> {287}; + 287 -> {288}; 288 -> {289}; 289 -> {290}; 290 -> {291}; @@ -828,129 +826,129 @@ digraph nullability_kt { 293 -> {294}; 294 -> {295}; 295 -> {296}; - 296 -> {297}; - 297 -> {298}; subgraph cluster_70 { color=red - 299 [label="Enter function test_10" style="filled" fillcolor=red]; + 297 [label="Enter function test_10" style="filled" fillcolor=red]; subgraph cluster_71 { color=blue - 300 [label="Enter block"]; + 298 [label="Enter block"]; subgraph cluster_72 { color=blue - 301 [label="Enter when"]; + 299 [label="Enter when"]; subgraph cluster_73 { color=blue - 302 [label="Enter when branch condition "]; - 303 [label="Access variable R|/a|"]; - 304 [label="Access variable R|/b|"]; - 305 [label="Operator =="]; - 306 [label="Exit when branch condition"]; + 300 [label="Enter when branch condition "]; + 301 [label="Access variable R|/a|"]; + 302 [label="Access variable R|/b|"]; + 303 [label="Operator =="]; + 304 [label="Exit when branch condition"]; } - 307 [label="Synthetic else branch"]; - 308 [label="Enter when branch result"]; + 305 [label="Synthetic else branch"]; + 306 [label="Enter when branch result"]; subgraph cluster_74 { color=blue - 309 [label="Enter block"]; - 310 [label="Access variable R|/b|"]; - 311 [label="Function call: R|/b|.#()"]; - 312 [label="Exit block"]; + 307 [label="Enter block"]; + 308 [label="Access variable R|/b|"]; + 309 [label="Function call: R|/b|.#()"]; + 310 [label="Exit block"]; } - 313 [label="Exit when branch result"]; - 314 [label="Exit when"]; + 311 [label="Exit when branch result"]; + 312 [label="Exit when"]; } - 315 [label="Access variable R|/b|"]; - 316 [label="Function call: R|/b|.#()"]; + 313 [label="Access variable R|/b|"]; + 314 [label="Function call: R|/b|.#()"]; subgraph cluster_75 { color=blue - 317 [label="Enter when"]; + 315 [label="Enter when"]; subgraph cluster_76 { color=blue - 318 [label="Enter when branch condition "]; - 319 [label="Access variable R|/a|"]; - 320 [label="Access variable R|/b|"]; - 321 [label="Operator ==="]; - 322 [label="Exit when branch condition"]; + 316 [label="Enter when branch condition "]; + 317 [label="Access variable R|/a|"]; + 318 [label="Access variable R|/b|"]; + 319 [label="Operator ==="]; + 320 [label="Exit when branch condition"]; } - 323 [label="Synthetic else branch"]; - 324 [label="Enter when branch result"]; + 321 [label="Synthetic else branch"]; + 322 [label="Enter when branch result"]; subgraph cluster_77 { color=blue - 325 [label="Enter block"]; - 326 [label="Access variable R|/b|"]; - 327 [label="Function call: R|/b|.#()"]; - 328 [label="Exit block"]; + 323 [label="Enter block"]; + 324 [label="Access variable R|/b|"]; + 325 [label="Function call: R|/b|.#()"]; + 326 [label="Exit block"]; } - 329 [label="Exit when branch result"]; - 330 [label="Exit when"]; + 327 [label="Exit when branch result"]; + 328 [label="Exit when"]; } - 331 [label="Access variable R|/b|"]; - 332 [label="Function call: R|/b|.#()"]; + 329 [label="Access variable R|/b|"]; + 330 [label="Function call: R|/b|.#()"]; subgraph cluster_78 { color=blue - 333 [label="Enter when"]; + 331 [label="Enter when"]; subgraph cluster_79 { color=blue - 334 [label="Enter when branch condition "]; - 335 [label="Access variable R|/b|"]; - 336 [label="Access variable R|/a|"]; - 337 [label="Operator =="]; - 338 [label="Exit when branch condition"]; + 332 [label="Enter when branch condition "]; + 333 [label="Access variable R|/b|"]; + 334 [label="Access variable R|/a|"]; + 335 [label="Operator =="]; + 336 [label="Exit when branch condition"]; } - 339 [label="Synthetic else branch"]; - 340 [label="Enter when branch result"]; + 337 [label="Synthetic else branch"]; + 338 [label="Enter when branch result"]; subgraph cluster_80 { color=blue - 341 [label="Enter block"]; - 342 [label="Access variable R|/b|"]; - 343 [label="Function call: R|/b|.#()"]; - 344 [label="Exit block"]; + 339 [label="Enter block"]; + 340 [label="Access variable R|/b|"]; + 341 [label="Function call: R|/b|.#()"]; + 342 [label="Exit block"]; } - 345 [label="Exit when branch result"]; - 346 [label="Exit when"]; + 343 [label="Exit when branch result"]; + 344 [label="Exit when"]; } - 347 [label="Access variable R|/b|"]; - 348 [label="Function call: R|/b|.#()"]; + 345 [label="Access variable R|/b|"]; + 346 [label="Function call: R|/b|.#()"]; subgraph cluster_81 { color=blue - 349 [label="Enter when"]; + 347 [label="Enter when"]; subgraph cluster_82 { color=blue - 350 [label="Enter when branch condition "]; - 351 [label="Access variable R|/b|"]; - 352 [label="Access variable R|/a|"]; - 353 [label="Operator ==="]; - 354 [label="Exit when branch condition"]; + 348 [label="Enter when branch condition "]; + 349 [label="Access variable R|/b|"]; + 350 [label="Access variable R|/a|"]; + 351 [label="Operator ==="]; + 352 [label="Exit when branch condition"]; } - 355 [label="Synthetic else branch"]; - 356 [label="Enter when branch result"]; + 353 [label="Synthetic else branch"]; + 354 [label="Enter when branch result"]; subgraph cluster_83 { color=blue - 357 [label="Enter block"]; - 358 [label="Access variable R|/b|"]; - 359 [label="Function call: R|/b|.#()"]; - 360 [label="Exit block"]; + 355 [label="Enter block"]; + 356 [label="Access variable R|/b|"]; + 357 [label="Function call: R|/b|.#()"]; + 358 [label="Exit block"]; } - 361 [label="Exit when branch result"]; - 362 [label="Exit when"]; + 359 [label="Exit when branch result"]; + 360 [label="Exit when"]; } - 363 [label="Access variable R|/b|"]; - 364 [label="Function call: R|/b|.#()"]; - 365 [label="Exit block"]; + 361 [label="Access variable R|/b|"]; + 362 [label="Function call: R|/b|.#()"]; + 363 [label="Exit block"]; } - 366 [label="Exit function test_10" style="filled" fillcolor=red]; + 364 [label="Exit function test_10" style="filled" fillcolor=red]; } + 297 -> {298}; + 298 -> {299}; 299 -> {300}; 300 -> {301}; 301 -> {302}; 302 -> {303}; 303 -> {304}; - 304 -> {305}; - 305 -> {306}; - 306 -> {308 307}; - 307 -> {314}; + 304 -> {306 305}; + 305 -> {312}; + 306 -> {307}; + 307 -> {308}; 308 -> {309}; 309 -> {310}; 310 -> {311}; @@ -963,10 +961,10 @@ digraph nullability_kt { 317 -> {318}; 318 -> {319}; 319 -> {320}; - 320 -> {321}; - 321 -> {322}; - 322 -> {324 323}; - 323 -> {330}; + 320 -> {322 321}; + 321 -> {328}; + 322 -> {323}; + 323 -> {324}; 324 -> {325}; 325 -> {326}; 326 -> {327}; @@ -979,10 +977,10 @@ digraph nullability_kt { 333 -> {334}; 334 -> {335}; 335 -> {336}; - 336 -> {337}; - 337 -> {338}; - 338 -> {340 339}; - 339 -> {346}; + 336 -> {338 337}; + 337 -> {344}; + 338 -> {339}; + 339 -> {340}; 340 -> {341}; 341 -> {342}; 342 -> {343}; @@ -995,10 +993,10 @@ digraph nullability_kt { 349 -> {350}; 350 -> {351}; 351 -> {352}; - 352 -> {353}; - 353 -> {354}; - 354 -> {356 355}; - 355 -> {362}; + 352 -> {354 353}; + 353 -> {360}; + 354 -> {355}; + 355 -> {356}; 356 -> {357}; 357 -> {358}; 358 -> {359}; @@ -1007,7 +1005,5 @@ digraph nullability_kt { 361 -> {362}; 362 -> {363}; 363 -> {364}; - 364 -> {365}; - 365 -> {366}; }