Files
kotlin-fork/compiler/fir/analysis-tests/testData/resolve/smartcasts/nullability.dot
T
pyos a9be27e330 FIR CFG: add union nodes
Quick quiz:

 Q: In a CFG, what does `a -> b -> c -> d` mean?
 A: `a`, then `b`, then `c`, then `d`.

 Q: In a CFG, what does `a -> b -> d; a -> c -> d` mean?
 A: `a`, then `b` or `c`, then `d`.

 Q: So how do you encode "a, then (b, then c) or (c, then b), then d`?
 A: You can't.

Problem is, you need to, because that's what `a; run2({ b }, { c }); d`
does when `run2` has a contract that it calls both its lambda arguments
in-place: `shuffle(listOf(block1, block2)).forEach { it() }` is a
perfectly valid implementation for it, as little sense as that makes.

So that's what union nodes solve. When a node implements
`UnionNodeMarker`, its inputs are interpreted as "all visited in some
order" instead of the normal "one of the inputs is visited".

Currently this is used for data flow. It *should* also be used for
control flow, but it isn't. But it should be. But that's not so easy.

BTW, `try` exit is NOT a union node; although lambdas in one branch can
be completed according to types' of lambdas in another, data does not
flow between the branches anyway (since we don't know how much of the
`try` executed before jumping into `catch`, and `catch`es are mutually
exclusive) so a `try` expression is more like `when` than a function
call with called-in-place-exactly-once arguments. The fact that
`exitTryExpression` used `processUnionOfArguments` in a weird way
should've hinted at that, but now we know for certain.
2022-12-08 10:19:29 +00:00

1564 lines
56 KiB
Plaintext
Vendored

digraph nullability_kt {
graph [nodesep=3]
node [shape=box penwidth=2]
edge [penwidth=2]
subgraph cluster_0 {
color=red
0 [label="Enter function foo" style="filled" fillcolor=red];
1 [label="Exit function foo" style="filled" fillcolor=red];
}
0 -> {1};
subgraph cluster_1 {
color=red
2 [label="Enter function getA" style="filled" fillcolor=red];
3 [label="Exit function getA" style="filled" fillcolor=red];
}
2 -> {3};
subgraph cluster_2 {
color=red
4 [label="Enter class A" style="filled" fillcolor=red];
5 [label="Exit class A" style="filled" fillcolor=red];
}
4 -> {5} [color=green];
subgraph cluster_3 {
color=red
6 [label="Enter function fs" style="filled" fillcolor=red];
7 [label="Exit function fs" style="filled" fillcolor=red];
}
6 -> {7};
subgraph cluster_4 {
color=red
8 [label="Enter class MyData" style="filled" fillcolor=red];
9 [label="Exit class MyData" style="filled" fillcolor=red];
}
8 -> {9} [color=green];
subgraph cluster_5 {
color=red
10 [label="Enter function fdata" style="filled" fillcolor=red];
11 [label="Exit function fdata" style="filled" fillcolor=red];
}
10 -> {11};
subgraph cluster_6 {
color=red
12 [label="Enter class Q" style="filled" fillcolor=red];
13 [label="Exit class Q" style="filled" fillcolor=red];
}
12 -> {13} [color=green];
subgraph cluster_7 {
color=red
14 [label="Enter function <init>" style="filled" fillcolor=red];
15 [label="Delegated constructor call: super<R|kotlin/Any|>()" style="filled" fillcolor=yellow];
16 [label="Exit function <init>" style="filled" fillcolor=red];
}
14 -> {15};
15 -> {16};
subgraph cluster_8 {
color=red
17 [label="Enter property" style="filled" fillcolor=red];
18 [label="Access variable R|<local>/data|"];
19 [label="Exit property" style="filled" fillcolor=red];
}
17 -> {18};
18 -> {19};
19 -> {29} [color=green];
subgraph cluster_9 {
color=red
20 [label="Enter function fdata" style="filled" fillcolor=red];
subgraph cluster_10 {
color=blue
21 [label="Enter block"];
22 [label="Const: Null(null)"];
23 [label="Jump: ^fdata Null(null)"];
24 [label="Stub" style="filled" fillcolor=gray];
25 [label="Exit block" style="filled" fillcolor=gray];
}
26 [label="Exit function fdata" style="filled" fillcolor=red];
}
20 -> {21};
21 -> {22};
22 -> {23};
23 -> {26};
23 -> {24} [style=dotted];
24 -> {25} [style=dotted];
25 -> {26} [style=dotted];
subgraph cluster_11 {
color=red
27 [label="Enter class QImpl" style="filled" fillcolor=red];
28 [label="Part of class initialization"];
29 [label="Exit class QImpl" style="filled" fillcolor=red];
}
27 -> {28} [color=green];
28 -> {29} [style=dotted];
28 -> {17} [color=green];
28 -> {17} [style=dashed];
subgraph cluster_12 {
color=red
30 [label="Enter function <init>" style="filled" fillcolor=red];
31 [label="Delegated constructor call: super<R|kotlin/Any|>()" style="filled" fillcolor=yellow];
32 [label="Exit function <init>" style="filled" fillcolor=red];
}
30 -> {31};
31 -> {32};
subgraph cluster_13 {
color=red
33 [label="Enter property" style="filled" fillcolor=red];
34 [label="Access variable R|<local>/data|"];
35 [label="Exit property" style="filled" fillcolor=red];
}
33 -> {34};
34 -> {35};
35 -> {45} [color=green];
subgraph cluster_14 {
color=red
36 [label="Enter function fdata" style="filled" fillcolor=red];
subgraph cluster_15 {
color=blue
37 [label="Enter block"];
38 [label="Const: Null(null)"];
39 [label="Jump: ^fdata Null(null)"];
40 [label="Stub" style="filled" fillcolor=gray];
41 [label="Exit block" style="filled" fillcolor=gray];
}
42 [label="Exit function fdata" style="filled" fillcolor=red];
}
36 -> {37};
37 -> {38};
38 -> {39};
39 -> {42};
39 -> {40} [style=dotted];
40 -> {41} [style=dotted];
41 -> {42} [style=dotted];
subgraph cluster_16 {
color=red
43 [label="Enter class QImplMutable" style="filled" fillcolor=red];
44 [label="Part of class initialization"];
45 [label="Exit class QImplMutable" style="filled" fillcolor=red];
}
43 -> {44} [color=green];
44 -> {45} [style=dotted];
44 -> {33} [color=green];
44 -> {33} [style=dashed];
subgraph cluster_17 {
color=red
46 [label="Enter function <init>" style="filled" fillcolor=red];
47 [label="Delegated constructor call: super<R|kotlin/Any|>()" style="filled" fillcolor=yellow];
48 [label="Exit function <init>" style="filled" fillcolor=red];
}
46 -> {47};
47 -> {48};
subgraph cluster_18 {
color=red
49 [label="Enter function getter" style="filled" fillcolor=red];
subgraph cluster_19 {
color=blue
50 [label="Enter block"];
51 [label="Const: Null(null)"];
52 [label="Jump: ^ Null(null)"];
53 [label="Stub" style="filled" fillcolor=gray];
54 [label="Exit block" style="filled" fillcolor=gray];
}
55 [label="Exit function getter" style="filled" fillcolor=red];
}
49 -> {50};
50 -> {51};
51 -> {52};
52 -> {55};
52 -> {53} [style=dotted];
53 -> {54} [style=dotted];
54 -> {55} [style=dotted];
subgraph cluster_20 {
color=red
56 [label="Enter function fdata" style="filled" fillcolor=red];
subgraph cluster_21 {
color=blue
57 [label="Enter block"];
58 [label="Const: Null(null)"];
59 [label="Jump: ^fdata Null(null)"];
60 [label="Stub" style="filled" fillcolor=gray];
61 [label="Exit block" style="filled" fillcolor=gray];
}
62 [label="Exit function fdata" style="filled" fillcolor=red];
}
56 -> {57};
57 -> {58};
58 -> {59};
59 -> {62};
59 -> {60} [style=dotted];
60 -> {61} [style=dotted];
61 -> {62} [style=dotted];
subgraph cluster_22 {
color=red
63 [label="Enter class QImplWithCustomGetter" style="filled" fillcolor=red];
64 [label="Exit class QImplWithCustomGetter" style="filled" fillcolor=red];
}
63 -> {64} [color=green];
subgraph cluster_23 {
color=red
65 [label="Enter function test_1" style="filled" fillcolor=red];
subgraph cluster_24 {
color=blue
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|<local>/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|<local>/x|"];
78 [label="Smart cast: R|<local>/x|"];
79 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()" style="filled" fillcolor=yellow];
80 [label="Exit block"];
}
81 [label="Exit when branch result"];
82 [label="Enter when branch result"];
subgraph cluster_29 {
color=blue
83 [label="Enter block"];
84 [label="Access variable R|<local>/x|"];
85 [label="Smart cast: R|<local>/x|"];
86 [label="Function call: R|<local>/x|.R|/A.foo|()" style="filled" fillcolor=yellow];
87 [label="Exit block"];
}
88 [label="Exit when branch result"];
89 [label="Exit when"];
}
90 [label="Access variable R|<local>/x|"];
91 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()" style="filled" fillcolor=yellow];
92 [label="Exit block"];
}
93 [label="Exit function test_1" style="filled" fillcolor=red];
}
65 -> {66};
66 -> {67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {71};
71 -> {72};
72 -> {82 73};
73 -> {74};
74 -> {75};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {89};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
86 -> {87};
87 -> {88};
88 -> {89};
89 -> {90};
90 -> {91};
91 -> {92};
92 -> {93};
subgraph cluster_30 {
color=red
94 [label="Enter function test_2" style="filled" fillcolor=red];
subgraph cluster_31 {
color=blue
95 [label="Enter block"];
subgraph cluster_32 {
color=blue
96 [label="Enter when"];
subgraph cluster_33 {
color=blue
97 [label="Enter when branch condition "];
98 [label="Access variable R|<local>/x|"];
99 [label="Const: Null(null)"];
100 [label="Equality operator =="];
101 [label="Exit when branch condition"];
}
subgraph cluster_34 {
color=blue
102 [label="Enter when branch condition else"];
103 [label="Exit when branch condition"];
}
104 [label="Enter when branch result"];
subgraph cluster_35 {
color=blue
105 [label="Enter block"];
106 [label="Access variable R|<local>/x|"];
107 [label="Smart cast: R|<local>/x|"];
108 [label="Function call: R|<local>/x|.R|/A.foo|()" style="filled" fillcolor=yellow];
109 [label="Exit block"];
}
110 [label="Exit when branch result"];
111 [label="Enter when branch result"];
subgraph cluster_36 {
color=blue
112 [label="Enter block"];
113 [label="Access variable R|<local>/x|"];
114 [label="Smart cast: R|<local>/x|"];
115 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()" style="filled" fillcolor=yellow];
116 [label="Exit block"];
}
117 [label="Exit when branch result"];
118 [label="Exit when"];
}
119 [label="Access variable R|<local>/x|"];
120 [label="Function call: R|<local>/x|.<Inapplicable(UNSAFE_CALL): /A.foo>#()" style="filled" fillcolor=yellow];
121 [label="Exit block"];
}
122 [label="Exit function test_2" style="filled" fillcolor=red];
}
94 -> {95};
95 -> {96};
96 -> {97};
97 -> {98};
98 -> {99};
99 -> {100};
100 -> {101};
101 -> {111 102};
102 -> {103};
103 -> {104};
104 -> {105};
105 -> {106};
106 -> {107};
107 -> {108};
108 -> {109};
109 -> {110};
110 -> {118};
111 -> {112};
112 -> {113};
113 -> {114};
114 -> {115};
115 -> {116};
116 -> {117};
117 -> {118};
118 -> {119};
119 -> {120};
120 -> {121};
121 -> {122};
subgraph cluster_37 {
color=red
123 [label="Enter function test_3" style="filled" fillcolor=red];
subgraph cluster_38 {
color=blue
124 [label="Enter block"];
125 [label="Access variable R|<local>/x|"];
126 [label="Exit lhs of ?:"];
127 [label="Enter rhs of ?:"];
128 [label="Jump: ^test_3 Unit"];
129 [label="Stub" style="filled" fillcolor=gray];
130 [label="Lhs of ?: is not null"];
131 [label="Exit ?:"];
132 [label="Access variable R|<local>/x|"];
133 [label="Smart cast: R|<local>/x|"];
134 [label="Function call: R|<local>/x|.R|/A.foo|()" style="filled" fillcolor=yellow];
135 [label="Exit block"];
}
136 [label="Exit function test_3" style="filled" fillcolor=red];
}
123 -> {124};
124 -> {125};
125 -> {126};
126 -> {130 127};
127 -> {128};
128 -> {136};
128 -> {129} [style=dotted];
129 -> {131} [style=dotted];
130 -> {131};
131 -> {132};
132 -> {133};
133 -> {134};
134 -> {135};
135 -> {136};
subgraph cluster_39 {
color=red
137 [label="Enter function test_4" style="filled" fillcolor=red];
subgraph cluster_40 {
color=blue
138 [label="Enter block"];
subgraph cluster_41 {
color=blue
139 [label="Enter when"];
subgraph cluster_42 {
color=blue
140 [label="Enter when branch condition "];
141 [label="Access variable R|<local>/x|"];
142 [label="Enter safe call"];
143 [label="Function call: $subj$.R|/A.getA|()" style="filled" fillcolor=yellow];
144 [label="Exit safe call"];
145 [label="Const: Null(null)"];
146 [label="Equality operator =="];
147 [label="Exit when branch condition"];
}
148 [label="Synthetic else branch"];
149 [label="Enter when branch result"];
subgraph cluster_43 {
color=blue
150 [label="Enter block"];
151 [label="Jump: ^test_4 Unit"];
152 [label="Stub" style="filled" fillcolor=gray];
153 [label="Exit block" style="filled" fillcolor=gray];
}
154 [label="Exit when branch result" style="filled" fillcolor=gray];
155 [label="Exit when"];
}
156 [label="Access variable R|<local>/x|"];
157 [label="Smart cast: R|<local>/x|"];
158 [label="Function call: R|<local>/x|.R|/A.foo|()" style="filled" fillcolor=yellow];
159 [label="Exit block"];
}
160 [label="Exit function test_4" style="filled" fillcolor=red];
}
137 -> {138};
138 -> {139};
139 -> {140};
140 -> {141};
141 -> {142 144};
142 -> {143};
143 -> {144};
144 -> {145};
145 -> {146};
146 -> {147};
147 -> {149 148};
148 -> {155};
149 -> {150};
150 -> {151};
151 -> {160};
151 -> {152} [style=dotted];
152 -> {153} [style=dotted];
153 -> {154} [style=dotted];
154 -> {155} [style=dotted];
155 -> {156};
156 -> {157};
157 -> {158};
158 -> {159};
159 -> {160};
subgraph cluster_44 {
color=red
161 [label="Enter function test_5" style="filled" fillcolor=red];
subgraph cluster_45 {
color=blue
162 [label="Enter block"];
subgraph cluster_46 {
color=blue
163 [label="Enter when"];
subgraph cluster_47 {
color=blue
164 [label="Enter when branch condition "];
165 [label="Access variable R|<local>/q|"];
166 [label="Enter safe call"];
167 [label="Access variable R|/Q.data|"];
168 [label="Enter safe call"];
169 [label="Access variable R|/MyData.s|"];
170 [label="Enter safe call"];
171 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
172 [label="Exit safe call"];
173 [label="Exit safe call"];
174 [label="Exit safe call"];
175 [label="Const: Null(null)"];
176 [label="Equality operator !="];
177 [label="Exit when branch condition"];
}
178 [label="Synthetic else branch"];
179 [label="Enter when branch result"];
subgraph cluster_48 {
color=blue
180 [label="Enter block"];
181 [label="Access variable R|<local>/q|"];
182 [label="Smart cast: R|<local>/q|"];
183 [label="Access variable R|/Q.data|"];
184 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
185 [label="Access variable R|<local>/q|"];
186 [label="Smart cast: R|<local>/q|"];
187 [label="Access variable R|/Q.data|"];
188 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
189 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
190 [label="Access variable R|<local>/q|"];
191 [label="Smart cast: R|<local>/q|"];
192 [label="Access variable R|/Q.data|"];
193 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
194 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
195 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
196 [label="Exit block"];
}
197 [label="Exit when branch result"];
198 [label="Exit when"];
}
199 [label="Exit block"];
}
200 [label="Exit function test_5" style="filled" fillcolor=red];
}
161 -> {162};
162 -> {163};
163 -> {164};
164 -> {165};
165 -> {166 172};
166 -> {167};
167 -> {172 168};
168 -> {169};
169 -> {173 170};
170 -> {171};
171 -> {174};
172 -> {173};
173 -> {174};
174 -> {175};
175 -> {176};
176 -> {177};
177 -> {179 178};
178 -> {198};
179 -> {180};
180 -> {181};
181 -> {182};
182 -> {183};
183 -> {184};
184 -> {185};
185 -> {186};
186 -> {187};
187 -> {188};
188 -> {189};
189 -> {190};
190 -> {191};
191 -> {192};
192 -> {193};
193 -> {194};
194 -> {195};
195 -> {196};
196 -> {197};
197 -> {198};
198 -> {199};
199 -> {200};
subgraph cluster_49 {
color=red
201 [label="Enter function test_6" style="filled" fillcolor=red];
subgraph cluster_50 {
color=blue
202 [label="Enter block"];
203 [label="Access variable R|<local>/q|"];
204 [label="Enter safe call"];
205 [label="Access variable R|/Q.data|"];
206 [label="Enter safe call"];
207 [label="Access variable R|/MyData.s|"];
208 [label="Enter safe call"];
209 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
210 [label="Exit safe call"];
211 [label="Exit lhs of ?:"];
212 [label="Lhs of ?: is not null"];
213 [label="Exit safe call"];
214 [label="Exit safe call"];
215 [label="Enter rhs of ?:"];
216 [label="Jump: ^test_6 Unit"];
217 [label="Stub" style="filled" fillcolor=gray];
218 [label="Exit ?:"];
219 [label="Access variable R|<local>/q|"];
220 [label="Smart cast: R|<local>/q|"];
221 [label="Access variable R|/Q.data|"];
222 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
223 [label="Access variable R|<local>/q|"];
224 [label="Smart cast: R|<local>/q|"];
225 [label="Access variable R|/Q.data|"];
226 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
227 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
228 [label="Access variable R|<local>/q|"];
229 [label="Smart cast: R|<local>/q|"];
230 [label="Access variable R|/Q.data|"];
231 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
232 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
233 [label="Function call: R|<local>/q|.R|/Q.data|.<Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
234 [label="Exit block"];
}
235 [label="Exit function test_6" style="filled" fillcolor=red];
}
201 -> {202};
202 -> {203};
203 -> {204 213};
204 -> {205};
205 -> {213 206};
206 -> {207};
207 -> {214 208};
208 -> {209};
209 -> {210};
210 -> {211};
211 -> {212 215};
212 -> {218};
213 -> {214};
214 -> {215};
215 -> {216};
216 -> {235};
216 -> {217} [style=dotted];
217 -> {218} [style=dotted];
218 -> {219};
219 -> {220};
220 -> {221};
221 -> {222};
222 -> {223};
223 -> {224};
224 -> {225};
225 -> {226};
226 -> {227};
227 -> {228};
228 -> {229};
229 -> {230};
230 -> {231};
231 -> {232};
232 -> {233};
233 -> {234};
234 -> {235};
subgraph cluster_51 {
color=red
236 [label="Enter function test_7" style="filled" fillcolor=red];
subgraph cluster_52 {
color=blue
237 [label="Enter block"];
subgraph cluster_53 {
color=blue
238 [label="Enter when"];
subgraph cluster_54 {
color=blue
239 [label="Enter when branch condition "];
240 [label="Access variable R|<local>/q|"];
241 [label="Enter safe call"];
242 [label="Function call: $subj$.R|/Q.fdata|()" style="filled" fillcolor=yellow];
243 [label="Enter safe call"];
244 [label="Function call: $subj$.R|/MyData.fs|()" style="filled" fillcolor=yellow];
245 [label="Enter safe call"];
246 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
247 [label="Exit safe call"];
248 [label="Exit safe call"];
249 [label="Exit safe call"];
250 [label="Const: Null(null)"];
251 [label="Equality operator !="];
252 [label="Exit when branch condition"];
}
253 [label="Synthetic else branch"];
254 [label="Enter when branch result"];
subgraph cluster_55 {
color=blue
255 [label="Enter block"];
256 [label="Access variable R|<local>/q|"];
257 [label="Smart cast: R|<local>/q|"];
258 [label="Function call: R|<local>/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow];
259 [label="Access variable R|<local>/q|"];
260 [label="Smart cast: R|<local>/q|"];
261 [label="Function call: R|<local>/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow];
262 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#()" style="filled" fillcolor=yellow];
263 [label="Access variable R|<local>/q|"];
264 [label="Smart cast: R|<local>/q|"];
265 [label="Function call: R|<local>/q|.R|/Q.fdata|()" style="filled" fillcolor=yellow];
266 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#()" style="filled" fillcolor=yellow];
267 [label="Function call: R|<local>/q|.R|/Q.fdata|().<Inapplicable(UNSAFE_CALL): /MyData.fs>#().R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
268 [label="Exit block"];
}
269 [label="Exit when branch result"];
270 [label="Exit when"];
}
271 [label="Exit block"];
}
272 [label="Exit function test_7" style="filled" fillcolor=red];
}
236 -> {237};
237 -> {238};
238 -> {239};
239 -> {240};
240 -> {241 247};
241 -> {242};
242 -> {247 243};
243 -> {244};
244 -> {248 245};
245 -> {246};
246 -> {249};
247 -> {248};
248 -> {249};
249 -> {250};
250 -> {251};
251 -> {252};
252 -> {254 253};
253 -> {270};
254 -> {255};
255 -> {256};
256 -> {257};
257 -> {258};
258 -> {259};
259 -> {260};
260 -> {261};
261 -> {262};
262 -> {263};
263 -> {264};
264 -> {265};
265 -> {266};
266 -> {267};
267 -> {268};
268 -> {269};
269 -> {270};
270 -> {271};
271 -> {272};
subgraph cluster_56 {
color=red
273 [label="Enter function test_8" style="filled" fillcolor=red];
subgraph cluster_57 {
color=blue
274 [label="Enter block"];
subgraph cluster_58 {
color=blue
275 [label="Enter when"];
subgraph cluster_59 {
color=blue
276 [label="Enter when branch condition "];
277 [label="Access variable R|<local>/b|"];
278 [label="Const: Boolean(true)"];
279 [label="Equality operator =="];
280 [label="Exit when branch condition"];
}
281 [label="Synthetic else branch"];
282 [label="Enter when branch result"];
subgraph cluster_60 {
color=blue
283 [label="Enter block"];
284 [label="Access variable R|<local>/b|"];
285 [label="Smart cast: R|<local>/b|"];
286 [label="Function call: R|<local>/b|.R|kotlin/Boolean.not|()" style="filled" fillcolor=yellow];
287 [label="Exit block"];
}
288 [label="Exit when branch result"];
289 [label="Exit when"];
}
290 [label="Exit block"];
}
291 [label="Exit function test_8" style="filled" fillcolor=red];
}
273 -> {274};
274 -> {275};
275 -> {276};
276 -> {277};
277 -> {278};
278 -> {279};
279 -> {280};
280 -> {282 281};
281 -> {289};
282 -> {283};
283 -> {284};
284 -> {285};
285 -> {286};
286 -> {287};
287 -> {288};
288 -> {289};
289 -> {290};
290 -> {291};
subgraph cluster_61 {
color=red
292 [label="Enter function test_9" style="filled" fillcolor=red];
subgraph cluster_62 {
color=blue
293 [label="Enter block"];
subgraph cluster_63 {
color=blue
294 [label="Enter when"];
subgraph cluster_64 {
color=blue
295 [label="Enter when branch condition "];
296 [label="Access variable R|<local>/a|"];
297 [label="Access variable R|<local>/b|"];
298 [label="Equality operator =="];
299 [label="Exit when branch condition"];
}
300 [label="Synthetic else branch"];
301 [label="Enter when branch result"];
subgraph cluster_65 {
color=blue
302 [label="Enter block"];
303 [label="Access variable R|<local>/b|"];
304 [label="Smart cast: R|<local>/b|"];
305 [label="Function call: R|<local>/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
306 [label="Exit block"];
}
307 [label="Exit when branch result"];
308 [label="Exit when"];
}
309 [label="Access variable R|<local>/b|"];
310 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_66 {
color=blue
311 [label="Enter when"];
subgraph cluster_67 {
color=blue
312 [label="Enter when branch condition "];
313 [label="Access variable R|<local>/a|"];
314 [label="Access variable R|<local>/b|"];
315 [label="Equality operator ==="];
316 [label="Exit when branch condition"];
}
317 [label="Synthetic else branch"];
318 [label="Enter when branch result"];
subgraph cluster_68 {
color=blue
319 [label="Enter block"];
320 [label="Access variable R|<local>/b|"];
321 [label="Smart cast: R|<local>/b|"];
322 [label="Function call: R|<local>/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
323 [label="Exit block"];
}
324 [label="Exit when branch result"];
325 [label="Exit when"];
}
326 [label="Access variable R|<local>/b|"];
327 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_69 {
color=blue
328 [label="Enter when"];
subgraph cluster_70 {
color=blue
329 [label="Enter when branch condition "];
330 [label="Access variable R|<local>/b|"];
331 [label="Access variable R|<local>/a|"];
332 [label="Equality operator =="];
333 [label="Exit when branch condition"];
}
334 [label="Synthetic else branch"];
335 [label="Enter when branch result"];
subgraph cluster_71 {
color=blue
336 [label="Enter block"];
337 [label="Access variable R|<local>/b|"];
338 [label="Smart cast: R|<local>/b|"];
339 [label="Function call: R|<local>/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
340 [label="Exit block"];
}
341 [label="Exit when branch result"];
342 [label="Exit when"];
}
343 [label="Access variable R|<local>/b|"];
344 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_72 {
color=blue
345 [label="Enter when"];
subgraph cluster_73 {
color=blue
346 [label="Enter when branch condition "];
347 [label="Access variable R|<local>/b|"];
348 [label="Access variable R|<local>/a|"];
349 [label="Equality operator ==="];
350 [label="Exit when branch condition"];
}
351 [label="Synthetic else branch"];
352 [label="Enter when branch result"];
subgraph cluster_74 {
color=blue
353 [label="Enter block"];
354 [label="Access variable R|<local>/b|"];
355 [label="Smart cast: R|<local>/b|"];
356 [label="Function call: R|<local>/b|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
357 [label="Exit block"];
}
358 [label="Exit when branch result"];
359 [label="Exit when"];
}
360 [label="Access variable R|<local>/b|"];
361 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
362 [label="Exit block"];
}
363 [label="Exit function test_9" style="filled" fillcolor=red];
}
292 -> {293};
293 -> {294};
294 -> {295};
295 -> {296};
296 -> {297};
297 -> {298};
298 -> {299};
299 -> {301 300};
300 -> {308};
301 -> {302};
302 -> {303};
303 -> {304};
304 -> {305};
305 -> {306};
306 -> {307};
307 -> {308};
308 -> {309};
309 -> {310};
310 -> {311};
311 -> {312};
312 -> {313};
313 -> {314};
314 -> {315};
315 -> {316};
316 -> {318 317};
317 -> {325};
318 -> {319};
319 -> {320};
320 -> {321};
321 -> {322};
322 -> {323};
323 -> {324};
324 -> {325};
325 -> {326};
326 -> {327};
327 -> {328};
328 -> {329};
329 -> {330};
330 -> {331};
331 -> {332};
332 -> {333};
333 -> {335 334};
334 -> {342};
335 -> {336};
336 -> {337};
337 -> {338};
338 -> {339};
339 -> {340};
340 -> {341};
341 -> {342};
342 -> {343};
343 -> {344};
344 -> {345};
345 -> {346};
346 -> {347};
347 -> {348};
348 -> {349};
349 -> {350};
350 -> {352 351};
351 -> {359};
352 -> {353};
353 -> {354};
354 -> {355};
355 -> {356};
356 -> {357};
357 -> {358};
358 -> {359};
359 -> {360};
360 -> {361};
361 -> {362};
362 -> {363};
subgraph cluster_75 {
color=red
364 [label="Enter function test_10" style="filled" fillcolor=red];
subgraph cluster_76 {
color=blue
365 [label="Enter block"];
subgraph cluster_77 {
color=blue
366 [label="Enter when"];
subgraph cluster_78 {
color=blue
367 [label="Enter when branch condition "];
368 [label="Access variable R|<local>/a|"];
369 [label="Access variable R|<local>/b|"];
370 [label="Equality operator =="];
371 [label="Exit when branch condition"];
}
372 [label="Synthetic else branch"];
373 [label="Enter when branch result"];
subgraph cluster_79 {
color=blue
374 [label="Enter block"];
375 [label="Access variable R|<local>/b|"];
376 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
377 [label="Exit block"];
}
378 [label="Exit when branch result"];
379 [label="Exit when"];
}
380 [label="Access variable R|<local>/b|"];
381 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_80 {
color=blue
382 [label="Enter when"];
subgraph cluster_81 {
color=blue
383 [label="Enter when branch condition "];
384 [label="Access variable R|<local>/a|"];
385 [label="Access variable R|<local>/b|"];
386 [label="Equality operator ==="];
387 [label="Exit when branch condition"];
}
388 [label="Synthetic else branch"];
389 [label="Enter when branch result"];
subgraph cluster_82 {
color=blue
390 [label="Enter block"];
391 [label="Access variable R|<local>/b|"];
392 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
393 [label="Exit block"];
}
394 [label="Exit when branch result"];
395 [label="Exit when"];
}
396 [label="Access variable R|<local>/b|"];
397 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_83 {
color=blue
398 [label="Enter when"];
subgraph cluster_84 {
color=blue
399 [label="Enter when branch condition "];
400 [label="Access variable R|<local>/b|"];
401 [label="Access variable R|<local>/a|"];
402 [label="Equality operator =="];
403 [label="Exit when branch condition"];
}
404 [label="Synthetic else branch"];
405 [label="Enter when branch result"];
subgraph cluster_85 {
color=blue
406 [label="Enter block"];
407 [label="Access variable R|<local>/b|"];
408 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
409 [label="Exit block"];
}
410 [label="Exit when branch result"];
411 [label="Exit when"];
}
412 [label="Access variable R|<local>/b|"];
413 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
subgraph cluster_86 {
color=blue
414 [label="Enter when"];
subgraph cluster_87 {
color=blue
415 [label="Enter when branch condition "];
416 [label="Access variable R|<local>/b|"];
417 [label="Access variable R|<local>/a|"];
418 [label="Equality operator ==="];
419 [label="Exit when branch condition"];
}
420 [label="Synthetic else branch"];
421 [label="Enter when branch result"];
subgraph cluster_88 {
color=blue
422 [label="Enter block"];
423 [label="Access variable R|<local>/b|"];
424 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
425 [label="Exit block"];
}
426 [label="Exit when branch result"];
427 [label="Exit when"];
}
428 [label="Access variable R|<local>/b|"];
429 [label="Function call: R|<local>/b|.<Inapplicable(UNSAFE_CALL): kotlin/Int.inc>#()" style="filled" fillcolor=yellow];
430 [label="Exit block"];
}
431 [label="Exit function test_10" style="filled" fillcolor=red];
}
364 -> {365};
365 -> {366};
366 -> {367};
367 -> {368};
368 -> {369};
369 -> {370};
370 -> {371};
371 -> {373 372};
372 -> {379};
373 -> {374};
374 -> {375};
375 -> {376};
376 -> {377};
377 -> {378};
378 -> {379};
379 -> {380};
380 -> {381};
381 -> {382};
382 -> {383};
383 -> {384};
384 -> {385};
385 -> {386};
386 -> {387};
387 -> {389 388};
388 -> {395};
389 -> {390};
390 -> {391};
391 -> {392};
392 -> {393};
393 -> {394};
394 -> {395};
395 -> {396};
396 -> {397};
397 -> {398};
398 -> {399};
399 -> {400};
400 -> {401};
401 -> {402};
402 -> {403};
403 -> {405 404};
404 -> {411};
405 -> {406};
406 -> {407};
407 -> {408};
408 -> {409};
409 -> {410};
410 -> {411};
411 -> {412};
412 -> {413};
413 -> {414};
414 -> {415};
415 -> {416};
416 -> {417};
417 -> {418};
418 -> {419};
419 -> {421 420};
420 -> {427};
421 -> {422};
422 -> {423};
423 -> {424};
424 -> {425};
425 -> {426};
426 -> {427};
427 -> {428};
428 -> {429};
429 -> {430};
430 -> {431};
subgraph cluster_89 {
color=red
432 [label="Enter function test_11" style="filled" fillcolor=red];
subgraph cluster_90 {
color=blue
433 [label="Enter block"];
subgraph cluster_91 {
color=blue
434 [label="Enter when"];
subgraph cluster_92 {
color=blue
435 [label="Enter when branch condition "];
436 [label="Access variable R|<local>/q|"];
437 [label="Enter safe call"];
438 [label="Access variable R|/QImpl.data|"];
439 [label="Enter safe call"];
440 [label="Access variable R|/MyData.s|"];
441 [label="Enter safe call"];
442 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
443 [label="Exit safe call"];
444 [label="Exit safe call"];
445 [label="Exit safe call"];
446 [label="Const: Null(null)"];
447 [label="Equality operator !="];
448 [label="Exit when branch condition"];
}
449 [label="Synthetic else branch"];
450 [label="Enter when branch result"];
subgraph cluster_93 {
color=blue
451 [label="Enter block"];
452 [label="Access variable R|<local>/q|"];
453 [label="Smart cast: R|<local>/q|"];
454 [label="Access variable R|/QImpl.data|"];
455 [label="Smart cast: R|<local>/q|.R|/QImpl.data|"];
456 [label="Access variable R|<local>/q|"];
457 [label="Smart cast: R|<local>/q|"];
458 [label="Access variable R|/QImpl.data|"];
459 [label="Smart cast: R|<local>/q|.R|/QImpl.data|"];
460 [label="Access variable R|/MyData.s|"];
461 [label="Access variable R|<local>/q|"];
462 [label="Smart cast: R|<local>/q|"];
463 [label="Access variable R|/QImpl.data|"];
464 [label="Smart cast: R|<local>/q|.R|/QImpl.data|"];
465 [label="Access variable R|/MyData.s|"];
466 [label="Function call: R|<local>/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
467 [label="Access variable R|<local>/q2|"];
468 [label="Access variable R|/QImpl.data|"];
469 [label="Access variable R|<local>/q2|"];
470 [label="Access variable R|/QImpl.data|"];
471 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
472 [label="Access variable R|<local>/q2|"];
473 [label="Access variable R|/QImpl.data|"];
474 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
475 [label="Function call: R|<local>/q2|.R|/QImpl.data|.<Inapplicable(UNSAFE_CALL): /MyData.s>#.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
subgraph cluster_94 {
color=blue
476 [label="Enter when"];
subgraph cluster_95 {
color=blue
477 [label="Enter when branch condition "];
478 [label="Access variable R|<local>/q2|"];
479 [label="Access variable R|/QImpl.data|"];
480 [label="Const: Null(null)"];
481 [label="Equality operator !="];
482 [label="Exit when branch condition"];
}
483 [label="Synthetic else branch"];
484 [label="Enter when branch result"];
subgraph cluster_96 {
color=blue
485 [label="Enter block"];
486 [label="Access variable R|<local>/q2|"];
487 [label="Access variable R|/QImpl.data|"];
488 [label="Smart cast: R|<local>/q2|.R|/QImpl.data|"];
489 [label="Access variable R|/MyData.s|"];
490 [label="Access variable R|<local>/q2|"];
491 [label="Access variable R|/QImpl.data|"];
492 [label="Smart cast: R|<local>/q2|.R|/QImpl.data|"];
493 [label="Access variable R|/MyData.s|"];
494 [label="Function call: R|<local>/q2|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
495 [label="Exit block"];
}
496 [label="Exit when branch result"];
497 [label="Exit when"];
}
498 [label="Exit block"];
}
499 [label="Exit when branch result"];
500 [label="Exit when"];
}
501 [label="Exit block"];
}
502 [label="Exit function test_11" style="filled" fillcolor=red];
}
432 -> {433};
433 -> {434};
434 -> {435};
435 -> {436};
436 -> {437 443};
437 -> {438};
438 -> {443 439};
439 -> {440};
440 -> {444 441};
441 -> {442};
442 -> {445};
443 -> {444};
444 -> {445};
445 -> {446};
446 -> {447};
447 -> {448};
448 -> {450 449};
449 -> {500};
450 -> {451};
451 -> {452};
452 -> {453};
453 -> {454};
454 -> {455};
455 -> {456};
456 -> {457};
457 -> {458};
458 -> {459};
459 -> {460};
460 -> {461};
461 -> {462};
462 -> {463};
463 -> {464};
464 -> {465};
465 -> {466};
466 -> {467};
467 -> {468};
468 -> {469};
469 -> {470};
470 -> {471};
471 -> {472};
472 -> {473};
473 -> {474};
474 -> {475};
475 -> {476};
476 -> {477};
477 -> {478};
478 -> {479};
479 -> {480};
480 -> {481};
481 -> {482};
482 -> {484 483};
483 -> {497};
484 -> {485};
485 -> {486};
486 -> {487};
487 -> {488};
488 -> {489};
489 -> {490};
490 -> {491};
491 -> {492};
492 -> {493};
493 -> {494};
494 -> {495};
495 -> {496};
496 -> {497};
497 -> {498};
498 -> {499};
499 -> {500};
500 -> {501};
501 -> {502};
subgraph cluster_97 {
color=red
503 [label="Enter function test_12" style="filled" fillcolor=red];
subgraph cluster_98 {
color=blue
504 [label="Enter block"];
subgraph cluster_99 {
color=blue
505 [label="Enter when"];
subgraph cluster_100 {
color=blue
506 [label="Enter when branch condition "];
507 [label="Access variable R|<local>/q|"];
508 [label="Enter safe call"];
509 [label="Access variable R|/QImplWithCustomGetter.data|"];
510 [label="Enter safe call"];
511 [label="Access variable R|/MyData.s|"];
512 [label="Enter safe call"];
513 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
514 [label="Exit safe call"];
515 [label="Exit safe call"];
516 [label="Exit safe call"];
517 [label="Const: Null(null)"];
518 [label="Equality operator !="];
519 [label="Exit when branch condition"];
}
520 [label="Synthetic else branch"];
521 [label="Enter when branch result"];
subgraph cluster_101 {
color=blue
522 [label="Enter block"];
523 [label="Access variable R|<local>/q|"];
524 [label="Smart cast: R|<local>/q|"];
525 [label="Access variable R|/QImplWithCustomGetter.data|"];
526 [label="Smart cast: R|<local>/q|.R|/QImplWithCustomGetter.data|"];
527 [label="Access variable R|<local>/q|"];
528 [label="Smart cast: R|<local>/q|"];
529 [label="Access variable R|/QImplWithCustomGetter.data|"];
530 [label="Smart cast: R|<local>/q|.R|/QImplWithCustomGetter.data|"];
531 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
532 [label="Access variable R|<local>/q|"];
533 [label="Smart cast: R|<local>/q|"];
534 [label="Access variable R|/QImplWithCustomGetter.data|"];
535 [label="Smart cast: R|<local>/q|.R|/QImplWithCustomGetter.data|"];
536 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
537 [label="Function call: R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
538 [label="Exit block"];
}
539 [label="Exit when branch result"];
540 [label="Exit when"];
}
541 [label="Exit block"];
}
542 [label="Exit function test_12" style="filled" fillcolor=red];
}
503 -> {504};
504 -> {505};
505 -> {506};
506 -> {507};
507 -> {508 514};
508 -> {509};
509 -> {514 510};
510 -> {511};
511 -> {515 512};
512 -> {513};
513 -> {516};
514 -> {515};
515 -> {516};
516 -> {517};
517 -> {518};
518 -> {519};
519 -> {521 520};
520 -> {540};
521 -> {522};
522 -> {523};
523 -> {524};
524 -> {525};
525 -> {526};
526 -> {527};
527 -> {528};
528 -> {529};
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};
subgraph cluster_102 {
color=red
543 [label="Enter function test_13" style="filled" fillcolor=red];
subgraph cluster_103 {
color=blue
544 [label="Enter block"];
subgraph cluster_104 {
color=blue
545 [label="Enter when"];
subgraph cluster_105 {
color=blue
546 [label="Enter when branch condition "];
547 [label="Access variable R|<local>/q|"];
548 [label="Enter safe call"];
549 [label="Access variable R|/QImplMutable.data|"];
550 [label="Enter safe call"];
551 [label="Access variable R|/MyData.s|"];
552 [label="Enter safe call"];
553 [label="Function call: $subj$.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
554 [label="Exit safe call"];
555 [label="Exit safe call"];
556 [label="Exit safe call"];
557 [label="Const: Null(null)"];
558 [label="Equality operator !="];
559 [label="Exit when branch condition"];
}
560 [label="Synthetic else branch"];
561 [label="Enter when branch result"];
subgraph cluster_106 {
color=blue
562 [label="Enter block"];
563 [label="Access variable R|<local>/q|"];
564 [label="Smart cast: R|<local>/q|"];
565 [label="Access variable R|/QImplMutable.data|"];
566 [label="Smart cast: R|<local>/q|.R|/QImplMutable.data|"];
567 [label="Access variable R|<local>/q|"];
568 [label="Smart cast: R|<local>/q|"];
569 [label="Access variable R|/QImplMutable.data|"];
570 [label="Smart cast: R|<local>/q|.R|/QImplMutable.data|"];
571 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
572 [label="Access variable R|<local>/q|"];
573 [label="Smart cast: R|<local>/q|"];
574 [label="Access variable R|/QImplMutable.data|"];
575 [label="Smart cast: R|<local>/q|.R|/QImplMutable.data|"];
576 [label="Access variable <Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#"];
577 [label="Function call: R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(UNSTABLE_SMARTCAST): /MyData.s>#.R|kotlin/Int.inc|()" style="filled" fillcolor=yellow];
578 [label="Exit block"];
}
579 [label="Exit when branch result"];
580 [label="Exit when"];
}
581 [label="Exit block"];
}
582 [label="Exit function test_13" style="filled" fillcolor=red];
}
543 -> {544};
544 -> {545};
545 -> {546};
546 -> {547};
547 -> {548 554};
548 -> {549};
549 -> {554 550};
550 -> {551};
551 -> {555 552};
552 -> {553};
553 -> {556};
554 -> {555};
555 -> {556};
556 -> {557};
557 -> {558};
558 -> {559};
559 -> {561 560};
560 -> {580};
561 -> {562};
562 -> {563};
563 -> {564};
564 -> {565};
565 -> {566};
566 -> {567};
567 -> {568};
568 -> {569};
569 -> {570};
570 -> {571};
571 -> {572};
572 -> {573};
573 -> {574};
574 -> {575};
575 -> {576};
576 -> {577};
577 -> {578};
578 -> {579};
579 -> {580};
580 -> {581};
581 -> {582};
subgraph cluster_107 {
color=red
583 [label="Enter function test_14" style="filled" fillcolor=red];
subgraph cluster_108 {
color=blue
584 [label="Enter block"];
subgraph cluster_109 {
color=blue
585 [label="Enter when"];
subgraph cluster_110 {
color=blue
586 [label="Enter when branch condition "];
587 [label="Access variable R|<local>/q|"];
588 [label="Access variable R|/Q.data|"];
589 [label="Const: Null(null)"];
590 [label="Equality operator =="];
591 [label="Exit when branch condition"];
}
592 [label="Synthetic else branch"];
593 [label="Enter when branch result"];
subgraph cluster_111 {
color=blue
594 [label="Enter block"];
595 [label="Access variable R|<local>/q|"];
596 [label="Access variable R|/Q.data|"];
597 [label="Smart cast: R|<local>/q|.R|/Q.data|"];
598 [label="Access variable <Inapplicable(UNSAFE_CALL): /MyData.s>#"];
599 [label="Exit block"];
}
600 [label="Exit when branch result"];
601 [label="Exit when"];
}
602 [label="Exit block"];
}
603 [label="Exit function test_14" style="filled" fillcolor=red];
}
583 -> {584};
584 -> {585};
585 -> {586};
586 -> {587};
587 -> {588};
588 -> {589};
589 -> {590};
590 -> {591};
591 -> {593 592};
592 -> {601};
593 -> {594};
594 -> {595};
595 -> {596};
596 -> {597};
597 -> {598};
598 -> {599};
599 -> {600};
600 -> {601};
601 -> {602};
602 -> {603};
}