[FIR] Don't use psi for rendering control flow graph

This commit is contained in:
Dmitriy Novozhilov
2020-02-12 18:01:03 +03:00
parent a4b53b4a20
commit 28c95b1108
26 changed files with 130 additions and 131 deletions
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
import org.jetbrains.kotlin.fir.expressions.FirLoop import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl
@@ -160,7 +159,7 @@ private fun CFGNode<*>.render(): String =
is QualifiedAccessNode -> "Access variable ${fir.calleeReference.render()}" is QualifiedAccessNode -> "Access variable ${fir.calleeReference.render()}"
is OperatorCallNode -> "Operator ${fir.operation.operator}" is OperatorCallNode -> "Operator ${fir.operation.operator}"
is TypeOperatorCallNode -> "Type operator: \"${fir.psi?.text?.toString() ?: fir.render()}\"" is TypeOperatorCallNode -> "Type operator: \"${fir.render()}\""
is JumpNode -> "Jump: ${fir.render()}" is JumpNode -> "Jump: ${fir.render()}"
is StubNode -> "Stub" is StubNode -> "Stub"
is CheckNotNullCallNode -> "Check not null: ${fir.render()}" is CheckNotNullCallNode -> "Check not null: ${fir.render()}"
+1 -1
View File
@@ -200,7 +200,7 @@ digraph complex_kt {
color=blue color=blue
66 [label="Enter when branch condition "]; 66 [label="Enter when branch condition "];
67 [label="Access variable R|<local>/element|"]; 67 [label="Access variable R|<local>/element|"];
68 [label="Type operator: element is T"]; 68 [label="Type operator: (R|<local>/element| is R|T|)"];
69 [label="Exit when branch condition"]; 69 [label="Exit when branch condition"];
} }
70 [label="Synthetic else branch"]; 70 [label="Synthetic else branch"];
+2 -2
View File
@@ -165,7 +165,7 @@ digraph jumps_kt {
color=blue color=blue
58 [label="Enter block"]; 58 [label="Enter block"];
59 [label="Access variable R|<local>/x|"]; 59 [label="Access variable R|<local>/x|"];
60 [label="Type operator: x as Int"]; 60 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
61 [label="Jump: break@@@[Boolean(true)] "]; 61 [label="Jump: break@@@[Boolean(true)] "];
62 [label="Stub" style="filled" fillcolor=gray]; 62 [label="Stub" style="filled" fillcolor=gray];
63 [label="Exit block" style="filled" fillcolor=gray]; 63 [label="Exit block" style="filled" fillcolor=gray];
@@ -211,7 +211,7 @@ digraph jumps_kt {
color=blue color=blue
72 [label="Enter block"]; 72 [label="Enter block"];
73 [label="Access variable R|<local>/x|"]; 73 [label="Access variable R|<local>/x|"];
74 [label="Type operator: x as Int"]; 74 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
75 [label="Jump: break@@@[Boolean(true)] "]; 75 [label="Jump: break@@@[Boolean(true)] "];
76 [label="Stub" style="filled" fillcolor=gray]; 76 [label="Stub" style="filled" fillcolor=gray];
77 [label="Exit block" style="filled" fillcolor=gray]; 77 [label="Exit block" style="filled" fillcolor=gray];
+2 -2
View File
@@ -23,7 +23,7 @@ digraph lambdas_kt {
color=blue color=blue
5 [label="Enter when branch condition "]; 5 [label="Enter when branch condition "];
6 [label="Access variable R|<local>/x|"]; 6 [label="Access variable R|<local>/x|"];
7 [label="Type operator: x is Int"]; 7 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
8 [label="Exit when branch condition"]; 8 [label="Exit when branch condition"];
} }
9 [label="Synthetic else branch"]; 9 [label="Synthetic else branch"];
@@ -84,7 +84,7 @@ digraph lambdas_kt {
color=blue color=blue
25 [label="Enter when branch condition "]; 25 [label="Enter when branch condition "];
26 [label="Access variable R|<local>/x|"]; 26 [label="Access variable R|<local>/x|"];
27 [label="Type operator: x is Int"]; 27 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
28 [label="Exit when branch condition"]; 28 [label="Exit when branch condition"];
} }
29 [label="Synthetic else branch"]; 29 [label="Synthetic else branch"];
+6 -6
View File
@@ -22,7 +22,7 @@ digraph loops_kt {
color=blue color=blue
6 [label="Enter block"]; 6 [label="Enter block"];
7 [label="Access variable R|<local>/x|"]; 7 [label="Access variable R|<local>/x|"];
8 [label="Type operator: x is String"]; 8 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
9 [label="Variable declaration: lval y: R|kotlin/Boolean|"]; 9 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
10 [label="Exit block"]; 10 [label="Exit block"];
} }
@@ -31,7 +31,7 @@ digraph loops_kt {
12 [label="Exit whileloop"]; 12 [label="Exit whileloop"];
} }
13 [label="Access variable R|<local>/x|"]; 13 [label="Access variable R|<local>/x|"];
14 [label="Type operator: x is String"]; 14 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
15 [label="Exit function testWhile" style="filled" fillcolor=red]; 15 [label="Exit function testWhile" style="filled" fillcolor=red];
} }
@@ -64,7 +64,7 @@ digraph loops_kt {
color=blue color=blue
19 [label="Enter block"]; 19 [label="Enter block"];
20 [label="Access variable R|<local>/x|"]; 20 [label="Access variable R|<local>/x|"];
21 [label="Type operator: x is String"]; 21 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
22 [label="Variable declaration: lval y: R|kotlin/Boolean|"]; 22 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
23 [label="Exit block"]; 23 [label="Exit block"];
} }
@@ -79,7 +79,7 @@ digraph loops_kt {
28 [label="Exit do-whileloop"]; 28 [label="Exit do-whileloop"];
} }
29 [label="Access variable R|<local>/x|"]; 29 [label="Access variable R|<local>/x|"];
30 [label="Type operator: x is String"]; 30 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
31 [label="Exit function testDoWhile" style="filled" fillcolor=red]; 31 [label="Exit function testDoWhile" style="filled" fillcolor=red];
} }
@@ -129,7 +129,7 @@ digraph loops_kt {
48 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()"]; 48 [label="Function call: R|<local>/<iterator>|.R|kotlin/collections/IntIterator.next|()"];
49 [label="Variable declaration: lval i: R|kotlin/Int|"]; 49 [label="Variable declaration: lval i: R|kotlin/Int|"];
50 [label="Access variable R|<local>/x|"]; 50 [label="Access variable R|<local>/x|"];
51 [label="Type operator: x is String"]; 51 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
52 [label="Variable declaration: lval y: R|kotlin/Boolean|"]; 52 [label="Variable declaration: lval y: R|kotlin/Boolean|"];
53 [label="Exit block"]; 53 [label="Exit block"];
} }
@@ -138,7 +138,7 @@ digraph loops_kt {
55 [label="Exit whileloop"]; 55 [label="Exit whileloop"];
} }
56 [label="Access variable R|<local>/x|"]; 56 [label="Access variable R|<local>/x|"];
57 [label="Type operator: x is String"]; 57 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
58 [label="Exit function testFor" style="filled" fillcolor=red]; 58 [label="Exit function testFor" style="filled" fillcolor=red];
} }
+3 -3
View File
@@ -142,11 +142,11 @@ digraph when_kt {
color=blue color=blue
50 [label="Enter &&"]; 50 [label="Enter &&"];
51 [label="Access variable R|<local>/x|"]; 51 [label="Access variable R|<local>/x|"];
52 [label="Type operator: x is A"]; 52 [label="Type operator: (R|<local>/x| is R|A|)"];
53 [label="Exit left part of &&"]; 53 [label="Exit left part of &&"];
54 [label="Enter right part of &&"]; 54 [label="Enter right part of &&"];
55 [label="Access variable R|<local>/x|"]; 55 [label="Access variable R|<local>/x|"];
56 [label="Type operator: x is B"]; 56 [label="Type operator: (R|<local>/x| is R|B|)"];
57 [label="Exit &&"]; 57 [label="Exit &&"];
} }
58 [label="Exit when branch condition"]; 58 [label="Exit when branch condition"];
@@ -157,7 +157,7 @@ digraph when_kt {
color=blue color=blue
61 [label="Enter block"]; 61 [label="Enter block"];
62 [label="Access variable R|<local>/x|"]; 62 [label="Access variable R|<local>/x|"];
63 [label="Type operator: x is A"]; 63 [label="Type operator: (R|<local>/x| is R|A|)"];
64 [label="Exit block"]; 64 [label="Exit block"];
} }
65 [label="Exit when branch result"]; 65 [label="Exit when branch result"];
@@ -48,11 +48,11 @@ digraph booleanOperators_kt {
color=blue color=blue
11 [label="Enter &&"]; 11 [label="Enter &&"];
12 [label="Access variable R|<local>/x|"]; 12 [label="Access variable R|<local>/x|"];
13 [label="Type operator: x is B"]; 13 [label="Type operator: (R|<local>/x| is R|B|)"];
14 [label="Exit left part of &&"]; 14 [label="Exit left part of &&"];
15 [label="Enter right part of &&"]; 15 [label="Enter right part of &&"];
16 [label="Access variable R|<local>/x|"]; 16 [label="Access variable R|<local>/x|"];
17 [label="Type operator: x is C"]; 17 [label="Type operator: (R|<local>/x| is R|C|)"];
18 [label="Exit &&"]; 18 [label="Exit &&"];
} }
19 [label="Exit when branch condition"]; 19 [label="Exit when branch condition"];
@@ -114,11 +114,11 @@ digraph booleanOperators_kt {
color=blue color=blue
36 [label="Enter ||"]; 36 [label="Enter ||"];
37 [label="Access variable R|<local>/x|"]; 37 [label="Access variable R|<local>/x|"];
38 [label="Type operator: x is B"]; 38 [label="Type operator: (R|<local>/x| is R|B|)"];
39 [label="Exit left part of ||"]; 39 [label="Exit left part of ||"];
40 [label="Enter right part of ||"]; 40 [label="Enter right part of ||"];
41 [label="Access variable R|<local>/x|"]; 41 [label="Access variable R|<local>/x|"];
42 [label="Type operator: x is C"]; 42 [label="Type operator: (R|<local>/x| is R|C|)"];
43 [label="Exit ||"]; 43 [label="Exit ||"];
} }
44 [label="Exit when branch condition"]; 44 [label="Exit when branch condition"];
@@ -177,7 +177,7 @@ digraph booleanOperators_kt {
color=blue color=blue
60 [label="Enter when branch condition "]; 60 [label="Enter when branch condition "];
61 [label="Access variable R|<local>/x|"]; 61 [label="Access variable R|<local>/x|"];
62 [label="Type operator: x !is A"]; 62 [label="Type operator: (R|<local>/x| !is R|A|)"];
63 [label="Function call: (R|<local>/x| !is R|A|).R|kotlin/Boolean.not|()"]; 63 [label="Function call: (R|<local>/x| !is R|A|).R|kotlin/Boolean.not|()"];
64 [label="Exit when branch condition"]; 64 [label="Exit when branch condition"];
} }
@@ -225,7 +225,7 @@ digraph booleanOperators_kt {
color=blue color=blue
77 [label="Enter ||"]; 77 [label="Enter ||"];
78 [label="Access variable R|<local>/x|"]; 78 [label="Access variable R|<local>/x|"];
79 [label="Type operator: x !is String"]; 79 [label="Type operator: (R|<local>/x| !is R|kotlin/String|)"];
80 [label="Exit left part of ||"]; 80 [label="Exit left part of ||"];
81 [label="Enter right part of ||"]; 81 [label="Enter right part of ||"];
82 [label="Access variable R|<local>/x|"]; 82 [label="Access variable R|<local>/x|"];
@@ -291,7 +291,7 @@ digraph booleanOperators_kt {
color=blue color=blue
102 [label="Enter &&"]; 102 [label="Enter &&"];
103 [label="Access variable R|<local>/x|"]; 103 [label="Access variable R|<local>/x|"];
104 [label="Type operator: x is A"]; 104 [label="Type operator: (R|<local>/x| is R|A|)"];
105 [label="Exit left part of &&"]; 105 [label="Exit left part of &&"];
106 [label="Enter right part of &&"]; 106 [label="Enter right part of &&"];
107 [label="Access variable R|<local>/x|"]; 107 [label="Access variable R|<local>/x|"];
@@ -346,7 +346,7 @@ digraph booleanOperators_kt {
color=blue color=blue
122 [label="Enter when branch condition "]; 122 [label="Enter when branch condition "];
123 [label="Access variable R|<local>/x|"]; 123 [label="Access variable R|<local>/x|"];
124 [label="Type operator: x !is A"]; 124 [label="Type operator: (R|<local>/x| !is R|A|)"];
125 [label="Function call: (R|<local>/x| !is R|A|).R|kotlin/Boolean.not|()"]; 125 [label="Function call: (R|<local>/x| !is R|A|).R|kotlin/Boolean.not|()"];
126 [label="Exit when branch condition"]; 126 [label="Exit when branch condition"];
} }
@@ -394,7 +394,7 @@ digraph booleanOperators_kt {
color=blue color=blue
139 [label="Enter ||"]; 139 [label="Enter ||"];
140 [label="Access variable R|<local>/x|"]; 140 [label="Access variable R|<local>/x|"];
141 [label="Type operator: x is A"]; 141 [label="Type operator: (R|<local>/x| is R|A|)"];
142 [label="Exit left part of ||"]; 142 [label="Exit left part of ||"];
143 [label="Enter right part of ||"]; 143 [label="Enter right part of ||"];
144 [label="Const: Boolean(false)"]; 144 [label="Const: Boolean(false)"];
@@ -453,7 +453,7 @@ digraph booleanOperators_kt {
161 [label="Exit left part of ||"]; 161 [label="Exit left part of ||"];
162 [label="Enter right part of ||"]; 162 [label="Enter right part of ||"];
163 [label="Access variable R|<local>/x|"]; 163 [label="Access variable R|<local>/x|"];
164 [label="Type operator: x is A"]; 164 [label="Type operator: (R|<local>/x| is R|A|)"];
165 [label="Exit ||"]; 165 [label="Exit ||"];
} }
166 [label="Exit when branch condition"]; 166 [label="Exit when branch condition"];
@@ -507,7 +507,7 @@ digraph booleanOperators_kt {
color=blue color=blue
179 [label="Enter ||"]; 179 [label="Enter ||"];
180 [label="Access variable R|<local>/x|"]; 180 [label="Access variable R|<local>/x|"];
181 [label="Type operator: x is A"]; 181 [label="Type operator: (R|<local>/x| is R|A|)"];
182 [label="Exit left part of ||"]; 182 [label="Exit left part of ||"];
183 [label="Enter right part of ||"]; 183 [label="Enter right part of ||"];
184 [label="Const: Boolean(true)"]; 184 [label="Const: Boolean(true)"];
@@ -566,7 +566,7 @@ digraph booleanOperators_kt {
201 [label="Exit left part of ||"]; 201 [label="Exit left part of ||"];
202 [label="Enter right part of ||" style="filled" fillcolor=gray]; 202 [label="Enter right part of ||" style="filled" fillcolor=gray];
203 [label="Access variable R|<local>/x|" style="filled" fillcolor=gray]; 203 [label="Access variable R|<local>/x|" style="filled" fillcolor=gray];
204 [label="Type operator: x is A" style="filled" fillcolor=gray]; 204 [label="Type operator: (R|<local>/x| is R|A|)" style="filled" fillcolor=gray];
205 [label="Exit ||"]; 205 [label="Exit ||"];
} }
206 [label="Exit when branch condition"]; 206 [label="Exit when branch condition"];
@@ -623,7 +623,7 @@ digraph booleanOperators_kt {
221 [label="Exit left part of &&"]; 221 [label="Exit left part of &&"];
222 [label="Enter right part of &&" style="filled" fillcolor=gray]; 222 [label="Enter right part of &&" style="filled" fillcolor=gray];
223 [label="Access variable R|<local>/x|" style="filled" fillcolor=gray]; 223 [label="Access variable R|<local>/x|" style="filled" fillcolor=gray];
224 [label="Type operator: x is A" style="filled" fillcolor=gray]; 224 [label="Type operator: (R|<local>/x| is R|A|)" style="filled" fillcolor=gray];
225 [label="Exit &&"]; 225 [label="Exit &&"];
} }
226 [label="Exit when branch condition"]; 226 [label="Exit when branch condition"];
@@ -677,7 +677,7 @@ digraph booleanOperators_kt {
color=blue color=blue
239 [label="Enter &&"]; 239 [label="Enter &&"];
240 [label="Access variable R|<local>/x|"]; 240 [label="Access variable R|<local>/x|"];
241 [label="Type operator: x is A"]; 241 [label="Type operator: (R|<local>/x| is R|A|)"];
242 [label="Exit left part of &&"]; 242 [label="Exit left part of &&"];
243 [label="Enter right part of &&"]; 243 [label="Enter right part of &&"];
244 [label="Const: Boolean(false)"]; 244 [label="Const: Boolean(false)"];
@@ -736,7 +736,7 @@ digraph booleanOperators_kt {
261 [label="Exit left part of &&"]; 261 [label="Exit left part of &&"];
262 [label="Enter right part of &&"]; 262 [label="Enter right part of &&"];
263 [label="Access variable R|<local>/x|"]; 263 [label="Access variable R|<local>/x|"];
264 [label="Type operator: x is A"]; 264 [label="Type operator: (R|<local>/x| is R|A|)"];
265 [label="Exit &&"]; 265 [label="Exit &&"];
} }
266 [label="Exit when branch condition"]; 266 [label="Exit when branch condition"];
@@ -790,7 +790,7 @@ digraph booleanOperators_kt {
color=blue color=blue
279 [label="Enter &&"]; 279 [label="Enter &&"];
280 [label="Access variable R|<local>/x|"]; 280 [label="Access variable R|<local>/x|"];
281 [label="Type operator: x is A"]; 281 [label="Type operator: (R|<local>/x| is R|A|)"];
282 [label="Exit left part of &&"]; 282 [label="Exit left part of &&"];
283 [label="Enter right part of &&"]; 283 [label="Enter right part of &&"];
284 [label="Const: Boolean(false)"]; 284 [label="Const: Boolean(false)"];
@@ -31,7 +31,7 @@ digraph boundSmartcasts_kt {
color=blue color=blue
8 [label="Enter when branch condition "]; 8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/x|"]; 9 [label="Access variable R|<local>/x|"];
10 [label="Type operator: x is A"]; 10 [label="Type operator: (R|<local>/x| is R|A|)"];
11 [label="Exit when branch condition"]; 11 [label="Exit when branch condition"];
} }
12 [label="Synthetic else branch"]; 12 [label="Synthetic else branch"];
@@ -82,7 +82,7 @@ digraph boundSmartcasts_kt {
color=blue color=blue
27 [label="Enter when branch condition "]; 27 [label="Enter when branch condition "];
28 [label="Access variable R|<local>/y|"]; 28 [label="Access variable R|<local>/y|"];
29 [label="Type operator: y is A"]; 29 [label="Type operator: (R|<local>/y| is R|A|)"];
30 [label="Exit when branch condition"]; 30 [label="Exit when branch condition"];
} }
31 [label="Synthetic else branch"]; 31 [label="Synthetic else branch"];
@@ -133,7 +133,7 @@ digraph boundSmartcasts_kt {
color=blue color=blue
46 [label="Enter when branch condition "]; 46 [label="Enter when branch condition "];
47 [label="Access variable R|<local>/x|"]; 47 [label="Access variable R|<local>/x|"];
48 [label="Type operator: x is A"]; 48 [label="Type operator: (R|<local>/x| is R|A|)"];
49 [label="Exit when branch condition"]; 49 [label="Exit when branch condition"];
} }
50 [label="Synthetic else branch"]; 50 [label="Synthetic else branch"];
@@ -157,7 +157,7 @@ digraph boundSmartcasts_kt {
color=blue color=blue
61 [label="Enter when branch condition "]; 61 [label="Enter when branch condition "];
62 [label="Access variable R|<local>/y|"]; 62 [label="Access variable R|<local>/y|"];
63 [label="Type operator: y is B"]; 63 [label="Type operator: (R|<local>/y| is R|B|)"];
64 [label="Exit when branch condition"]; 64 [label="Exit when branch condition"];
} }
65 [label="Synthetic else branch"]; 65 [label="Synthetic else branch"];
@@ -217,7 +217,7 @@ digraph boundSmartcasts_kt {
77 [label="Const: Int(1)"]; 77 [label="Const: Int(1)"];
78 [label="Variable declaration: lvar x: R|kotlin/Any|"]; 78 [label="Variable declaration: lvar x: R|kotlin/Any|"];
79 [label="Access variable R|<local>/x|"]; 79 [label="Access variable R|<local>/x|"];
80 [label="Type operator: x as Int"]; 80 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
81 [label="Access variable R|<local>/x|"]; 81 [label="Access variable R|<local>/x|"];
82 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"]; 82 [label="Function call: R|<local>/x|.R|kotlin/Int.inc|()"];
83 [label="Access variable R|<local>/y|"]; 83 [label="Access variable R|<local>/y|"];
@@ -231,7 +231,7 @@ digraph boundSmartcasts_kt {
color=blue color=blue
88 [label="Enter when branch condition "]; 88 [label="Enter when branch condition "];
89 [label="Access variable R|<local>/y|"]; 89 [label="Access variable R|<local>/y|"];
90 [label="Type operator: y is A"]; 90 [label="Type operator: (R|<local>/y| is R|A|)"];
91 [label="Exit when branch condition"]; 91 [label="Exit when branch condition"];
} }
92 [label="Synthetic else branch"]; 92 [label="Synthetic else branch"];
@@ -359,7 +359,7 @@ digraph boundSmartcasts_kt {
139 [label="Access variable R|/D.any|"]; 139 [label="Access variable R|/D.any|"];
140 [label="Function call: R|<local>/d|.R|/D.any|.R|/baz|()"]; 140 [label="Function call: R|<local>/d|.R|/D.any|.R|/baz|()"];
141 [label="Access variable R|<local>/a|"]; 141 [label="Access variable R|<local>/a|"];
142 [label="Type operator: a as A"]; 142 [label="Type operator: (R|<local>/a| as R|A|)"];
143 [label="Access variable R|<local>/a|"]; 143 [label="Access variable R|<local>/a|"];
144 [label="Function call: R|<local>/a|.R|/A.foo|()"]; 144 [label="Function call: R|<local>/a|.R|/A.foo|()"];
145 [label="Exit function test_5" style="filled" fillcolor=red]; 145 [label="Exit function test_5" style="filled" fillcolor=red];
@@ -407,7 +407,7 @@ digraph boundSmartcasts_kt {
148 [label="Access variable R|/D.any|"]; 148 [label="Access variable R|/D.any|"];
149 [label="Variable declaration: lval a: R|kotlin/Any?|"]; 149 [label="Variable declaration: lval a: R|kotlin/Any?|"];
150 [label="Access variable R|<local>/a|"]; 150 [label="Access variable R|<local>/a|"];
151 [label="Type operator: a as A"]; 151 [label="Type operator: (R|<local>/a| as R|A|)"];
152 [label="Access variable R|<local>/a|"]; 152 [label="Access variable R|<local>/a|"];
153 [label="Function call: R|<local>/a|.R|/A.foo|()"]; 153 [label="Function call: R|<local>/a|.R|/A.foo|()"];
154 [label="Access variable R|<local>/d1|"]; 154 [label="Access variable R|<local>/d1|"];
@@ -448,11 +448,11 @@ digraph boundSmartcasts_kt {
170 [label="Exit safe call"]; 170 [label="Exit safe call"];
171 [label="Variable declaration: lval b: R|kotlin/Any?|"]; 171 [label="Variable declaration: lval b: R|kotlin/Any?|"];
172 [label="Access variable R|<local>/a|"]; 172 [label="Access variable R|<local>/a|"];
173 [label="Type operator: a as A"]; 173 [label="Type operator: (R|<local>/a| as R|A|)"];
174 [label="Access variable R|<local>/a|"]; 174 [label="Access variable R|<local>/a|"];
175 [label="Function call: R|<local>/a|.R|/A.foo|()"]; 175 [label="Function call: R|<local>/a|.R|/A.foo|()"];
176 [label="Access variable R|<local>/b|"]; 176 [label="Access variable R|<local>/b|"];
177 [label="Type operator: b as B"]; 177 [label="Type operator: (R|<local>/b| as R|B|)"];
178 [label="Access variable R|<local>/b|"]; 178 [label="Access variable R|<local>/b|"];
179 [label="Function call: R|<local>/b|.R|/B.bar|()"]; 179 [label="Function call: R|<local>/b|.R|/B.bar|()"];
180 [label="Exit function test_7" style="filled" fillcolor=red]; 180 [label="Exit function test_7" style="filled" fillcolor=red];
@@ -227,7 +227,7 @@ digraph boundSmartcastsInBranches_kt {
81 [label="Access variable R|<local>/a|"]; 81 [label="Access variable R|<local>/a|"];
82 [label="Assignmenet: R|<local>/x|"]; 82 [label="Assignmenet: R|<local>/x|"];
83 [label="Access variable R|<local>/a|"]; 83 [label="Access variable R|<local>/a|"];
84 [label="Type operator: a as A"]; 84 [label="Type operator: (R|<local>/a| as R|A|)"];
85 [label="Exit block"]; 85 [label="Exit block"];
} }
86 [label="Exit when branch result"]; 86 [label="Exit when branch result"];
@@ -296,7 +296,7 @@ digraph boundSmartcastsInBranches_kt {
color=blue color=blue
106 [label="Enter block"]; 106 [label="Enter block"];
107 [label="Access variable R|<local>/a|"]; 107 [label="Access variable R|<local>/a|"];
108 [label="Type operator: a as A"]; 108 [label="Type operator: (R|<local>/a| as R|A|)"];
109 [label="Access variable R|<local>/a|"]; 109 [label="Access variable R|<local>/a|"];
110 [label="Assignmenet: R|<local>/x|"]; 110 [label="Assignmenet: R|<local>/x|"];
111 [label="Exit block"]; 111 [label="Exit block"];
@@ -383,7 +383,7 @@ digraph boundSmartcastsInBranches_kt {
143 [label="Exit when"]; 143 [label="Exit when"];
} }
144 [label="Access variable R|<local>/x|"]; 144 [label="Access variable R|<local>/x|"];
145 [label="Type operator: x as A"]; 145 [label="Type operator: (R|<local>/x| as R|A|)"];
146 [label="Access variable R|<local>/x|"]; 146 [label="Access variable R|<local>/x|"];
147 [label="Access variable R|/A.s|"]; 147 [label="Access variable R|/A.s|"];
148 [label="Access variable R|<local>/a|"]; 148 [label="Access variable R|<local>/a|"];
@@ -458,7 +458,7 @@ digraph boundSmartcastsInBranches_kt {
171 [label="Exit when"]; 171 [label="Exit when"];
} }
172 [label="Access variable R|<local>/a|"]; 172 [label="Access variable R|<local>/a|"];
173 [label="Type operator: a as A"]; 173 [label="Type operator: (R|<local>/a| as R|A|)"];
174 [label="Access variable R|<local>/x|"]; 174 [label="Access variable R|<local>/x|"];
175 [label="Access variable R|/A.s|"]; 175 [label="Access variable R|/A.s|"];
176 [label="Access variable R|<local>/a|"]; 176 [label="Access variable R|<local>/a|"];
+7 -7
View File
@@ -7,7 +7,7 @@ digraph casts_kt {
color=red color=red
0 [label="Enter function test_1" style="filled" fillcolor=red]; 0 [label="Enter function test_1" style="filled" fillcolor=red];
1 [label="Access variable R|<local>/x|"]; 1 [label="Access variable R|<local>/x|"];
2 [label="Type operator: x as String"]; 2 [label="Type operator: (R|<local>/x| as R|kotlin/String|)"];
3 [label="Access variable R|<local>/x|"]; 3 [label="Access variable R|<local>/x|"];
4 [label="Access variable R|kotlin/String.length|"]; 4 [label="Access variable R|kotlin/String.length|"];
5 [label="Exit function test_1" style="filled" fillcolor=red]; 5 [label="Exit function test_1" style="filled" fillcolor=red];
@@ -29,7 +29,7 @@ digraph casts_kt {
color=blue color=blue
8 [label="Enter when branch condition "]; 8 [label="Enter when branch condition "];
9 [label="Access variable R|<local>/x|"]; 9 [label="Access variable R|<local>/x|"];
10 [label="Type operator: x as Boolean"]; 10 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
11 [label="Exit when branch condition"]; 11 [label="Exit when branch condition"];
} }
12 [label="Synthetic else branch"]; 12 [label="Synthetic else branch"];
@@ -82,7 +82,7 @@ digraph casts_kt {
28 [label="Exit left part of &&"]; 28 [label="Exit left part of &&"];
29 [label="Enter right part of &&"]; 29 [label="Enter right part of &&"];
30 [label="Access variable R|<local>/x|"]; 30 [label="Access variable R|<local>/x|"];
31 [label="Type operator: x as Boolean"]; 31 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
32 [label="Exit &&"]; 32 [label="Exit &&"];
} }
33 [label="Exit when branch condition"]; 33 [label="Exit when branch condition"];
@@ -114,7 +114,7 @@ digraph casts_kt {
48 [label="Exit left part of &&"]; 48 [label="Exit left part of &&"];
49 [label="Enter right part of &&"]; 49 [label="Enter right part of &&"];
50 [label="Access variable R|<local>/x|"]; 50 [label="Access variable R|<local>/x|"];
51 [label="Type operator: x as Boolean"]; 51 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
52 [label="Const: Boolean(true)"]; 52 [label="Const: Boolean(true)"];
53 [label="Operator =="]; 53 [label="Operator =="];
54 [label="Exit &&"]; 54 [label="Exit &&"];
@@ -148,7 +148,7 @@ digraph casts_kt {
70 [label="Exit left part of ||"]; 70 [label="Exit left part of ||"];
71 [label="Enter right part of ||"]; 71 [label="Enter right part of ||"];
72 [label="Access variable R|<local>/x|"]; 72 [label="Access variable R|<local>/x|"];
73 [label="Type operator: x as Boolean"]; 73 [label="Type operator: (R|<local>/x| as R|kotlin/Boolean|)"];
74 [label="Exit ||"]; 74 [label="Exit ||"];
} }
75 [label="Exit when branch condition"]; 75 [label="Exit when branch condition"];
@@ -244,7 +244,7 @@ digraph casts_kt {
color=blue color=blue
89 [label="Enter when branch condition "]; 89 [label="Enter when branch condition "];
90 [label="Access variable R|<local>/b|"]; 90 [label="Access variable R|<local>/b|"];
91 [label="Type operator: b as? Boolean"]; 91 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
92 [label="Const: Null(null)"]; 92 [label="Const: Null(null)"];
93 [label="Operator !="]; 93 [label="Operator !="];
94 [label="Exit when branch condition"]; 94 [label="Exit when branch condition"];
@@ -283,7 +283,7 @@ digraph casts_kt {
color=blue color=blue
113 [label="Enter when branch condition "]; 113 [label="Enter when branch condition "];
114 [label="Access variable R|<local>/b|"]; 114 [label="Access variable R|<local>/b|"];
115 [label="Type operator: b as? Boolean"]; 115 [label="Type operator: (R|<local>/b| as? R|kotlin/Boolean|)"];
116 [label="Const: Null(null)"]; 116 [label="Const: Null(null)"];
117 [label="Operator =="]; 117 [label="Operator =="];
118 [label="Exit when branch condition"]; 118 [label="Exit when branch condition"];
@@ -140,7 +140,7 @@ digraph elvis_kt {
color=blue color=blue
45 [label="Enter when branch condition "]; 45 [label="Enter when branch condition "];
46 [label="Access variable R|<local>/b|"]; 46 [label="Access variable R|<local>/b|"];
47 [label="Type operator: b !is String"]; 47 [label="Type operator: (R|<local>/b| !is R|kotlin/String|)"];
48 [label="Exit when branch condition"]; 48 [label="Exit when branch condition"];
} }
49 [label="Synthetic else branch"]; 49 [label="Synthetic else branch"];
@@ -163,7 +163,7 @@ digraph elvis_kt {
color=blue color=blue
59 [label="Enter when branch condition "]; 59 [label="Enter when branch condition "];
60 [label="Access variable R|<local>/a|"]; 60 [label="Access variable R|<local>/a|"];
61 [label="Type operator: a !is String?"]; 61 [label="Type operator: (R|<local>/a| !is R|kotlin/String?|)"];
62 [label="Exit when branch condition"]; 62 [label="Exit when branch condition"];
} }
63 [label="Synthetic else branch"]; 63 [label="Synthetic else branch"];
@@ -13,7 +13,7 @@ digraph returns_kt {
color=blue color=blue
2 [label="Enter when branch condition "]; 2 [label="Enter when branch condition "];
3 [label="Access variable R|<local>/x|"]; 3 [label="Access variable R|<local>/x|"];
4 [label="Type operator: x is String"]; 4 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
5 [label="Exit when branch condition"]; 5 [label="Exit when branch condition"];
} }
subgraph cluster_3 { subgraph cluster_3 {
@@ -76,7 +76,7 @@ digraph returns_kt {
color=blue color=blue
24 [label="Enter when branch condition "]; 24 [label="Enter when branch condition "];
25 [label="Access variable R|<local>/x|"]; 25 [label="Access variable R|<local>/x|"];
26 [label="Type operator: x is String"]; 26 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
27 [label="Exit when branch condition"]; 27 [label="Exit when branch condition"];
} }
subgraph cluster_9 { subgraph cluster_9 {
@@ -168,14 +168,14 @@ digraph returns_kt {
color=blue color=blue
54 [label="Enter when branch condition "]; 54 [label="Enter when branch condition "];
55 [label="Access variable R|<local>/x|"]; 55 [label="Access variable R|<local>/x|"];
56 [label="Type operator: x is B"]; 56 [label="Type operator: (R|<local>/x| is R|B|)"];
57 [label="Exit when branch condition"]; 57 [label="Exit when branch condition"];
} }
subgraph cluster_18 { subgraph cluster_18 {
color=blue color=blue
58 [label="Enter when branch condition "]; 58 [label="Enter when branch condition "];
59 [label="Access variable R|<local>/x|"]; 59 [label="Access variable R|<local>/x|"];
60 [label="Type operator: x is C"]; 60 [label="Type operator: (R|<local>/x| is R|C|)"];
61 [label="Exit when branch condition"]; 61 [label="Exit when branch condition"];
} }
subgraph cluster_19 { subgraph cluster_19 {
@@ -270,14 +270,14 @@ digraph returns_kt {
color=blue color=blue
92 [label="Enter when branch condition "]; 92 [label="Enter when branch condition "];
93 [label="Access variable R|<local>/x|"]; 93 [label="Access variable R|<local>/x|"];
94 [label="Type operator: x is B"]; 94 [label="Type operator: (R|<local>/x| is R|B|)"];
95 [label="Exit when branch condition"]; 95 [label="Exit when branch condition"];
} }
subgraph cluster_26 { subgraph cluster_26 {
color=blue color=blue
96 [label="Enter when branch condition "]; 96 [label="Enter when branch condition "];
97 [label="Access variable R|<local>/x|"]; 97 [label="Access variable R|<local>/x|"];
98 [label="Type operator: x is C"]; 98 [label="Type operator: (R|<local>/x| is R|C|)"];
99 [label="Exit when branch condition"]; 99 [label="Exit when branch condition"];
} }
100 [label="Synthetic else branch"]; 100 [label="Synthetic else branch"];
@@ -383,7 +383,7 @@ digraph returns_kt {
color=red color=red
133 [label="Enter function test_4" style="filled" fillcolor=red]; 133 [label="Enter function test_4" style="filled" fillcolor=red];
134 [label="Access variable R|<local>/a|"]; 134 [label="Access variable R|<local>/a|"];
135 [label="Type operator: a as? String"]; 135 [label="Type operator: (R|<local>/a| as? R|kotlin/String|)"];
136 [label="Variable declaration: lval s: R|kotlin/String?|"]; 136 [label="Variable declaration: lval s: R|kotlin/String?|"];
subgraph cluster_33 { subgraph cluster_33 {
color=blue color=blue
@@ -13,7 +13,7 @@ digraph simpleIf_kt {
color=blue color=blue
2 [label="Enter when branch condition "]; 2 [label="Enter when branch condition "];
3 [label="Access variable R|<local>/x|"]; 3 [label="Access variable R|<local>/x|"];
4 [label="Type operator: x is String"]; 4 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
5 [label="Exit when branch condition"]; 5 [label="Exit when branch condition"];
} }
6 [label="Synthetic else branch"]; 6 [label="Synthetic else branch"];
@@ -54,7 +54,7 @@ digraph simpleIf_kt {
color=red color=red
17 [label="Enter function test_2" style="filled" fillcolor=red]; 17 [label="Enter function test_2" style="filled" fillcolor=red];
18 [label="Access variable R|<local>/x|"]; 18 [label="Access variable R|<local>/x|"];
19 [label="Type operator: x is String"]; 19 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
20 [label="Variable declaration: lval b: R|kotlin/Boolean|"]; 20 [label="Variable declaration: lval b: R|kotlin/Boolean|"];
subgraph cluster_5 { subgraph cluster_5 {
color=blue color=blue
@@ -111,14 +111,14 @@ digraph simpleIf_kt {
color=blue color=blue
38 [label="Enter when branch condition "]; 38 [label="Enter when branch condition "];
39 [label="Access variable R|<local>/x|"]; 39 [label="Access variable R|<local>/x|"];
40 [label="Type operator: x !is String"]; 40 [label="Type operator: (R|<local>/x| !is R|kotlin/String|)"];
41 [label="Exit when branch condition"]; 41 [label="Exit when branch condition"];
} }
subgraph cluster_11 { subgraph cluster_11 {
color=blue color=blue
42 [label="Enter when branch condition "]; 42 [label="Enter when branch condition "];
43 [label="Access variable R|<local>/x|"]; 43 [label="Access variable R|<local>/x|"];
44 [label="Type operator: x !is Int"]; 44 [label="Type operator: (R|<local>/x| !is R|kotlin/Int|)"];
45 [label="Exit when branch condition"]; 45 [label="Exit when branch condition"];
} }
subgraph cluster_12 { subgraph cluster_12 {
@@ -39,7 +39,7 @@ digraph smartcastFromArgument_kt {
color=blue color=blue
10 [label="Enter when"]; 10 [label="Enter when"];
11 [label="Access variable R|<local>/a|"]; 11 [label="Access variable R|<local>/a|"];
12 [label="Type operator: a as? A"]; 12 [label="Type operator: (R|<local>/a| as? R|A|)"];
13 [label="Variable declaration: lval <elvis>: R|A?|"]; 13 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_6 { subgraph cluster_6 {
color=blue color=blue
@@ -29,14 +29,14 @@ digraph when_kt {
color=blue color=blue
6 [label="Enter when branch condition "]; 6 [label="Enter when branch condition "];
7 [label="Access variable R|<local>/x|"]; 7 [label="Access variable R|<local>/x|"];
8 [label="Type operator: x is A"]; 8 [label="Type operator: (R|<local>/x| is R|A|)"];
9 [label="Exit when branch condition"]; 9 [label="Exit when branch condition"];
} }
subgraph cluster_5 { subgraph cluster_5 {
color=blue color=blue
10 [label="Enter when branch condition "]; 10 [label="Enter when branch condition "];
11 [label="Access variable R|<local>/x|"]; 11 [label="Access variable R|<local>/x|"];
12 [label="Type operator: x is B"]; 12 [label="Type operator: (R|<local>/x| is R|B|)"];
13 [label="Exit when branch condition"]; 13 [label="Exit when branch condition"];
} }
14 [label="Synthetic else branch"]; 14 [label="Synthetic else branch"];
@@ -67,21 +67,21 @@ digraph when_kt {
color=blue color=blue
29 [label="Enter when branch condition "]; 29 [label="Enter when branch condition "];
30 [label="Access variable R|<local>/x|"]; 30 [label="Access variable R|<local>/x|"];
31 [label="Type operator: x !is A"]; 31 [label="Type operator: (R|<local>/x| !is R|A|)"];
32 [label="Exit when branch condition"]; 32 [label="Exit when branch condition"];
} }
subgraph cluster_10 { subgraph cluster_10 {
color=blue color=blue
33 [label="Enter when branch condition "]; 33 [label="Enter when branch condition "];
34 [label="Access variable R|<local>/x|"]; 34 [label="Access variable R|<local>/x|"];
35 [label="Type operator: x !is B"]; 35 [label="Type operator: (R|<local>/x| !is R|B|)"];
36 [label="Exit when branch condition"]; 36 [label="Exit when branch condition"];
} }
subgraph cluster_11 { subgraph cluster_11 {
color=blue color=blue
37 [label="Enter when branch condition "]; 37 [label="Enter when branch condition "];
38 [label="Access variable R|<local>/x|"]; 38 [label="Access variable R|<local>/x|"];
39 [label="Type operator: x is Int"]; 39 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
40 [label="Exit when branch condition"]; 40 [label="Exit when branch condition"];
} }
subgraph cluster_12 { subgraph cluster_12 {
@@ -213,13 +213,13 @@ digraph when_kt {
subgraph cluster_19 { subgraph cluster_19 {
color=blue color=blue
76 [label="Enter when branch condition "]; 76 [label="Enter when branch condition "];
77 [label="Type operator: A"]; 77 [label="Type operator: ($subj$ is R|A|)"];
78 [label="Exit when branch condition"]; 78 [label="Exit when branch condition"];
} }
subgraph cluster_20 { subgraph cluster_20 {
color=blue color=blue
79 [label="Enter when branch condition "]; 79 [label="Enter when branch condition "];
80 [label="Type operator: B"]; 80 [label="Type operator: ($subj$ is R|B|)"];
81 [label="Exit when branch condition"]; 81 [label="Exit when branch condition"];
} }
82 [label="Synthetic else branch"]; 82 [label="Synthetic else branch"];
@@ -250,19 +250,19 @@ digraph when_kt {
subgraph cluster_24 { subgraph cluster_24 {
color=blue color=blue
98 [label="Enter when branch condition "]; 98 [label="Enter when branch condition "];
99 [label="Type operator: A"]; 99 [label="Type operator: ($subj$ !is R|A|)"];
100 [label="Exit when branch condition"]; 100 [label="Exit when branch condition"];
} }
subgraph cluster_25 { subgraph cluster_25 {
color=blue color=blue
101 [label="Enter when branch condition "]; 101 [label="Enter when branch condition "];
102 [label="Type operator: B"]; 102 [label="Type operator: ($subj$ !is R|B|)"];
103 [label="Exit when branch condition"]; 103 [label="Exit when branch condition"];
} }
subgraph cluster_26 { subgraph cluster_26 {
color=blue color=blue
104 [label="Enter when branch condition "]; 104 [label="Enter when branch condition "];
105 [label="Type operator: Int"]; 105 [label="Type operator: ($subj$ is R|kotlin/Int|)"];
106 [label="Exit when branch condition"]; 106 [label="Exit when branch condition"];
} }
subgraph cluster_27 { subgraph cluster_27 {
@@ -392,13 +392,13 @@ digraph when_kt {
subgraph cluster_34 { subgraph cluster_34 {
color=blue color=blue
143 [label="Enter when branch condition "]; 143 [label="Enter when branch condition "];
144 [label="Type operator: A"]; 144 [label="Type operator: ($subj$ is R|A|)"];
145 [label="Exit when branch condition"]; 145 [label="Exit when branch condition"];
} }
subgraph cluster_35 { subgraph cluster_35 {
color=blue color=blue
146 [label="Enter when branch condition "]; 146 [label="Enter when branch condition "];
147 [label="Type operator: B"]; 147 [label="Type operator: ($subj$ is R|B|)"];
148 [label="Exit when branch condition"]; 148 [label="Exit when branch condition"];
} }
149 [label="Synthetic else branch"]; 149 [label="Synthetic else branch"];
@@ -434,19 +434,19 @@ digraph when_kt {
subgraph cluster_39 { subgraph cluster_39 {
color=blue color=blue
170 [label="Enter when branch condition "]; 170 [label="Enter when branch condition "];
171 [label="Type operator: A"]; 171 [label="Type operator: ($subj$ !is R|A|)"];
172 [label="Exit when branch condition"]; 172 [label="Exit when branch condition"];
} }
subgraph cluster_40 { subgraph cluster_40 {
color=blue color=blue
173 [label="Enter when branch condition "]; 173 [label="Enter when branch condition "];
174 [label="Type operator: B"]; 174 [label="Type operator: ($subj$ !is R|B|)"];
175 [label="Exit when branch condition"]; 175 [label="Exit when branch condition"];
} }
subgraph cluster_41 { subgraph cluster_41 {
color=blue color=blue
176 [label="Enter when branch condition "]; 176 [label="Enter when branch condition "];
177 [label="Type operator: Int"]; 177 [label="Type operator: ($subj$ is R|kotlin/Int|)"];
178 [label="Exit when branch condition"]; 178 [label="Exit when branch condition"];
} }
subgraph cluster_42 { subgraph cluster_42 {
@@ -602,7 +602,7 @@ digraph when_kt {
color=blue color=blue
224 [label="Enter when"]; 224 [label="Enter when"];
225 [label="Access variable R|<local>/x|"]; 225 [label="Access variable R|<local>/x|"];
226 [label="Type operator: x as Int"]; 226 [label="Type operator: (R|<local>/x| as R|kotlin/Int|)"];
subgraph cluster_49 { subgraph cluster_49 {
color=blue color=blue
227 [label="Enter when branch condition "]; 227 [label="Enter when branch condition "];
@@ -39,7 +39,7 @@ digraph inPlaceLambdas_kt {
color=blue color=blue
9 [label="Enter when branch condition "]; 9 [label="Enter when branch condition "];
10 [label="Access variable R|<local>/x|"]; 10 [label="Access variable R|<local>/x|"];
11 [label="Type operator: x is A"]; 11 [label="Type operator: (R|<local>/x| is R|A|)"];
12 [label="Exit when branch condition"]; 12 [label="Exit when branch condition"];
} }
13 [label="Synthetic else branch"]; 13 [label="Synthetic else branch"];
@@ -98,7 +98,7 @@ digraph inPlaceLambdas_kt {
color=blue color=blue
29 [label="Enter function anonymousFunction"]; 29 [label="Enter function anonymousFunction"];
30 [label="Access variable R|<local>/x|"]; 30 [label="Access variable R|<local>/x|"];
31 [label="Type operator: x as B"]; 31 [label="Type operator: (R|<local>/x| as R|B|)"];
32 [label="Exit function anonymousFunction"]; 32 [label="Exit function anonymousFunction"];
} }
33 [label="Postponed exit from lambda"]; 33 [label="Postponed exit from lambda"];
@@ -134,7 +134,7 @@ digraph inPlaceLambdas_kt {
color=blue color=blue
40 [label="Enter when branch condition "]; 40 [label="Enter when branch condition "];
41 [label="Access variable R|<local>/x|"]; 41 [label="Access variable R|<local>/x|"];
42 [label="Type operator: x is A"]; 42 [label="Type operator: (R|<local>/x| is R|A|)"];
43 [label="Exit when branch condition"]; 43 [label="Exit when branch condition"];
} }
44 [label="Synthetic else branch"]; 44 [label="Synthetic else branch"];
@@ -149,7 +149,7 @@ digraph inPlaceLambdas_kt {
49 [label="Access variable R|<local>/x|"]; 49 [label="Access variable R|<local>/x|"];
50 [label="Function call: R|<local>/x|.R|/A.foo|()"]; 50 [label="Function call: R|<local>/x|.R|/A.foo|()"];
51 [label="Access variable R|<local>/x|"]; 51 [label="Access variable R|<local>/x|"];
52 [label="Type operator: x as B"]; 52 [label="Type operator: (R|<local>/x| as R|B|)"];
53 [label="Exit function anonymousFunction"]; 53 [label="Exit function anonymousFunction"];
} }
54 [label="Postponed exit from lambda"]; 54 [label="Postponed exit from lambda"];
@@ -26,11 +26,11 @@ digraph dataFlowInfoFromWhileCondition_kt {
color=blue color=blue
7 [label="Enter ||"]; 7 [label="Enter ||"];
8 [label="Access variable R|<local>/a|"]; 8 [label="Access variable R|<local>/a|"];
9 [label="Type operator: a is B"]; 9 [label="Type operator: (R|<local>/a| is R|B|)"];
10 [label="Exit left part of ||"]; 10 [label="Exit left part of ||"];
11 [label="Enter right part of ||"]; 11 [label="Enter right part of ||"];
12 [label="Access variable R|<local>/a|"]; 12 [label="Access variable R|<local>/a|"];
13 [label="Type operator: a is C"]; 13 [label="Type operator: (R|<local>/a| is R|C|)"];
14 [label="Exit ||"]; 14 [label="Exit ||"];
} }
15 [label="Exit loop condition"]; 15 [label="Exit loop condition"];
@@ -30,7 +30,7 @@ digraph endlessLoops_kt {
color=blue color=blue
8 [label="Enter block"]; 8 [label="Enter block"];
9 [label="Access variable R|<local>/x|"]; 9 [label="Access variable R|<local>/x|"];
10 [label="Type operator: x as A"]; 10 [label="Type operator: (R|<local>/x| as R|A|)"];
subgraph cluster_6 { subgraph cluster_6 {
color=blue color=blue
11 [label="Enter when"]; 11 [label="Enter when"];
@@ -125,7 +125,7 @@ digraph endlessLoops_kt {
color=blue color=blue
42 [label="Enter block"]; 42 [label="Enter block"];
43 [label="Access variable R|<local>/x|"]; 43 [label="Access variable R|<local>/x|"];
44 [label="Type operator: x as A"]; 44 [label="Type operator: (R|<local>/x| as R|A|)"];
45 [label="Jump: break@@@[Boolean(true)] "]; 45 [label="Jump: break@@@[Boolean(true)] "];
46 [label="Stub" style="filled" fillcolor=gray]; 46 [label="Stub" style="filled" fillcolor=gray];
47 [label="Exit block" style="filled" fillcolor=gray]; 47 [label="Exit block" style="filled" fillcolor=gray];
@@ -192,7 +192,7 @@ digraph endlessLoops_kt {
color=blue color=blue
62 [label="Enter block"]; 62 [label="Enter block"];
63 [label="Access variable R|<local>/x|"]; 63 [label="Access variable R|<local>/x|"];
64 [label="Type operator: x as A"]; 64 [label="Type operator: (R|<local>/x| as R|A|)"];
subgraph cluster_22 { subgraph cluster_22 {
color=blue color=blue
65 [label="Enter when"]; 65 [label="Enter when"];
@@ -321,7 +321,7 @@ digraph endlessLoops_kt {
color=blue color=blue
108 [label="Enter block"]; 108 [label="Enter block"];
109 [label="Access variable R|<local>/x|"]; 109 [label="Access variable R|<local>/x|"];
110 [label="Type operator: x as A"]; 110 [label="Type operator: (R|<local>/x| as R|A|)"];
111 [label="Jump: break@@@[Boolean(true)] "]; 111 [label="Jump: break@@@[Boolean(true)] "];
112 [label="Stub" style="filled" fillcolor=gray]; 112 [label="Stub" style="filled" fillcolor=gray];
113 [label="Exit block" style="filled" fillcolor=gray]; 113 [label="Exit block" style="filled" fillcolor=gray];
@@ -401,7 +401,7 @@ digraph endlessLoops_kt {
color=blue color=blue
134 [label="Enter block"]; 134 [label="Enter block"];
135 [label="Access variable R|<local>/x|"]; 135 [label="Access variable R|<local>/x|"];
136 [label="Type operator: x as A"]; 136 [label="Type operator: (R|<local>/x| as R|A|)"];
137 [label="Jump: break@@@[Boolean(true)] "]; 137 [label="Jump: break@@@[Boolean(true)] "];
138 [label="Stub" style="filled" fillcolor=gray]; 138 [label="Stub" style="filled" fillcolor=gray];
139 [label="Exit block" style="filled" fillcolor=gray]; 139 [label="Exit block" style="filled" fillcolor=gray];
@@ -468,7 +468,7 @@ digraph endlessLoops_kt {
color=blue color=blue
154 [label="Enter block"]; 154 [label="Enter block"];
155 [label="Access variable R|<local>/x|"]; 155 [label="Access variable R|<local>/x|"];
156 [label="Type operator: x as A"]; 156 [label="Type operator: (R|<local>/x| as R|A|)"];
subgraph cluster_48 { subgraph cluster_48 {
color=blue color=blue
157 [label="Enter when"]; 157 [label="Enter when"];
@@ -549,7 +549,7 @@ digraph endlessLoops_kt {
color=blue color=blue
181 [label="Enter block"]; 181 [label="Enter block"];
182 [label="Access variable R|<local>/x|"]; 182 [label="Access variable R|<local>/x|"];
183 [label="Type operator: x as A"]; 183 [label="Type operator: (R|<local>/x| as R|A|)"];
184 [label="Exit block"]; 184 [label="Exit block"];
} }
185 [label="Exit loop block"]; 185 [label="Exit loop block"];
@@ -42,11 +42,11 @@ digraph multipleCasts_kt {
12 [label="Function call: R|/getAny|()"]; 12 [label="Function call: R|/getAny|()"];
13 [label="Variable declaration: lval b: R|kotlin/Any?|"]; 13 [label="Variable declaration: lval b: R|kotlin/Any?|"];
14 [label="Access variable R|<local>/a|"]; 14 [label="Access variable R|<local>/a|"];
15 [label="Type operator: a as A"]; 15 [label="Type operator: (R|<local>/a| as R|A|)"];
16 [label="Access variable R|<local>/a|"]; 16 [label="Access variable R|<local>/a|"];
17 [label="Function call: R|<local>/a|.R|/A.foo|()"]; 17 [label="Function call: R|<local>/a|.R|/A.foo|()"];
18 [label="Access variable R|<local>/b|"]; 18 [label="Access variable R|<local>/b|"];
19 [label="Type operator: b as B"]; 19 [label="Type operator: (R|<local>/b| as R|B|)"];
20 [label="Access variable R|<local>/b|"]; 20 [label="Access variable R|<local>/b|"];
21 [label="Function call: R|<local>/b|.R|/B.foo|()"]; 21 [label="Function call: R|<local>/b|.R|/B.foo|()"];
22 [label="Exit function test_0" style="filled" fillcolor=red]; 22 [label="Exit function test_0" style="filled" fillcolor=red];
@@ -83,11 +83,11 @@ digraph multipleCasts_kt {
color=blue color=blue
30 [label="Enter &&"]; 30 [label="Enter &&"];
31 [label="Access variable R|<local>/a|"]; 31 [label="Access variable R|<local>/a|"];
32 [label="Type operator: a is A"]; 32 [label="Type operator: (R|<local>/a| is R|A|)"];
33 [label="Exit left part of &&"]; 33 [label="Exit left part of &&"];
34 [label="Enter right part of &&"]; 34 [label="Enter right part of &&"];
35 [label="Access variable R|<local>/b|"]; 35 [label="Access variable R|<local>/b|"];
36 [label="Type operator: b is B"]; 36 [label="Type operator: (R|<local>/b| is R|B|)"];
37 [label="Exit &&"]; 37 [label="Exit &&"];
} }
38 [label="Exit when branch condition"]; 38 [label="Exit when branch condition"];
@@ -13,13 +13,13 @@ digraph implicitReceiverAsWhenSubject_kt {
subgraph cluster_2 { subgraph cluster_2 {
color=blue color=blue
3 [label="Enter when branch condition "]; 3 [label="Enter when branch condition "];
4 [label="Type operator: List<*>"]; 4 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
5 [label="Exit when branch condition"]; 5 [label="Exit when branch condition"];
} }
subgraph cluster_3 { subgraph cluster_3 {
color=blue color=blue
6 [label="Enter when branch condition "]; 6 [label="Enter when branch condition "];
7 [label="Type operator: String"]; 7 [label="Type operator: ($subj$ is R|kotlin/String|)"];
8 [label="Exit when branch condition"]; 8 [label="Exit when branch condition"];
} }
subgraph cluster_4 { subgraph cluster_4 {
@@ -113,13 +113,13 @@ digraph implicitReceiverAsWhenSubject_kt {
subgraph cluster_10 { subgraph cluster_10 {
color=blue color=blue
35 [label="Enter when branch condition "]; 35 [label="Enter when branch condition "];
36 [label="Type operator: List<*>"]; 36 [label="Type operator: ($subj$ is R|kotlin/collections/List<*>|)"];
37 [label="Exit when branch condition"]; 37 [label="Exit when branch condition"];
} }
subgraph cluster_11 { subgraph cluster_11 {
color=blue color=blue
38 [label="Enter when branch condition "]; 38 [label="Enter when branch condition "];
39 [label="Type operator: String"]; 39 [label="Type operator: ($subj$ is R|kotlin/String|)"];
40 [label="Exit when branch condition"]; 40 [label="Exit when branch condition"];
} }
subgraph cluster_12 { subgraph cluster_12 {
@@ -53,7 +53,7 @@ digraph implicitReceivers_kt {
color=blue color=blue
12 [label="Enter when branch condition "]; 12 [label="Enter when branch condition "];
13 [label="Access variable this@R|/test_1|"]; 13 [label="Access variable this@R|/test_1|"];
14 [label="Type operator: this is A"]; 14 [label="Type operator: (this@R|/test_1| is R|A|)"];
15 [label="Exit when branch condition"]; 15 [label="Exit when branch condition"];
} }
subgraph cluster_8 { subgraph cluster_8 {
@@ -126,7 +126,7 @@ digraph implicitReceivers_kt {
color=blue color=blue
39 [label="Enter when branch condition "]; 39 [label="Enter when branch condition "];
40 [label="Access variable this@R|/test_2|"]; 40 [label="Access variable this@R|/test_2|"];
41 [label="Type operator: this !is A"]; 41 [label="Type operator: (this@R|/test_2| !is R|A|)"];
42 [label="Exit when branch condition"]; 42 [label="Exit when branch condition"];
} }
subgraph cluster_14 { subgraph cluster_14 {
@@ -208,7 +208,7 @@ digraph implicitReceivers_kt {
color=blue color=blue
73 [label="Enter function anonymousFunction"]; 73 [label="Enter function anonymousFunction"];
74 [label="Access variable this@R|special/anonymous|"]; 74 [label="Access variable this@R|special/anonymous|"];
75 [label="Type operator: this@wb as A"]; 75 [label="Type operator: (this@R|special/anonymous| as R|A|)"];
76 [label="Access variable this@R|special/anonymous|"]; 76 [label="Access variable this@R|special/anonymous|"];
77 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; 77 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"];
78 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"]; 78 [label="Function call: this@R|special/anonymous|.R|/A.foo|()"];
@@ -299,7 +299,7 @@ digraph implicitReceivers_kt {
color=blue color=blue
94 [label="Enter when branch condition "]; 94 [label="Enter when branch condition "];
95 [label="Access variable this@R|/test_4|"]; 95 [label="Access variable this@R|/test_4|"];
96 [label="Type operator: this !is A"]; 96 [label="Type operator: (this@R|/test_4| !is R|A|)"];
97 [label="Exit when branch condition"]; 97 [label="Exit when branch condition"];
} }
subgraph cluster_24 { subgraph cluster_24 {
@@ -318,7 +318,7 @@ digraph implicitReceivers_kt {
color=blue color=blue
103 [label="Enter when branch condition "]; 103 [label="Enter when branch condition "];
104 [label="Access variable this@R|/test_4|"]; 104 [label="Access variable this@R|/test_4|"];
105 [label="Type operator: this !is B"]; 105 [label="Type operator: (this@R|/test_4| !is R|B|)"];
106 [label="Exit when branch condition"]; 106 [label="Exit when branch condition"];
} }
subgraph cluster_28 { subgraph cluster_28 {
@@ -449,14 +449,14 @@ digraph implicitReceivers_kt {
color=blue color=blue
152 [label="Enter when branch condition "]; 152 [label="Enter when branch condition "];
153 [label="Access variable this@R|/test_5|"]; 153 [label="Access variable this@R|/test_5|"];
154 [label="Type operator: this is List<*>"]; 154 [label="Type operator: (this@R|/test_5| is R|kotlin/collections/List<*>|)"];
155 [label="Exit when branch condition"]; 155 [label="Exit when branch condition"];
} }
subgraph cluster_35 { subgraph cluster_35 {
color=blue color=blue
156 [label="Enter when branch condition "]; 156 [label="Enter when branch condition "];
157 [label="Access variable this@R|/test_5|"]; 157 [label="Access variable this@R|/test_5|"];
158 [label="Type operator: this is String"]; 158 [label="Type operator: (this@R|/test_5| is R|kotlin/String|)"];
159 [label="Exit when branch condition"]; 159 [label="Exit when branch condition"];
} }
subgraph cluster_36 { subgraph cluster_36 {
@@ -542,10 +542,10 @@ digraph implicitReceivers_kt {
color=red color=red
181 [label="Enter function test_6" style="filled" fillcolor=red]; 181 [label="Enter function test_6" style="filled" fillcolor=red];
182 [label="Access variable this@R|/test_6|"]; 182 [label="Access variable this@R|/test_6|"];
183 [label="Type operator: this as List<*>"]; 183 [label="Type operator: (this@R|/test_6| as R|kotlin/collections/List<*>|)"];
184 [label="Access variable R|kotlin/collections/List.size|"]; 184 [label="Access variable R|kotlin/collections/List.size|"];
185 [label="Access variable this@R|/test_6|"]; 185 [label="Access variable this@R|/test_6|"];
186 [label="Type operator: this as String"]; 186 [label="Type operator: (this@R|/test_6| as R|kotlin/String|)"];
187 [label="Access variable R|kotlin/String.length|"]; 187 [label="Access variable R|kotlin/String.length|"];
188 [label="Exit function test_6" style="filled" fillcolor=red]; 188 [label="Exit function test_6" style="filled" fillcolor=red];
} }
@@ -26,7 +26,7 @@ digraph thisOfExtensionProperty_kt {
color=blue color=blue
5 [label="Enter &&"]; 5 [label="Enter &&"];
6 [label="Access variable this@R|/check_1|"]; 6 [label="Access variable this@R|/check_1|"];
7 [label="Type operator: this is B"]; 7 [label="Type operator: (this@R|/check_1| is R|B|)"];
8 [label="Exit left part of &&"]; 8 [label="Exit left part of &&"];
9 [label="Enter right part of &&"]; 9 [label="Enter right part of &&"];
10 [label="Access variable R|/B.b|"]; 10 [label="Access variable R|/B.b|"];
@@ -64,7 +64,7 @@ digraph thisOfExtensionProperty_kt {
color=blue color=blue
18 [label="Enter &&"]; 18 [label="Enter &&"];
19 [label="Access variable this@R|/check_2|"]; 19 [label="Access variable this@R|/check_2|"];
20 [label="Type operator: this is B"]; 20 [label="Type operator: (this@R|/check_2| is R|B|)"];
21 [label="Exit left part of &&"]; 21 [label="Exit left part of &&"];
22 [label="Enter right part of &&"]; 22 [label="Enter right part of &&"];
23 [label="Access variable this@R|/check_2|"]; 23 [label="Access variable this@R|/check_2|"];
@@ -169,7 +169,7 @@ digraph assignSafeCall_kt {
color=blue color=blue
57 [label="Enter when"]; 57 [label="Enter when"];
58 [label="Access variable R|<local>/x|"]; 58 [label="Access variable R|<local>/x|"];
59 [label="Type operator: x as? A"]; 59 [label="Type operator: (R|<local>/x| as? R|A|)"];
60 [label="Variable declaration: lval <elvis>: R|A?|"]; 60 [label="Variable declaration: lval <elvis>: R|A?|"];
subgraph cluster_15 { subgraph cluster_15 {
color=blue color=blue
@@ -389,7 +389,7 @@ digraph assignSafeCall_kt {
color=blue color=blue
136 [label="Enter when"]; 136 [label="Enter when"];
137 [label="Access variable R|<local>/x|"]; 137 [label="Access variable R|<local>/x|"];
138 [label="Type operator: x as? B"]; 138 [label="Type operator: (R|<local>/x| as? R|B|)"];
139 [label="Variable declaration: lval <elvis>: R|B?|"]; 139 [label="Variable declaration: lval <elvis>: R|B?|"];
subgraph cluster_33 { subgraph cluster_33 {
color=blue color=blue
@@ -82,7 +82,7 @@ digraph safeCalls_kt {
color=red color=red
25 [label="Enter function test_2" style="filled" fillcolor=red]; 25 [label="Enter function test_2" style="filled" fillcolor=red];
26 [label="Access variable R|<local>/x|"]; 26 [label="Access variable R|<local>/x|"];
27 [label="Type operator: x as? A"]; 27 [label="Type operator: (R|<local>/x| as? R|A|)"];
28 [label="Enter safe call"]; 28 [label="Enter safe call"];
29 [label="Access variable R|<local>/x|"]; 29 [label="Access variable R|<local>/x|"];
30 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)"]; 30 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)"];
@@ -102,7 +102,7 @@ digraph safeCalls_kt {
color=red color=red
33 [label="Enter function test_3" style="filled" fillcolor=red]; 33 [label="Enter function test_3" style="filled" fillcolor=red];
34 [label="Access variable R|<local>/x|"]; 34 [label="Access variable R|<local>/x|"];
35 [label="Type operator: x as? A"]; 35 [label="Type operator: (R|<local>/x| as? R|A|)"];
36 [label="Enter safe call"]; 36 [label="Enter safe call"];
37 [label="Access variable R|<local>/x|"]; 37 [label="Access variable R|<local>/x|"];
38 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)"]; 38 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)"];
@@ -49,7 +49,7 @@ digraph overridenOpenVal_kt {
color=blue color=blue
12 [label="Enter when branch condition "]; 12 [label="Enter when branch condition "];
13 [label="Access variable R|/A.x|"]; 13 [label="Access variable R|/A.x|"];
14 [label="Type operator: x is String"]; 14 [label="Type operator: (this@R|/B|.R|/A.x| is R|kotlin/String|)"];
15 [label="Exit when branch condition"]; 15 [label="Exit when branch condition"];
} }
16 [label="Synthetic else branch"]; 16 [label="Synthetic else branch"];
@@ -93,7 +93,7 @@ digraph overridenOpenVal_kt {
27 [label="Enter when branch condition "]; 27 [label="Enter when branch condition "];
28 [label="Access variable R|<local>/b|"]; 28 [label="Access variable R|<local>/b|"];
29 [label="Access variable R|/A.x|"]; 29 [label="Access variable R|/A.x|"];
30 [label="Type operator: b.x is String"]; 30 [label="Type operator: (R|<local>/b|.R|/A.x| is R|kotlin/String|)"];
31 [label="Exit when branch condition"]; 31 [label="Exit when branch condition"];
} }
32 [label="Synthetic else branch"]; 32 [label="Synthetic else branch"];
@@ -7,13 +7,13 @@ digraph conditionalEffects_kt {
color=red color=red
0 [label="Enter function test_1" style="filled" fillcolor=red]; 0 [label="Enter function test_1" style="filled" fillcolor=red];
1 [label="Access variable R|<local>/x|"]; 1 [label="Access variable R|<local>/x|"];
2 [label="Type operator: x is Int"]; 2 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
3 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/Int|))"]; 3 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/Int|))"];
subgraph cluster_1 { subgraph cluster_1 {
color=blue color=blue
4 [label="Enter contract"]; 4 [label="Enter contract"];
5 [label="Access variable R|<local>/x|"]; 5 [label="Access variable R|<local>/x|"];
6 [label="Type operator: x is Int"]; 6 [label="Type operator: (R|<local>/x| is R|kotlin/Int|)"];
7 [label="Exit contract"]; 7 [label="Exit contract"];
} }
8 [label="Access variable R|<local>/x|"]; 8 [label="Access variable R|<local>/x|"];
@@ -101,7 +101,7 @@ digraph conditionalEffects_kt {
color=blue color=blue
36 [label="Enter &&"]; 36 [label="Enter &&"];
37 [label="Access variable R|<local>/x|"]; 37 [label="Access variable R|<local>/x|"];
38 [label="Type operator: x is String"]; 38 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
39 [label="Exit left part of &&"]; 39 [label="Exit left part of &&"];
40 [label="Enter right part of &&"]; 40 [label="Enter right part of &&"];
41 [label="Access variable R|<local>/y|"]; 41 [label="Access variable R|<local>/y|"];
@@ -117,7 +117,7 @@ digraph conditionalEffects_kt {
color=blue color=blue
47 [label="Enter &&"]; 47 [label="Enter &&"];
48 [label="Access variable R|<local>/x|"]; 48 [label="Access variable R|<local>/x|"];
49 [label="Type operator: x is String"]; 49 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
50 [label="Exit left part of &&"]; 50 [label="Exit left part of &&"];
51 [label="Enter right part of &&"]; 51 [label="Enter right part of &&"];
52 [label="Access variable R|<local>/y|"]; 52 [label="Access variable R|<local>/y|"];
@@ -192,13 +192,13 @@ digraph conditionalEffects_kt {
color=blue color=blue
76 [label="Enter block"]; 76 [label="Enter block"];
77 [label="Access variable R|<local>/x|"]; 77 [label="Access variable R|<local>/x|"];
78 [label="Type operator: x is String"]; 78 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
79 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"]; 79 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"];
subgraph cluster_16 { subgraph cluster_16 {
color=blue color=blue
80 [label="Enter contract"]; 80 [label="Enter contract"];
81 [label="Access variable R|<local>/x|"]; 81 [label="Access variable R|<local>/x|"];
82 [label="Type operator: x is String"]; 82 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
83 [label="Exit contract"]; 83 [label="Exit contract"];
} }
84 [label="Access variable R|<local>/x|"]; 84 [label="Access variable R|<local>/x|"];
@@ -265,13 +265,13 @@ digraph conditionalEffects_kt {
color=blue color=blue
100 [label="Enter block"]; 100 [label="Enter block"];
101 [label="Access variable R|<local>/x|"]; 101 [label="Access variable R|<local>/x|"];
102 [label="Type operator: x is String"]; 102 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
103 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"]; 103 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"];
subgraph cluster_22 { subgraph cluster_22 {
color=blue color=blue
104 [label="Enter contract"]; 104 [label="Enter contract"];
105 [label="Access variable R|<local>/x|"]; 105 [label="Access variable R|<local>/x|"];
106 [label="Type operator: x is String"]; 106 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
107 [label="Exit contract"]; 107 [label="Exit contract"];
} }
108 [label="Access variable R|<local>/x|"]; 108 [label="Access variable R|<local>/x|"];
@@ -284,13 +284,13 @@ digraph conditionalEffects_kt {
color=blue color=blue
113 [label="Enter block"]; 113 [label="Enter block"];
114 [label="Access variable R|<local>/x|"]; 114 [label="Access variable R|<local>/x|"];
115 [label="Type operator: x is String"]; 115 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
116 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"]; 116 [label="Function call: R|kotlin/require|((R|<local>/x| is R|kotlin/String|))"];
subgraph cluster_24 { subgraph cluster_24 {
color=blue color=blue
117 [label="Enter contract"]; 117 [label="Enter contract"];
118 [label="Access variable R|<local>/x|"]; 118 [label="Access variable R|<local>/x|"];
119 [label="Type operator: x is String"]; 119 [label="Type operator: (R|<local>/x| is R|kotlin/String|)"];
120 [label="Exit contract"]; 120 [label="Exit contract"];
} }
121 [label="Access variable R|<local>/x|"]; 121 [label="Access variable R|<local>/x|"];