FIR: Fix rendered fir and DFA graph test data after safe-calls refactoring

^KT-38444 In Progress
This commit is contained in:
Denis Zharkov
2020-06-01 16:05:17 +03:00
parent 409e90e7de
commit 723b275d99
30 changed files with 116 additions and 114 deletions
@@ -92,8 +92,8 @@ FILE: boundSmartcasts.kt
R|<local>/d1|.R|/D.any|.R|/baz|()
}
public final fun test_7(d1: R|D|, d2: R|D|): R|kotlin/Unit| {
lval a: R|kotlin/Any?| = R|<local>/d1|?.R|/D.any|
lval b: R|kotlin/Any?| = R|<local>/d2|?.R|/D.any|
lval a: R|kotlin/Any?| = R|<local>/d1|?.{ $subj$.R|/D.any| }
lval b: R|kotlin/Any?| = R|<local>/d2|?.{ $subj$.R|/D.any| }
(R|<local>/a| as R|A|)
R|<local>/a|.R|/A.foo|()
(R|<local>/b| as R|B|)
@@ -76,7 +76,7 @@ digraph functionCallBound_kt {
25 [label="Access variable R|<local>/base|"];
26 [label="Type operator: (R|<local>/base| as? R|Sub|)"];
27 [label="Enter safe call"];
29 [label="Function call: (R|<local>/base| as? R|Sub|)?.R|/isOk|()"];
29 [label="Function call: $subj$.R|/isOk|()"];
28 [label="Exit safe call"];
30 [label="Const: Boolean(true)"];
31 [label="Operator =="];
@@ -107,7 +107,7 @@ digraph functionCallBound_kt {
23 [label="Exit when"];
}
46 [label="Jump: ^check when () {
==((R|<local>/base| as? R|Sub|)?.R|/isOk|(), Boolean(true)) -> {
==((R|<local>/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> {
R|<local>/base|.R|/Sub.data|
}
else -> {
@@ -19,7 +19,7 @@ FILE: functionCallBound.kt
}
public final fun check(base: R|Base|): R|Base| {
^check when () {
==((R|<local>/base| as? R|Sub|)?.R|/isOk|(), Boolean(true)) -> {
==((R|<local>/base| as? R|Sub|)?.{ $subj$.R|/isOk|() }, Boolean(true)) -> {
R|<local>/base|.R|/Sub.data|
}
else -> {
@@ -8,7 +8,7 @@ FILE: elvis.kt
}
public final fun test_1(x: R|A?|): R|kotlin/Unit| {
when () {
when (lval <elvis>: R|kotlin/Boolean?| = R|<local>/x|?.R|/A.b|) {
when (lval <elvis>: R|kotlin/Boolean?| = R|<local>/x|?.{ $subj$.R|/A.b| }) {
==($subj$, Null(null)) -> {
^test_1 Unit
}
@@ -74,7 +74,7 @@ FILE: returns.kt
}
public final fun test_4(a: R|kotlin/Any?|): R|kotlin/Unit| {
lval s: R|kotlin/String?| = (R|<local>/a| as? R|kotlin/String|)
lval length: R|kotlin/Int| = when (lval <elvis>: R|kotlin/Int?| = R|<local>/s|?.R|/ext|) {
lval length: R|kotlin/Int| = when (lval <elvis>: R|kotlin/Int?| = R|<local>/s|?.{ $subj$.R|/ext| }) {
==($subj$, Null(null)) -> {
^test_4 Unit
}
@@ -440,7 +440,7 @@ digraph nullability_kt {
150 [label="Enter when branch condition "];
151 [label="Access variable R|<local>/x|"];
152 [label="Enter safe call"];
154 [label="Function call: R|<local>/x|?.R|/A.getA|()"];
154 [label="Function call: $subj$.R|/A.getA|()"];
153 [label="Exit safe call"];
155 [label="Const: Null(null)"];
156 [label="Operator =="];
@@ -501,7 +501,7 @@ digraph nullability_kt {
178 [label="Access variable R|/MyData.s|"];
177 [label="Exit safe call"];
179 [label="Enter safe call"];
181 [label="Function call: R|<local>/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"];
181 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
180 [label="Exit safe call"];
182 [label="Const: Null(null)"];
183 [label="Operator !="];
@@ -574,7 +574,7 @@ digraph nullability_kt {
209 [label="Access variable R|/MyData.s|"];
208 [label="Exit safe call"];
210 [label="Enter safe call"];
212 [label="Function call: R|<local>/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"];
212 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
211 [label="Exit safe call"];
213 [label="Variable declaration: lval <elvis>: R|kotlin/Int?|"];
subgraph cluster_55 {
@@ -672,13 +672,13 @@ digraph nullability_kt {
244 [label="Enter when branch condition "];
245 [label="Access variable R|<local>/q|"];
246 [label="Enter safe call"];
248 [label="Function call: R|<local>/q|?.R|/Q.fdata|()"];
248 [label="Function call: $subj$.R|/Q.fdata|()"];
247 [label="Exit safe call"];
249 [label="Enter safe call"];
251 [label="Function call: R|<local>/q|?.R|/Q.fdata|()?.R|/MyData.fs|()"];
251 [label="Function call: $subj$.R|/MyData.fs|()"];
250 [label="Exit safe call"];
252 [label="Enter safe call"];
254 [label="Function call: R|<local>/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|()"];
254 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
253 [label="Exit safe call"];
255 [label="Const: Null(null)"];
256 [label="Operator !="];
@@ -1140,7 +1140,7 @@ digraph nullability_kt {
431 [label="Access variable R|/MyData.s|"];
430 [label="Exit safe call"];
432 [label="Enter safe call"];
434 [label="Function call: R|<local>/q|?.R|/QImpl.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"];
434 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
433 [label="Exit safe call"];
435 [label="Const: Null(null)"];
436 [label="Operator !="];
@@ -1283,7 +1283,7 @@ digraph nullability_kt {
492 [label="Access variable R|/MyData.s|"];
491 [label="Exit safe call"];
493 [label="Enter safe call"];
495 [label="Function call: R|<local>/q|?.R|/QImplWithCustomGetter.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"];
495 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
494 [label="Exit safe call"];
496 [label="Const: Null(null)"];
497 [label="Operator !="];
@@ -1359,7 +1359,7 @@ digraph nullability_kt {
524 [label="Access variable R|/MyData.s|"];
523 [label="Exit safe call"];
525 [label="Enter safe call"];
527 [label="Function call: R|<local>/q|?.R|/QImplMutable.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"];
527 [label="Function call: $subj$.R|kotlin/Int.inc|()"];
526 [label="Exit safe call"];
528 [label="Const: Null(null)"];
529 [label="Operator !="];
@@ -99,7 +99,7 @@ FILE: nullability.kt
}
public final fun test_4(x: R|A?|): R|kotlin/Unit| {
when () {
==(R|<local>/x|?.R|/A.getA|(), Null(null)) -> {
==(R|<local>/x|?.{ $subj$.R|/A.getA|() }, Null(null)) -> {
^test_4 Unit
}
}
@@ -108,7 +108,7 @@ FILE: nullability.kt
}
public final fun test_5(q: R|Q?|): R|kotlin/Unit| {
when () {
!=(R|<local>/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|(), Null(null)) -> {
!=(R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/Q.data|
R|<local>/q|.R|/Q.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#
R|<local>/q|.R|/Q.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#.<Unresolved name: inc>#()
@@ -117,7 +117,7 @@ FILE: nullability.kt
}
public final fun test_6(q: R|Q?|): R|kotlin/Unit| {
when (lval <elvis>: R|kotlin/Int?| = R|<local>/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()) {
when (lval <elvis>: R|kotlin/Int?| = R|<local>/q|?.{ $subj$.R|/Q.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }) {
==($subj$, Null(null)) -> {
^test_6 Unit
}
@@ -132,7 +132,7 @@ FILE: nullability.kt
}
public final fun test_7(q: R|Q?|): R|kotlin/Unit| {
when () {
!=(R|<local>/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|(), Null(null)) -> {
!=(R|<local>/q|?.{ $subj$.R|/Q.fdata|() }?.{ $subj$.R|/MyData.fs|() }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/Q.fdata|()
R|<local>/q|.R|/Q.fdata|().<Inapplicable(WRONG_RECEIVER): [/MyData.fs]>#()
R|<local>/q|.R|/Q.fdata|().<Inapplicable(WRONG_RECEIVER): [/MyData.fs]>#().<Unresolved name: inc>#()
@@ -210,7 +210,7 @@ FILE: nullability.kt
}
public final fun test_11(q: R|QImpl?|, q2: R|QImpl|): R|kotlin/Unit| {
when () {
!=(R|<local>/q|?.R|/QImpl.data|?.R|/MyData.s|?.R|kotlin/Int.inc|(), Null(null)) -> {
!=(R|<local>/q|?.{ $subj$.R|/QImpl.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/QImpl.data|
R|<local>/q|.R|/QImpl.data|.R|/MyData.s|
R|<local>/q|.R|/QImpl.data|.R|/MyData.s|.R|kotlin/Int.inc|()
@@ -230,7 +230,7 @@ FILE: nullability.kt
}
public final fun test_12(q: R|QImplWithCustomGetter?|): R|kotlin/Unit| {
when () {
!=(R|<local>/q|?.R|/QImplWithCustomGetter.data|?.R|/MyData.s|?.R|kotlin/Int.inc|(), Null(null)) -> {
!=(R|<local>/q|?.{ $subj$.R|/QImplWithCustomGetter.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/QImplWithCustomGetter.data|
R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#
R|<local>/q|.R|/QImplWithCustomGetter.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#.<Unresolved name: inc>#()
@@ -240,7 +240,7 @@ FILE: nullability.kt
}
public final fun test_13(q: R|QImplMutable?|): R|kotlin/Unit| {
when () {
!=(R|<local>/q|?.R|/QImplMutable.data|?.R|/MyData.s|?.R|kotlin/Int.inc|(), Null(null)) -> {
!=(R|<local>/q|?.{ $subj$.R|/QImplMutable.data| }?.{ $subj$.R|/MyData.s| }?.{ $subj$.R|kotlin/Int.inc|() }, Null(null)) -> {
R|<local>/q|.R|/QImplMutable.data|
R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#
R|<local>/q|.R|/QImplMutable.data|.<Inapplicable(WRONG_RECEIVER): [/MyData.s]>#.<Unresolved name: inc>#()
@@ -114,7 +114,7 @@ digraph assignSafeCall_kt {
38 [label="Enter function test_2" style="filled" fillcolor=red];
40 [label="Access variable R|<local>/a|"];
41 [label="Enter safe call"];
43 [label="Function call: R|<local>/a|?.R|/A.foo|()"];
43 [label="Function call: $subj$.R|/A.foo|()"];
42 [label="Exit safe call"];
44 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_11 {
@@ -333,7 +333,7 @@ digraph assignSafeCall_kt {
119 [label="Enter function test_2" style="filled" fillcolor=red];
121 [label="Access variable R|<local>/a|"];
122 [label="Enter safe call"];
124 [label="Function call: R|<local>/a|?.R|/B.foo|()"];
124 [label="Function call: $subj$.R|/B.foo|()"];
123 [label="Exit safe call"];
125 [label="Variable declaration: lval x: R|kotlin/Int?|"];
subgraph cluster_30 {
@@ -16,7 +16,7 @@ FILE: assignSafeCall.kt
}
public final fun test_1(a: R|A?|): R|kotlin/Unit| {
lval x: R|kotlin/Int?| = R|<local>/a|?.R|/A.x|
lval x: R|kotlin/Int?| = R|<local>/a|?.{ $subj$.R|/A.x| }
when () {
!=(R|<local>/x|, Null(null)) -> {
R|<local>/a|.R|/A.bar|()
@@ -25,7 +25,7 @@ FILE: assignSafeCall.kt
}
public final fun test_2(a: R|A?|): R|kotlin/Unit| {
lval x: R|kotlin/Int?| = R|<local>/a|?.R|/A.foo|()
lval x: R|kotlin/Int?| = R|<local>/a|?.{ $subj$.R|/A.foo|() }
when () {
!=(R|<local>/x|, Null(null)) -> {
R|<local>/a|.R|/A.bar|()
@@ -56,7 +56,7 @@ FILE: assignSafeCall.kt
}
public final fun test_1(a: R|B?|): R|kotlin/Unit| {
lval x: R|kotlin/Int?| = R|<local>/a|?.R|/B.x|
lval x: R|kotlin/Int?| = R|<local>/a|?.{ $subj$.R|/B.x| }
when () {
!=(R|<local>/x|, Null(null)) -> {
R|<local>/a|.R|/B.bar|()
@@ -65,7 +65,7 @@ FILE: assignSafeCall.kt
}
public final fun test_2(a: R|B?|): R|kotlin/Unit| {
lval x: R|kotlin/Int?| = R|<local>/a|?.R|/B.foo|()
lval x: R|kotlin/Int?| = R|<local>/a|?.{ $subj$.R|/B.foo|() }
when () {
!=(R|<local>/x|, Null(null)) -> {
R|<local>/a|.R|/B.bar|()
@@ -28,7 +28,7 @@ digraph safeCallAndEqualityToBool_kt {
9 [label="Enter when branch condition "];
10 [label="Access variable R|<local>/s|"];
11 [label="Enter safe call"];
13 [label="Function call: R|<local>/s|?.R|/check|()"];
13 [label="Function call: $subj$.R|/check|()"];
12 [label="Exit safe call"];
14 [label="Const: Boolean(true)"];
15 [label="Operator =="];
@@ -98,7 +98,7 @@ digraph safeCallAndEqualityToBool_kt {
35 [label="Enter when branch condition "];
36 [label="Access variable R|<local>/s|"];
37 [label="Enter safe call"];
39 [label="Function call: R|<local>/s|?.R|/check|()"];
39 [label="Function call: $subj$.R|/check|()"];
38 [label="Exit safe call"];
40 [label="Const: Boolean(false)"];
41 [label="Operator =="];
@@ -168,7 +168,7 @@ digraph safeCallAndEqualityToBool_kt {
61 [label="Enter when branch condition "];
62 [label="Access variable R|<local>/s|"];
63 [label="Enter safe call"];
65 [label="Function call: R|<local>/s|?.R|/check|()"];
65 [label="Function call: $subj$.R|/check|()"];
64 [label="Exit safe call"];
66 [label="Const: Boolean(true)"];
67 [label="Operator !="];
@@ -238,7 +238,7 @@ digraph safeCallAndEqualityToBool_kt {
87 [label="Enter when branch condition "];
88 [label="Access variable R|<local>/s|"];
89 [label="Enter safe call"];
91 [label="Function call: R|<local>/s|?.R|/check|()"];
91 [label="Function call: $subj$.R|/check|()"];
90 [label="Exit safe call"];
92 [label="Const: Boolean(false)"];
93 [label="Operator !="];
@@ -4,7 +4,7 @@ FILE: safeCallAndEqualityToBool.kt
}
public final fun test_1(s: R|kotlin/String?|): R|kotlin/Unit| {
when () {
==(R|<local>/s|?.R|/check|(), Boolean(true)) -> {
==(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(true)) -> {
R|<local>/s|.R|kotlin/String.length|
}
else -> {
@@ -15,7 +15,7 @@ FILE: safeCallAndEqualityToBool.kt
}
public final fun test_2(s: R|kotlin/String?|): R|kotlin/Unit| {
when () {
==(R|<local>/s|?.R|/check|(), Boolean(false)) -> {
==(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(false)) -> {
R|<local>/s|.R|kotlin/String.length|
}
else -> {
@@ -26,7 +26,7 @@ FILE: safeCallAndEqualityToBool.kt
}
public final fun test_3(s: R|kotlin/String?|): R|kotlin/Unit| {
when () {
!=(R|<local>/s|?.R|/check|(), Boolean(true)) -> {
!=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(true)) -> {
R|<local>/s|.<Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#
}
else -> {
@@ -37,7 +37,7 @@ FILE: safeCallAndEqualityToBool.kt
}
public final fun test_4(s: R|kotlin/String?|): R|kotlin/Unit| {
when () {
!=(R|<local>/s|?.R|/check|(), Boolean(false)) -> {
!=(R|<local>/s|?.{ $subj$.R|/check|() }, Boolean(false)) -> {
R|<local>/s|.<Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#
}
else -> {
@@ -33,7 +33,7 @@ digraph safeCalls_kt {
13 [label="Access variable R|kotlin/String.length|"];
14 [label="Const: Int(1)"];
15 [label="Operator =="];
16 [label="Function call: R|<local>/x|?.R|/foo|(...)"];
16 [label="Function call: $subj$.R|/foo|(...)"];
11 [label="Exit safe call"];
17 [label="Access variable R|<local>/x|"];
18 [label="Access variable <Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#"];
@@ -86,7 +86,7 @@ digraph safeCalls_kt {
30 [label="Type operator: (R|<local>/x| as? R|A|)"];
31 [label="Enter safe call"];
33 [label="Access variable R|<local>/x|"];
34 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(...)"];
34 [label="Function call: $subj$.R|/A.bar|(...)"];
32 [label="Exit safe call"];
28 [label="Exit function test_2" style="filled" fillcolor=red];
}
@@ -105,12 +105,12 @@ digraph safeCalls_kt {
38 [label="Type operator: (R|<local>/x| as? R|A|)"];
39 [label="Enter safe call"];
41 [label="Access variable R|<local>/x|"];
42 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(...)"];
42 [label="Function call: $subj$.R|/A.bar|(...)"];
40 [label="Exit safe call"];
43 [label="Enter safe call"];
45 [label="Access variable R|<local>/x|"];
46 [label="Function call: R|<local>/x|.R|/A.bool|()"];
47 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(...)?.R|/foo|(...)"];
47 [label="Function call: $subj$.R|/foo|(...)"];
44 [label="Exit safe call"];
48 [label="Enter safe call"];
50 [label="Postponed enter to lambda"];
@@ -122,7 +122,7 @@ digraph safeCalls_kt {
56 [label="Exit function anonymousFunction" style="filled" fillcolor=red];
}
51 [label="Postponed exit from lambda"];
52 [label="Function call: (R|<local>/x| as? R|A|)?.R|/A.bar|(...)?.R|/foo|(...)?.R|/let|(...)"];
52 [label="Function call: $subj$.R|/let|(...)"];
49 [label="Exit safe call"];
53 [label="Access variable R|<local>/x|"];
54 [label="Function call: R|<local>/x|.<Unresolved name: bool>#()"];
@@ -157,10 +157,10 @@ digraph safeCalls_kt {
59 [label="Enter function test_4" style="filled" fillcolor=red];
61 [label="Access variable R|<local>/x|"];
62 [label="Enter safe call"];
64 [label="Function call: R|<local>/x|?.R|/A.id|()"];
64 [label="Function call: $subj$.R|/A.id|()"];
63 [label="Exit safe call"];
65 [label="Enter safe call"];
67 [label="Function call: R|<local>/x|?.R|/A.id|()?.R|/A.bool|()"];
67 [label="Function call: $subj$.R|/A.bool|()"];
66 [label="Exit safe call"];
68 [label="Access variable R|<local>/x|"];
69 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
@@ -192,45 +192,47 @@ digraph safeCalls_kt {
77 [label="Postponed enter to lambda"];
subgraph cluster_13 {
color=blue
88 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
90 [label="Jump: ^test_5 Unit"];
91 [label="Stub" style="filled" fillcolor=gray];
89 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
89 [label="Enter function anonymousFunction" style="filled" fillcolor=red];
91 [label="Jump: ^test_5 Unit"];
92 [label="Stub" style="filled" fillcolor=gray];
90 [label="Exit function anonymousFunction" style="filled" fillcolor=red style="filled" fillcolor=gray];
}
80 [label="Call arguments union" style="filled" fillcolor=gray];
78 [label="Postponed exit from lambda"];
79 [label="Function call: R|<local>/x|?.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
79 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(...)" style="filled" fillcolor=gray];
81 [label="Stub" style="filled" fillcolor=gray];
76 [label="Exit safe call"];
81 [label="Enter safe call"];
83 [label="Access variable R|<local>/x|"];
84 [label="Function call: R|<local>/x|.R|/A.bool|()"];
85 [label="Function call: R|<local>/x|?.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(...)?.R|/boo|(...)"];
82 [label="Exit safe call"];
86 [label="Access variable R|<local>/x|"];
87 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
82 [label="Enter safe call"];
84 [label="Access variable R|<local>/x|"];
85 [label="Function call: R|<local>/x|.R|/A.bool|()"];
86 [label="Function call: $subj$.R|/boo|(...)"];
83 [label="Exit safe call"];
87 [label="Access variable R|<local>/x|"];
88 [label="Function call: R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()"];
73 [label="Exit function test_5" style="filled" fillcolor=red];
}
72 -> {74};
74 -> {75 76};
75 -> {77};
76 -> {81 82};
77 -> {88};
76 -> {82 83};
77 -> {89};
77 -> {78} [color=red];
78 -> {79} [color=green];
79 -> {76} [style=dotted];
79 -> {73 81} [style=dotted];
80 -> {79} [style=dotted];
81 -> {83};
82 -> {86};
83 -> {84};
81 -> {76} [style=dotted];
82 -> {84};
83 -> {87};
84 -> {85};
85 -> {82};
86 -> {87};
87 -> {73};
88 -> {90};
89 -> {80} [style=dotted];
89 -> {78} [color=green];
90 -> {73};
90 -> {91} [style=dotted];
91 -> {89} [style=dotted];
85 -> {86};
86 -> {83};
87 -> {88};
88 -> {73} [style=dotted];
89 -> {91};
90 -> {80} [style=dotted];
90 -> {78} [color=green];
91 -> {73};
91 -> {92} [style=dotted];
92 -> {90} [style=dotted];
}
@@ -5,7 +5,7 @@ FILE: safeCalls.kt
public final fun R|kotlin/String|.let(block: R|() -> kotlin/Unit|): R|kotlin/Unit| {
}
public final fun test(x: R|kotlin/String?|): R|kotlin/Unit| {
R|<local>/x|?.R|/foo|(==(R|<local>/x|.R|kotlin/String.length|, Int(1)))
R|<local>/x|?.{ $subj$.R|/foo|(==(R|<local>/x|.R|kotlin/String.length|, Int(1))) }
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#
}
public abstract interface A : R|kotlin/Any| {
@@ -17,24 +17,24 @@ FILE: safeCalls.kt
}
public final fun test_2(x: R|kotlin/Any|): R|kotlin/Unit| {
(R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)
(R|<local>/x| as? R|A|)?.{ $subj$.R|/A.bar|(R|<local>/x|) }
}
public final fun test_3(x: R|kotlin/Any|): R|kotlin/Unit| {
(R|<local>/x| as? R|A|)?.R|/A.bar|(R|<local>/x|)?.R|/foo|(R|<local>/x|.R|/A.bool|())?.R|/let|(<L> = let@fun <anonymous>(): R|kotlin/Unit| {
(R|<local>/x| as? R|A|)?.{ $subj$.R|/A.bar|(R|<local>/x|) }?.{ $subj$.R|/foo|(R|<local>/x|.R|/A.bool|()) }?.{ $subj$.R|/let|(<L> = let@fun <anonymous>(): R|kotlin/Unit| {
^ R|<local>/x|.R|/A.bool|()
}
)
) }
R|<local>/x|.<Unresolved name: bool>#()
}
public final fun test_4(x: R|A?|): R|kotlin/Unit| {
R|<local>/x|?.R|/A.id|()?.R|/A.bool|()
R|<local>/x|?.{ $subj$.R|/A.id|() }?.{ $subj$.R|/A.bool|() }
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()
}
public final fun R|kotlin/Any?|.boo(b: R|kotlin/Boolean|): R|kotlin/Unit|
public final fun test_5(x: R|A?|): R|kotlin/Unit| {
R|<local>/x|?.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(<L> = let@fun <anonymous>(it: R|A|): R|kotlin/Nothing| <kind=EXACTLY_ONCE> {
R|<local>/x|?.{ $subj$.R|kotlin/let|<R|A|, R|kotlin/Nothing|>(<L> = let@fun <anonymous>(it: R|A|): R|kotlin/Nothing| <kind=EXACTLY_ONCE> {
^test_5 Unit
}
)?.R|/boo|(R|<local>/x|.R|/A.bool|())
) }?.{ $subj$.R|/boo|(R|<local>/x|.R|/A.bool|()) }
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/A.id]>#()
}
@@ -209,7 +209,7 @@ digraph smartcastToNothing_kt {
}
91 [label="Call arguments union" style="filled" fillcolor=yellow];
89 [label="Postponed exit from lambda"];
90 [label="Function call: R|<local>/s|?.R|kotlin/let|<R|A|, R|kotlin/Int|>(...)"];
90 [label="Function call: $subj$.R|kotlin/let|<R|A|, R|kotlin/Int|>(...)"];
87 [label="Exit safe call"];
48 [label="Exit function test_0" style="filled" fillcolor=red];
}
@@ -42,8 +42,8 @@ FILE: smartcastToNothing.kt
}
R|<local>/s|?.R|kotlin/let|<R|A|, R|kotlin/Int|>(<L> = let@fun <anonymous>(it: R|A|): R|kotlin/Int| <kind=EXACTLY_ONCE> {
R|<local>/s|?.{ $subj$.R|kotlin/let|<R|A|, R|kotlin/Int|>(<L> = let@fun <anonymous>(it: R|A|): R|kotlin/Int| <kind=EXACTLY_ONCE> {
^ R|<local>/it|.R|/A.a|
}
)
) }
}