[FIR] Rewind DFA after call arguments for correct receiver smartcasting

^KT-63709 Fixed
This commit is contained in:
Brian Norman
2023-11-27 13:48:09 -06:00
committed by Space Team
parent 38d5e56530
commit 0881910a1b
128 changed files with 22457 additions and 16148 deletions
@@ -26,110 +26,131 @@ digraph variableInitializedInTryBlock_kt {
subgraph cluster_5 {
color=blue
7 [label="Enter block"];
8 [label="Function call: R|/getStringOrNull|()" style="filled" fillcolor=yellow];
9 [label="Exit lhs of ?:"];
10 [label="Enter rhs of ?:"];
11 [label="Jump: ^test Unit"];
12 [label="Stub" style="filled" fillcolor=gray];
13 [label="Lhs of ?: is not null"];
14 [label="Exit ?:"];
15 [label="Variable declaration: lval s: R|kotlin/String|"];
16 [label="Access variable R|<local>/s|"];
17 [label="Access variable R|kotlin/String.length|"];
18 [label="Const: Int(0)"];
19 [label="Equality operator !="];
20 [label="Assignment: R|<local>/b|"];
21 [label="Exit block"];
subgraph cluster_6 {
color=blue
8 [label="Function call arguments enter"];
9 [label="Function call arguments exit"];
}
10 [label="Function call: R|/getStringOrNull|()" style="filled" fillcolor=yellow];
11 [label="Exit lhs of ?:"];
12 [label="Enter rhs of ?:"];
13 [label="Jump: ^test Unit"];
14 [label="Stub" style="filled" fillcolor=gray];
15 [label="Lhs of ?: is not null"];
16 [label="Exit ?:"];
17 [label="Variable declaration: lval s: R|kotlin/String|"];
18 [label="Access variable R|<local>/s|"];
19 [label="Access variable R|kotlin/String.length|"];
20 [label="Const: Int(0)"];
21 [label="Equality operator !="];
22 [label="Assignment: R|<local>/b|"];
23 [label="Exit block"];
}
22 [label="Try main block exit"];
24 [label="Try main block exit"];
}
subgraph cluster_6 {
subgraph cluster_7 {
color=blue
23 [label="Enter finally"];
subgraph cluster_7 {
25 [label="Enter finally"];
subgraph cluster_8 {
color=blue
24 [label="Enter block"];
25 [label="Function call: R|/test|()" style="filled" fillcolor=yellow];
26 [label="Exit block"];
26 [label="Enter block"];
subgraph cluster_9 {
color=blue
27 [label="Function call arguments enter"];
28 [label="Function call arguments exit"];
}
29 [label="Function call: R|/test|()" style="filled" fillcolor=yellow];
30 [label="Exit block"];
}
27 [label="Exit finally"];
31 [label="Exit finally"];
}
28 [label="Try expression exit"];
32 [label="Try expression exit"];
}
29 [label="Access variable R|<local>/b|"];
30 [label="Function call: R|/takeBoolean|(...)" style="filled" fillcolor=yellow];
31 [label="Exit block"];
subgraph cluster_10 {
color=blue
33 [label="Function call arguments enter"];
34 [label="Access variable R|<local>/b|"];
35 [label="Function call arguments exit"];
}
36 [label="Function call: R|/takeBoolean|(...)" style="filled" fillcolor=yellow];
37 [label="Exit block"];
}
32 [label="Exit function test" style="filled" fillcolor=red];
38 [label="Exit function test" style="filled" fillcolor=red];
}
2 -> {3};
3 -> {4};
4 -> {5};
5 -> {6};
5 -> {23} [label="onUncaughtException"];
5 -> {25} [label="onUncaughtException"];
6 -> {7};
7 -> {8};
8 -> {9};
9 -> {10 13};
9 -> {10};
10 -> {11};
11 -> {23} [label="return@/test"];
11 -> {12} [style=dotted];
12 -> {14} [style=dotted];
13 -> {14};
14 -> {15};
11 -> {12 15};
12 -> {13};
13 -> {25} [label="return@/test"];
13 -> {14} [style=dotted];
14 -> {16} [style=dotted];
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
20 -> {21};
20 -> {23} [label="onUncaughtException"];
21 -> {22};
22 -> {23};
22 -> {25} [label="onUncaughtException"];
23 -> {24};
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
27 -> {32} [label="return@/test"];
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {32};
subgraph cluster_8 {
color=red
33 [label="Enter function takeBoolean" style="filled" fillcolor=red];
subgraph cluster_9 {
color=blue
34 [label="Enter block"];
35 [label="Exit block"];
}
36 [label="Exit function takeBoolean" style="filled" fillcolor=red];
}
31 -> {38} [label="return@/test"];
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {36};
subgraph cluster_10 {
color=red
37 [label="Enter function getStringOrNull" style="filled" fillcolor=red];
subgraph cluster_11 {
color=blue
38 [label="Enter block"];
39 [label="Const: String(hello)"];
40 [label="Jump: ^getStringOrNull String(hello)"];
41 [label="Stub" style="filled" fillcolor=gray];
42 [label="Exit block" style="filled" fillcolor=gray];
}
43 [label="Exit function getStringOrNull" style="filled" fillcolor=red];
}
36 -> {37};
37 -> {38};
38 -> {39};
subgraph cluster_11 {
color=red
39 [label="Enter function takeBoolean" style="filled" fillcolor=red];
subgraph cluster_12 {
color=blue
40 [label="Enter block"];
41 [label="Exit block"];
}
42 [label="Exit function takeBoolean" style="filled" fillcolor=red];
}
39 -> {40};
40 -> {43};
40 -> {41} [style=dotted];
41 -> {42} [style=dotted];
42 -> {43} [style=dotted];
40 -> {41};
41 -> {42};
subgraph cluster_13 {
color=red
43 [label="Enter function getStringOrNull" style="filled" fillcolor=red];
subgraph cluster_14 {
color=blue
44 [label="Enter block"];
45 [label="Const: String(hello)"];
46 [label="Jump: ^getStringOrNull String(hello)"];
47 [label="Stub" style="filled" fillcolor=gray];
48 [label="Exit block" style="filled" fillcolor=gray];
}
49 [label="Exit function getStringOrNull" style="filled" fillcolor=red];
}
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {49};
46 -> {47} [style=dotted];
47 -> {48} [style=dotted];
48 -> {49} [style=dotted];
}