[FIR] Tests. Change extension for testdata with cgf from .cfg.dot to .dot

Also remove cfg dumps in made with old renderer
This commit is contained in:
Dmitriy Novozhilov
2019-08-27 13:08:28 +03:00
parent 7e43a0d9ef
commit b7e1e7704e
32 changed files with 245 additions and 768 deletions
@@ -1,97 +0,0 @@
0: Enter function "test_1" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Enter || -> 5, 8 | <- 3
5: Access variable R|<local>/b1| -> 6, 8 | <- 4
6: Exit left part of || -> 7 | <- 5
7: Access variable R|<local>/b2| -> 8 | <- 6
8: Exit || -> 9 | <- 4, 5, 7
9: Exit when branch condition -> 10, 14 | <- 8
10: Enter block -> 11 | <- 9
11: Const: Int(1) -> 12 | <- 10
12: Exit block -> 13 | <- 11
13: Exit when branch result -> 19 | <- 12
14: Enter when branch condition "else" -> 15 | <- 9
15: Exit when branch condition -> 16 | <- 14
16: Enter block -> 17 | <- 15
17: Exit block -> 18 | <- 16
18: Exit when branch result -> 19 | <- 17
19: Exit when -> 20 | <- 13, 18
20: Exit block -> 21 | <- 19
21: Exit function "test_1" -> | <- 20
0: Enter function "test_2" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Enter && -> 5 | <- 3
5: Access variable R|<local>/b1| -> 6, 7 | <- 4
6: Access variable R|<local>/b2| -> 7 | <- 5
7: Exit && -> 8 | <- 5, 6
8: Exit when branch condition -> 9, 13 | <- 7
9: Enter block -> 10 | <- 8
10: Const: Int(1) -> 11 | <- 9
11: Exit block -> 12 | <- 10
12: Exit when branch result -> 18 | <- 11
13: Enter when branch condition "else" -> 14 | <- 8
14: Exit when branch condition -> 15 | <- 13
15: Enter block -> 16 | <- 14
16: Exit block -> 17 | <- 15
17: Exit when branch result -> 18 | <- 16
18: Exit when -> 19 | <- 12, 17
19: Exit block -> 20 | <- 18
20: Exit function "test_2" -> | <- 19
0: Enter function "test_3" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Enter || -> 5, 11 | <- 3
5: Enter && -> 6 | <- 4
6: Access variable R|<local>/b1| -> 7, 8 | <- 5
7: Access variable R|<local>/b2| -> 8 | <- 6
8: Exit && -> 9, 11 | <- 6, 7
9: Exit left part of || -> 10 | <- 8
10: Access variable R|<local>/b3| -> 11 | <- 9
11: Exit || -> 12 | <- 4, 8, 10
12: Exit when branch condition -> 13, 17 | <- 11
13: Enter block -> 14 | <- 12
14: Const: Int(1) -> 15 | <- 13
15: Exit block -> 16 | <- 14
16: Exit when branch result -> 22 | <- 15
17: Enter when branch condition "else" -> 18 | <- 12
18: Exit when branch condition -> 19 | <- 17
19: Enter block -> 20 | <- 18
20: Exit block -> 21 | <- 19
21: Exit when branch result -> 22 | <- 20
22: Exit when -> 23 | <- 16, 21
23: Exit block -> 24 | <- 22
24: Exit function "test_3" -> | <- 23
0: Enter function "test_4" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Enter || -> 5, 11 | <- 3
5: Access variable R|<local>/b1| -> 6, 11 | <- 4
6: Exit left part of || -> 7 | <- 5
7: Enter && -> 8 | <- 6
8: Access variable R|<local>/b2| -> 9, 10 | <- 7
9: Access variable R|<local>/b3| -> 10 | <- 8
10: Exit && -> 11 | <- 8, 9
11: Exit || -> 12 | <- 4, 5, 10
12: Exit when branch condition -> 13, 17 | <- 11
13: Enter block -> 14 | <- 12
14: Const: Int(1) -> 15 | <- 13
15: Exit block -> 16 | <- 14
16: Exit when branch result -> 22 | <- 15
17: Enter when branch condition "else" -> 18 | <- 12
18: Exit when branch condition -> 19 | <- 17
19: Enter block -> 20 | <- 18
20: Exit block -> 21 | <- 19
21: Exit when branch result -> 22 | <- 20
22: Exit when -> 23 | <- 16, 21
23: Exit block -> 24 | <- 22
24: Exit function "test_4" -> | <- 23
@@ -1,46 +0,0 @@
0: Enter function "fetchPluginReleaseDate" -> 1
1: Enter block -> 2 | <- 0
2: Const: String(https://plugins.jetbrains.com/api/plugins/) -> 3 | <- 1
3: Access variable R|<local>/pluginId| -> 4 | <- 2
4: Access variable <Unresolved name: idString># -> 5 | <- 3
5: Const: String(/updates?version=) -> 6 | <- 4
6: Access variable R|<local>/version| -> 7 | <- 5
7: Variable declaration: lval url: R|kotlin/String| -> 8 | <- 6
8: Try expression enter -> 9 | <- 7
9: Try main block enter -> 10, 17, 26, 41 | <- 8
10: Enter block -> 11 | <- 9
11: Access variable <Unresolved name: HttpRequests># -> 12 | <- 10
12: Access variable R|<local>/url| -> 13 | <- 11
13: Function call: <Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|) -> 14 | <- 12
14: Function call: <Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|).<Unresolved name: connect>#(<L> = connect@fun <implicit>.<anonymous>(): <implicit> {
GsonBuilder#().create#().fromJson#(it#.inputStream#.reader#(), <getClass>(Array#<R|class error: Symbol not found, for `PluginDTO`|>()).java#)
}
) -> 15 | <- 13
15: Exit block -> 16 | <- 14
16: Try main block exit -> 34 | <- 15
17: Catch enter -> 18, 41 | <- 9
18: Enter block -> 19 | <- 17
19: Const: String(Can't parse json response) -> 20 | <- 18
20: Access variable R|<local>/syntaxException| -> 21 | <- 19
21: Function call: <Unresolved name: ResponseParseException>#(String(Can't parse json response), R|<local>/syntaxException|) -> 22 | <- 20
22: Throw: throw <Unresolved name: ResponseParseException>#(String(Can't parse json response), R|<local>/syntaxException|) -> 23[DEAD], 41 | <- 21
23: Stub[DEAD] -> 24 | <- 22
24: Exit block[DEAD] -> 25 | <- 23
25: Catch exit[DEAD] -> 34 | <- 24
26: Catch enter -> 27, 41 | <- 9
27: Enter block -> 28 | <- 26
28: Access variable R|<local>/ioException| -> 29 | <- 27
29: Function call: <Unresolved name: IOException>#(R|<local>/ioException|) -> 30 | <- 28
30: Throw: throw <Unresolved name: IOException>#(R|<local>/ioException|) -> 31[DEAD], 41 | <- 29
31: Stub[DEAD] -> 32 | <- 30
32: Exit block[DEAD] -> 33 | <- 31
33: Catch exit[DEAD] -> 34 | <- 32
34: Try expression exit -> 35 | <- 16, 25[DEAD], 33[DEAD]
35: Variable declaration: lval pluginDTOs: R|kotlin/Array<class error: Symbol not found, for `PluginDTO`>| -> 36 | <- 34
36: Exit block -> 37 | <- 35
37: Enter annotation -> 38 | <- 36
38: Access variable <Unresolved name: IOException># -> 39 | <- 37
39: Access variable <Unresolved name: ResponseParseException># -> 40 | <- 38
40: Exit annotation -> 41 | <- 39
41: Exit function "fetchPluginReleaseDate" -> | <- 9, 17, 22, 26, 30, 40
@@ -14,7 +14,7 @@ subgraph fetchPluginReleaseDate {
11 [shape=box label="Access variable <Unresolved name: HttpRequests>#"];
12 [shape=box label="Access variable R|<local>/url|"];
13 [shape=box label="Function call: <Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|)"];
14 [shape=box label="Function call: <Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|).<Unresolved name: connect>#(<L> = connect@fun <implicit>.<anonymous>(): <implicit> {
14 [shape=box label="Function call: <Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|).<Unresolved name: connect>#(<L> = connect@fun <implicit>.<anonymous>(): <implicit> <kind=EXACTLY_ONCE> {
GsonBuilder#().create#().fromJson#(it#.inputStream#.reader#(), <getClass>(Array#<R|class error: Symbol not found, for `PluginDTO`|>()).java#)
}
)"];
@@ -1,2 +0,0 @@
digraph initBlock_kt {
}
+16
View File
@@ -0,0 +1,16 @@
digraph initBlock_kt {
subgraph <init> {
0 [shape=box label="Enter function <init>"];
1 [shape=box label="Exit function <init>"];
0 -> {1};
}
subgraph <init> {
2 [shape=box label="Enter function <init>"];
3 [shape=box label="Exit function <init>"];
2 -> {3};
}
}
-92
View File
@@ -1,92 +0,0 @@
0: Enter function "test_1" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Access variable R|<local>/x| -> 5 | <- 3
5: Const: Null(null) -> 6 | <- 4
6: Operator == -> 7 | <- 5
7: Exit when branch condition -> 8, 14 | <- 6
8: Enter block -> 9 | <- 7
9: Function call: R|kotlin/KotlinNullPointerException.KotlinNullPointerException|() -> 10 | <- 8
10: Throw: throw R|kotlin/KotlinNullPointerException.KotlinNullPointerException|() -> 11[DEAD], 25 | <- 9
11: Stub[DEAD] -> 12 | <- 10
12: Exit block[DEAD] -> 13 | <- 11
13: Exit when branch result[DEAD] -> 20 | <- 12
14: Enter when branch condition "else" -> 15 | <- 7
15: Exit when branch condition -> 16 | <- 14
16: Enter block -> 17 | <- 15
17: Access variable R|<local>/x| -> 18 | <- 16
18: Exit block -> 19 | <- 17
19: Exit when branch result -> 20 | <- 18
20: Exit when -> 21 | <- 13[DEAD], 19
21: Variable declaration: lval y: R|kotlin/Int| -> 22 | <- 20
22: Access variable R|<local>/y| -> 23 | <- 21
23: Function call: R|<local>/y|.R|kotlin/Int.inc|() -> 24 | <- 22
24: Exit block -> 25 | <- 23
25: Exit function "test_1" -> | <- 10, 24
0: Enter function "test_2" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Access variable R|<local>/x| -> 5 | <- 3
5: Const: Null(null) -> 6 | <- 4
6: Operator == -> 7 | <- 5
7: Exit when branch condition -> 8, 12 | <- 6
8: Enter block -> 9 | <- 7
9: Access variable R|<local>/x| -> 10 | <- 8
10: Exit block -> 11 | <- 9
11: Exit when branch result -> 18 | <- 10
12: Enter when branch condition "else" -> 13 | <- 7
13: Exit when branch condition -> 14 | <- 12
14: Enter block -> 15 | <- 13
15: Access variable R|<local>/x| -> 16 | <- 14
16: Exit block -> 17 | <- 15
17: Exit when branch result -> 18 | <- 16
18: Exit when -> 19 | <- 11, 17
19: Variable declaration: lval y: R|kotlin/Int?| -> 20 | <- 18
20: Access variable R|<local>/y| -> 21 | <- 19
21: Function call: R|<local>/y|.<Ambiguity: inc, [kotlin/inc, kotlin/inc]>#() -> 22 | <- 20
22: Exit block -> 23 | <- 21
23: Exit function "test_2" -> | <- 22
0: Enter function "test_3" -> 1
1: Enter block -> 2 | <- 0
2: Enter while loop -> 3 | <- 1
3: Enter loop condition -> 4 | <- 2, 13[DEAD]
4: Const: Boolean(true) -> 5 | <- 3
5: Exit loop condition -> 6, 14 | <- 4
6: Enter loop block -> 7 | <- 5
7: Enter block -> 8 | <- 6
8: Access variable R|<local>/x| -> 9 | <- 7
9: Type operator: "x as Int" -> 10 | <- 8
10: Jump: break@@@[Boolean(true)] -> 11[DEAD], 14 | <- 9
11: Stub[DEAD] -> 12 | <- 10
12: Exit block[DEAD] -> 13 | <- 11
13: Exit loop block[DEAD] -> 3 | <- 12
14: Exit whileloop -> 15 | <- 5, 10
15: Access variable R|<local>/x| -> 16 | <- 14
16: Function call: R|<local>/x|.<Ambiguity: inc, [kotlin/inc, kotlin/inc]>#() -> 17 | <- 15
17: Exit block -> 18 | <- 16
18: Exit function "test_3" -> | <- 17
0: Enter function "test_4" -> 1
1: Enter block -> 2 | <- 0
2: Enter do-while loop -> 3 | <- 1
3: Enter loop block -> 4 | <- 2, 13[DEAD]
4: Enter block -> 5 | <- 3
5: Access variable R|<local>/x| -> 6 | <- 4
6: Type operator: "x as int" -> 7 | <- 5
7: Jump: break@@@[Boolean(true)] -> 8[DEAD], 14[DEAD] | <- 6
8: Stub[DEAD] -> 9 | <- 7
9: Exit block[DEAD] -> 10 | <- 8
10: Exit loop block[DEAD] -> 11 | <- 9
11: Enter loop condition[DEAD] -> 12 | <- 10
12: Const: Boolean(true)[DEAD] -> 13 | <- 11
13: Exit loop condition[DEAD] -> 3, 14 | <- 12
14: Exit do-whileloop[DEAD] -> 15 | <- 7, 13
15: Access variable R|<local>/x|[DEAD] -> 16 | <- 14
16: Function call: R|<local>/x|.<Ambiguity: inc, [kotlin/inc, kotlin/inc]>#()[DEAD] -> 17 | <- 15
17: Exit block[DEAD] -> 18 | <- 16
18: Exit function "test_4"[DEAD] -> | <- 17
@@ -1,216 +0,0 @@
digraph propertiesAndInitBlocks_kt {
subgraph run {
0 [shape=box label="Enter function run"];
1 [shape=box label="Enter block"];
2 [shape=box label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [shape=box label="Exit block"];
4 [shape=box label="Exit function run"];
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
}
subgraph val_x1 {
5 [shape=box label="Enter property"];
6 [shape=box label="Const: Int(1)"];
7 [shape=box label="Exit property"];
5 -> {6};
6 -> {7};
}
subgraph <getter> {
8 [shape=box label="Enter function getter"];
9 [shape=box label="Enter block"];
10 [shape=box label="Const: Int(1)"];
11 [shape=box label="Jump: ^ Int(1)"];
12 [shape=box label="Stub[DEAD]"];
13 [shape=box label="Exit block[DEAD]"];
14 [shape=box label="Exit function getter[DEAD]"];
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {14 12} [style=dotted];
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
}
subgraph <setter> {
15 [shape=box label="Enter function setter"];
16 [shape=box label="Enter block"];
17 [shape=box label="Const: Int(1)"];
18 [shape=box label="Assignmenet: F|/x2|"];
19 [shape=box label="Exit block"];
20 [shape=box label="Exit function setter"];
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
}
subgraph val_x2 {
21 [shape=box label="Enter property"];
22 [shape=box label="Const: Int(1)"];
23 [shape=box label="Exit property"];
21 -> {22};
22 -> {23};
}
subgraph <anonymous> {
24 [shape=box label="Enter init block"];
25 [shape=box label="Enter block"];
26 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
27 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
28 [shape=box label="Stub[DEAD]"];
29 [shape=box label="Const: Int(1)[DEAD]"];
30 [shape=box label="Exit block[DEAD]"];
31 [shape=box label="Exit init block[DEAD]"];
32 [shape=box label="Enter function anonymousFunction"];
33 [shape=box label="Enter block"];
34 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
35 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
36 [shape=box label="Stub[DEAD]"];
37 [shape=box label="Exit block[DEAD]"];
38 [shape=box label="Exit function anonymousFunction[DEAD]"];
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {31 28} [style=dotted];
28 -> {29} [style=dotted];
29 -> {30} [style=dotted];
30 -> {31} [style=dotted];
32 -> {33};
33 -> {34};
34 -> {35};
35 -> {38 36} [style=dotted];
36 -> {37} [style=dotted];
37 -> {38} [style=dotted];
}
subgraph foo {
39 [shape=box label="Enter function foo"];
40 [shape=box label="Enter block"];
41 [shape=box label="Const: Int(1)"];
42 [shape=box label="Const: Int(1)"];
43 [shape=box label="Function call: Int(1).R|kotlin/Int.plus|(Int(1))"];
44 [shape=box label="Variable declaration: lval c: R|kotlin/Int|"];
45 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
46 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
47 [shape=box label="Stub[DEAD]"];
48 [shape=box label="Exit block[DEAD]"];
49 [shape=box label="Exit function foo[DEAD]"];
39 -> {40};
40 -> {41};
41 -> {42};
42 -> {43};
43 -> {44};
44 -> {45};
45 -> {46};
46 -> {49 47} [style=dotted];
47 -> {48} [style=dotted];
48 -> {49} [style=dotted];
}
subgraph <getter> {
50 [shape=box label="Enter init block"];
51 [shape=box label="Enter block"];
52 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
53 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
54 [shape=box label="Stub[DEAD]"];
55 [shape=box label="Exit block[DEAD]"];
56 [shape=box label="Exit init block[DEAD]"];
57 [shape=box label="Enter function getter"];
58 [shape=box label="Enter block"];
59 [shape=box label="Exit block"];
60 [shape=box label="Exit function getter"];
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {56 54} [style=dotted];
54 -> {55} [style=dotted];
55 -> {56} [style=dotted];
57 -> {58};
58 -> {59};
59 -> {60};
}
subgraph val_x3 {
61 [shape=box label="Enter property"];
62 [shape=box label="Function call: R|/run|(<L> = run@fun <anonymous>(): R|kotlin/Unit| {
local final fun foo(): R|kotlin/Unit| {
lval c: R|kotlin/Int| = Int(1).R|kotlin/Int.plus|(Int(1))
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
local final class LocalClass : R|kotlin/Any| {
public constructor(): R|LocalClass| {
super<R|kotlin/Any|>()
}
init {
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
Int(1)
}
}
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
)"];
63 [shape=box label="Exit property"];
61 -> {62};
62 -> {63};
}
subgraph val_x4 {
64 [shape=box label="Enter property"];
65 [shape=box label="Try expression enter"];
66 [shape=box label="Try main block enter"];
67 [shape=box label="Enter block"];
68 [shape=box label="Const: Int(1)"];
69 [shape=box label="Exit block"];
70 [shape=box label="Try main block exit"];
71 [shape=box label="Enter finally"];
72 [shape=box label="Enter block"];
73 [shape=box label="Const: Int(0)"];
74 [shape=box label="Exit block"];
75 [shape=box label="Exit finally"];
76 [shape=box label="Catch enter"];
77 [shape=box label="Enter block"];
78 [shape=box label="Const: Int(2)"];
79 [shape=box label="Exit block"];
80 [shape=box label="Catch exit"];
81 [shape=box label="Try expression exit"];
82 [shape=box label="Exit property"];
64 -> {65};
65 -> {66};
66 -> {82 76 71 67};
67 -> {68};
68 -> {69};
69 -> {70};
70 -> {81};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {75};
75 -> {81};
76 -> {82 77};
77 -> {78};
78 -> {79};
79 -> {80};
80 -> {81};
81 -> {82};
}
}
@@ -1,113 +0,0 @@
0: Enter function "run" -> 1
1: Enter block -> 2 | <- 0
2: Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|() -> 3 | <- 1
3: Exit block -> 4 | <- 2
4: Exit function "run" -> | <- 3
0: Enter property -> 1
1: Const: Int(1) -> 2 | <- 0
2: Exit property -> | <- 1
0: Enter function "getter" -> 1
1: Enter block -> 2 | <- 0
2: Const: Int(1) -> 3 | <- 1
3: Jump: ^ Int(1) -> 4[DEAD], 6[DEAD] | <- 2
4: Stub[DEAD] -> 5 | <- 3
5: Exit block[DEAD] -> 6 | <- 4
6: Exit function "getter"[DEAD] -> | <- 3, 5
0: Enter function "setter" -> 1
1: Enter block -> 2 | <- 0
2: Const: Int(1) -> 3 | <- 1
3: Assignmenet: F|/x2| -> 4 | <- 2
4: Exit block -> 5 | <- 3
5: Exit function "setter" -> | <- 4
0: Enter property -> 1
1: Const: Int(1) -> 2 | <- 0
2: Exit property -> | <- 1
0: Enter init block -> 1
1: Enter block -> 2 | <- 0
2: Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 3 | <- 1
3: Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 4[DEAD], 7[DEAD] | <- 2
4: Stub[DEAD] -> 5 | <- 3
5: Const: Int(1)[DEAD] -> 6 | <- 4
6: Exit block[DEAD] -> 7 | <- 5
7: Exit init block[DEAD] -> | <- 3, 6
8: Enter function "anonymousFunction" -> 9
9: Enter block -> 10 | <- 8
10: Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 11 | <- 9
11: Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 12[DEAD], 14[DEAD] | <- 10
12: Stub[DEAD] -> 13 | <- 11
13: Exit block[DEAD] -> 14 | <- 12
14: Exit function "anonymousFunction"[DEAD] -> | <- 11, 13
0: Enter function "foo" -> 1
1: Enter block -> 2 | <- 0
2: Const: Int(1) -> 3 | <- 1
3: Const: Int(1) -> 4 | <- 2
4: Function call: Int(1).R|kotlin/Int.plus|(Int(1)) -> 5 | <- 3
5: Variable declaration: lval c: R|kotlin/Int| -> 6 | <- 4
6: Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 7 | <- 5
7: Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 8[DEAD], 10[DEAD] | <- 6
8: Stub[DEAD] -> 9 | <- 7
9: Exit block[DEAD] -> 10 | <- 8
10: Exit function "foo"[DEAD] -> | <- 7, 9
0: Enter init block -> 1
1: Enter block -> 2 | <- 0
2: Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 3 | <- 1
3: Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#() -> 4[DEAD], 6[DEAD] | <- 2
4: Stub[DEAD] -> 5 | <- 3
5: Exit block[DEAD] -> 6 | <- 4
6: Exit init block[DEAD] -> | <- 3, 5
7: Enter function "getter" -> 8
8: Enter block -> 9 | <- 7
9: Exit block -> 10 | <- 8
10: Exit function "getter" -> | <- 9
0: Enter property -> 1
1: Function call: R|/run|(<L> = run@fun <anonymous>(): R|kotlin/Unit| {
local final fun foo(): R|kotlin/Unit| {
lval c: R|kotlin/Int| = Int(1).R|kotlin/Int.plus|(Int(1))
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
local final class LocalClass : R|kotlin/Any| {
public constructor(): R|LocalClass| {
super<R|kotlin/Any|>()
}
init {
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
Int(1)
}
}
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
) -> 2 | <- 0
2: Exit property -> | <- 1
0: Enter property -> 1
1: Try expression enter -> 2 | <- 0
2: Try main block enter -> 3, 7, 12, 18 | <- 1
3: Enter block -> 4 | <- 2
4: Const: Int(1) -> 5 | <- 3
5: Exit block -> 6 | <- 4
6: Try main block exit -> 17 | <- 5
7: Enter finally -> 8 | <- 2
8: Enter block -> 9 | <- 7
9: Const: Int(0) -> 10 | <- 8
10: Exit block -> 11 | <- 9
11: Exit finally -> 17 | <- 10
12: Catch enter -> 13, 18 | <- 2
13: Enter block -> 14 | <- 12
14: Const: Int(2) -> 15 | <- 13
15: Exit block -> 16 | <- 14
16: Catch exit -> 17 | <- 15
17: Try expression exit -> 18 | <- 6, 11, 16
18: Exit property -> | <- 2, 12, 17
@@ -0,0 +1,227 @@
digraph propertiesAndInitBlocks_kt {
subgraph run {
0 [shape=box label="Enter function run"];
1 [shape=box label="Enter block"];
2 [shape=box label="Function call: R|<local>/block|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()"];
3 [shape=box label="Exit block"];
4 [shape=box label="Exit function run"];
0 -> {1};
1 -> {2};
2 -> {3};
3 -> {4};
}
subgraph val_x1 {
5 [shape=box label="Enter property"];
6 [shape=box label="Const: Int(1)"];
7 [shape=box label="Exit property"];
5 -> {6};
6 -> {7};
}
subgraph <getter> {
8 [shape=box label="Enter function getter"];
9 [shape=box label="Enter block"];
10 [shape=box label="Const: Int(1)"];
11 [shape=box label="Jump: ^ Int(1)"];
12 [shape=box label="Stub[DEAD]"];
13 [shape=box label="Exit block[DEAD]"];
14 [shape=box label="Exit function getter[DEAD]"];
8 -> {9};
9 -> {10};
10 -> {11};
11 -> {14 12} [style=dotted];
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
}
subgraph <setter> {
15 [shape=box label="Enter function setter"];
16 [shape=box label="Enter block"];
17 [shape=box label="Const: Int(1)"];
18 [shape=box label="Assignmenet: F|/x2|"];
19 [shape=box label="Exit block"];
20 [shape=box label="Exit function setter"];
15 -> {16};
16 -> {17};
17 -> {18};
18 -> {19};
19 -> {20};
}
subgraph val_x2 {
21 [shape=box label="Enter property"];
22 [shape=box label="Const: Int(1)"];
23 [shape=box label="Exit property"];
21 -> {22};
22 -> {23};
}
subgraph foo {
24 [shape=box label="Enter function foo"];
25 [shape=box label="Enter block"];
26 [shape=box label="Const: Int(1)"];
27 [shape=box label="Const: Int(1)"];
28 [shape=box label="Function call: Int(1).R|kotlin/Int.plus|(Int(1))"];
29 [shape=box label="Variable declaration: lval c: R|kotlin/Int|"];
30 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
31 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
32 [shape=box label="Stub[DEAD]"];
33 [shape=box label="Exit block[DEAD]"];
34 [shape=box label="Exit function foo[DEAD]"];
24 -> {25};
25 -> {26};
26 -> {27};
27 -> {28};
28 -> {29};
29 -> {30};
30 -> {31};
31 -> {34 32} [style=dotted];
32 -> {33} [style=dotted];
33 -> {34} [style=dotted];
}
subgraph <init> {
35 [shape=box label="Enter function <init>"];
36 [shape=box label="Exit function <init>"];
35 -> {36};
}
subgraph <getter> {
37 [shape=box label="Enter init block"];
38 [shape=box label="Enter block"];
39 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
40 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
41 [shape=box label="Stub[DEAD]"];
42 [shape=box label="Exit block[DEAD]"];
43 [shape=box label="Exit init block[DEAD]"];
44 [shape=box label="Enter function getter"];
45 [shape=box label="Enter block"];
46 [shape=box label="Exit block"];
47 [shape=box label="Exit function getter"];
37 -> {38};
38 -> {39};
39 -> {40};
40 -> {43 41} [style=dotted];
41 -> {42} [style=dotted];
42 -> {43} [style=dotted];
44 -> {45};
45 -> {46};
46 -> {47};
}
subgraph <init> {
48 [shape=box label="Enter function <init>"];
49 [shape=box label="Exit function <init>"];
48 -> {49};
}
subgraph val_x3 {
50 [shape=box label="Enter init block"];
51 [shape=box label="Enter block"];
52 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
53 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
54 [shape=box label="Stub[DEAD]"];
55 [shape=box label="Const: Int(1)[DEAD]"];
56 [shape=box label="Exit block[DEAD]"];
57 [shape=box label="Exit init block[DEAD]"];
58 [shape=box label="Enter property"];
59 [shape=box label="Enter function anonymousFunction"];
60 [shape=box label="Enter block"];
61 [shape=box label="Function call: <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
62 [shape=box label="Throw: throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()"];
63 [shape=box label="Stub[DEAD]"];
64 [shape=box label="Exit block[DEAD]"];
65 [shape=box label="Exit function anonymousFunction[DEAD]"];
66 [shape=box label="Function call: R|/run|(<L> = run@fun <anonymous>(): R|kotlin/Unit| <kind=EXACTLY_ONCE> {
local final fun foo(): R|kotlin/Unit| {
lval c: R|kotlin/Int| = Int(1).R|kotlin/Int.plus|(Int(1))
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
local final class LocalClass : R|kotlin/Any| {
public constructor(): R|LocalClass| {
super<R|kotlin/Any|>()
}
init {
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
Int(1)
}
}
throw <Ambiguity: Exception, [java/lang/Exception.Exception, java/lang/Exception.Exception]>#()
}
)[DEAD]"];
67 [shape=box label="Exit property[DEAD]"];
50 -> {51};
51 -> {52};
52 -> {53};
53 -> {57 54} [style=dotted];
54 -> {55} [style=dotted];
55 -> {56} [style=dotted];
56 -> {57} [style=dotted];
58 -> {59};
59 -> {60};
60 -> {61};
61 -> {62};
62 -> {65 63} [style=dotted];
63 -> {64} [style=dotted];
64 -> {65} [style=dotted];
65 -> {66} [style=dotted];
66 -> {67} [style=dotted];
}
subgraph val_x4 {
68 [shape=box label="Enter property"];
69 [shape=box label="Try expression enter"];
70 [shape=box label="Try main block enter"];
71 [shape=box label="Enter block"];
72 [shape=box label="Const: Int(1)"];
73 [shape=box label="Exit block"];
74 [shape=box label="Try main block exit"];
75 [shape=box label="Enter finally"];
76 [shape=box label="Enter block"];
77 [shape=box label="Const: Int(0)"];
78 [shape=box label="Exit block"];
79 [shape=box label="Exit finally"];
80 [shape=box label="Catch enter"];
81 [shape=box label="Enter block"];
82 [shape=box label="Const: Int(2)"];
83 [shape=box label="Exit block"];
84 [shape=box label="Catch exit"];
85 [shape=box label="Try expression exit"];
86 [shape=box label="Exit property"];
68 -> {69};
69 -> {70};
70 -> {86 80 75 71};
71 -> {72};
72 -> {73};
73 -> {74};
74 -> {85};
75 -> {76};
76 -> {77};
77 -> {78};
78 -> {79};
79 -> {85};
80 -> {86 81};
81 -> {82};
82 -> {83};
83 -> {84};
84 -> {85};
85 -> {86};
}
}
@@ -1,17 +0,0 @@
0: Enter function "foo" -> 1
1: Enter block -> 2 | <- 0
2: Exit block -> 3 | <- 1
3: Exit function "foo" -> | <- 2
0: Enter function "test" -> 1
1: Enter block -> 2 | <- 0
2: Const: Int(1) -> 3 | <- 1
3: Variable declaration: lval x: R|kotlin/Int| -> 4 | <- 2
4: Access variable R|<local>/x| -> 5 | <- 3
5: Const: Int(1) -> 6 | <- 4
6: Function call: R|<local>/x|.R|kotlin/Int.plus|(Int(1)) -> 7 | <- 5
7: Variable declaration: lval y: R|kotlin/Int| -> 8 | <- 6
8: Function call: R|/foo|() -> 9 | <- 7
9: Exit block -> 10 | <- 8
10: Exit function "test" -> | <- 9
@@ -1,112 +0,0 @@
0: Enter function "test_1" -> 1
1: Enter block -> 2 | <- 0
2: Try expression enter -> 3 | <- 1
3: Try main block enter -> 4, 9, 15, 23 | <- 2
4: Enter block -> 5 | <- 3
5: Const: Int(1) -> 6 | <- 4
6: Variable declaration: lval x: R|kotlin/Int| -> 7 | <- 5
7: Exit block -> 8 | <- 6
8: Try main block exit -> 21 | <- 7
9: Catch enter -> 10, 23 | <- 3
10: Enter block -> 11 | <- 9
11: Const: Int(3) -> 12 | <- 10
12: Variable declaration: lval z: R|kotlin/Int| -> 13 | <- 11
13: Exit block -> 14 | <- 12
14: Catch exit -> 21 | <- 13
15: Catch enter -> 16, 23 | <- 3
16: Enter block -> 17 | <- 15
17: Const: Int(2) -> 18 | <- 16
18: Variable declaration: lval y: R|kotlin/Int| -> 19 | <- 17
19: Exit block -> 20 | <- 18
20: Catch exit -> 21 | <- 19
21: Try expression exit -> 22 | <- 8, 14, 20
22: Exit block -> 23 | <- 21
23: Exit function "test_1" -> | <- 3, 9, 15, 22
0: Enter function "test_2" -> 1
1: Enter block -> 2 | <- 0
2: Try expression enter -> 3 | <- 1
3: Try main block enter -> 4, 8, 16 | <- 2
4: Enter block -> 5 | <- 3
5: Const: Int(1) -> 6 | <- 4
6: Exit block -> 7 | <- 5
7: Try main block exit -> 13 | <- 6
8: Catch enter -> 9, 16 | <- 3
9: Enter block -> 10 | <- 8
10: Const: Int(2) -> 11 | <- 9
11: Exit block -> 12 | <- 10
12: Catch exit -> 13 | <- 11
13: Try expression exit -> 14 | <- 7, 12
14: Variable declaration: lval x: R|kotlin/Int| -> 15 | <- 13
15: Exit block -> 16 | <- 14
16: Exit function "test_2" -> | <- 3, 8, 15
0: Enter function "test_3" -> 1
1: Enter block -> 2 | <- 0
2: Enter while loop -> 3 | <- 1
3: Enter loop condition -> 4 | <- 2, 54, 62
4: Const: Boolean(true) -> 5 | <- 3
5: Exit loop condition -> 6, 63 | <- 4
6: Enter loop block -> 7 | <- 5
7: Enter block -> 8 | <- 6
8: Try expression enter -> 9 | <- 7
9: Try main block enter -> 10, 46, 52, 67 | <- 8
10: Enter block -> 11 | <- 9
11: Enter when -> 12 | <- 10
12: Enter when branch condition -> 13 | <- 11
13: Access variable R|<local>/b| -> 14 | <- 12
14: Exit when branch condition -> 15, 20 | <- 13
15: Enter block -> 16 | <- 14
16: Jump: ^test_3 Unit -> 17[DEAD], 67 | <- 15
17: Stub[DEAD] -> 18 | <- 16
18: Exit block[DEAD] -> 19 | <- 17
19: Exit when branch result[DEAD] -> 25 | <- 18
20: Enter when branch condition "else" -> 21 | <- 14
21: Exit when branch condition -> 22 | <- 20
22: Enter block -> 23 | <- 21
23: Exit block -> 24 | <- 22
24: Exit when branch result -> 25 | <- 23
25: Exit when -> 26 | <- 19[DEAD], 24
26: Const: Int(1) -> 27 | <- 25
27: Variable declaration: lval x: R|kotlin/Int| -> 28 | <- 26
28: Enter when -> 29 | <- 27
29: Enter when branch condition -> 30 | <- 28
30: Access variable R|<local>/b| -> 31 | <- 29
31: Function call: R|<local>/b|.R|kotlin/Boolean.not|() -> 32 | <- 30
32: Exit when branch condition -> 33, 38 | <- 31
33: Enter block -> 34 | <- 32
34: Jump: break@@@[Boolean(true)] -> 35[DEAD], 63 | <- 33
35: Stub[DEAD] -> 36 | <- 34
36: Exit block[DEAD] -> 37 | <- 35
37: Exit when branch result[DEAD] -> 43 | <- 36
38: Enter when branch condition "else" -> 39 | <- 32
39: Exit when branch condition -> 40 | <- 38
40: Enter block -> 41 | <- 39
41: Exit block -> 42 | <- 40
42: Exit when branch result -> 43 | <- 41
43: Exit when -> 44 | <- 37[DEAD], 42
44: Exit block -> 45 | <- 43
45: Try main block exit -> 58 | <- 44
46: Catch enter -> 47, 67 | <- 9
47: Enter block -> 48 | <- 46
48: Jump: break@@@[Boolean(true)] -> 49[DEAD], 63 | <- 47
49: Stub[DEAD] -> 50 | <- 48
50: Exit block[DEAD] -> 51 | <- 49
51: Catch exit[DEAD] -> 58 | <- 50
52: Catch enter -> 53, 67 | <- 9
53: Enter block -> 54 | <- 52
54: Jump: continue@@@[Boolean(true)] -> 3, 55[DEAD] | <- 53
55: Stub[DEAD] -> 56 | <- 54
56: Exit block[DEAD] -> 57 | <- 55
57: Catch exit[DEAD] -> 58 | <- 56
58: Try expression exit -> 59 | <- 45, 51[DEAD], 57[DEAD]
59: Const: Int(2) -> 60 | <- 58
60: Variable declaration: lval y: R|kotlin/Int| -> 61 | <- 59
61: Exit block -> 62 | <- 60
62: Exit loop block -> 3 | <- 61
63: Exit whileloop -> 64 | <- 5, 34, 48
64: Const: Int(3) -> 65 | <- 63
65: Variable declaration: lval z: R|kotlin/Int| -> 66 | <- 64
66: Exit block -> 67 | <- 65
67: Exit function "test_3" -> | <- 9, 16, 46, 52, 66
-71
View File
@@ -1,71 +0,0 @@
0: Enter function "test_1" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Access variable R|<local>/x| -> 5 | <- 3
5: Const: Int(1) -> 6 | <- 4
6: Operator == -> 7 | <- 5
7: Exit when branch condition -> 8, 12 | <- 6
8: Enter block -> 9 | <- 7
9: Const: Int(10) -> 10 | <- 8
10: Exit block -> 11 | <- 9
11: Exit when branch result -> 41 | <- 10
12: Enter when branch condition -> 13 | <- 7
13: Access variable R|<local>/x| -> 14 | <- 12
14: Const: Int(2) -> 15 | <- 13
15: Function call: R|<local>/x|.R|kotlin/Int.rem|(Int(2)) -> 16 | <- 14
16: Const: Int(0) -> 17 | <- 15
17: Operator == -> 18 | <- 16
18: Exit when branch condition -> 19, 23 | <- 17
19: Enter block -> 20 | <- 18
20: Const: Int(20) -> 21 | <- 19
21: Exit block -> 22 | <- 20
22: Exit when branch result -> 41 | <- 21
23: Enter when branch condition -> 24 | <- 18
24: Const: Int(1) -> 25 | <- 23
25: Const: Int(1) -> 26 | <- 24
26: Function call: Int(1).R|kotlin/Int.minus|(Int(1)) -> 27 | <- 25
27: Const: Int(0) -> 28 | <- 26
28: Operator == -> 29 | <- 27
29: Exit when branch condition -> 30, 35 | <- 28
30: Enter block -> 31 | <- 29
31: Jump: ^test_1 Unit -> 32[DEAD], 44 | <- 30
32: Stub[DEAD] -> 33 | <- 31
33: Exit block[DEAD] -> 34 | <- 32
34: Exit when branch result[DEAD] -> 41 | <- 33
35: Enter when branch condition "else" -> 36 | <- 29
36: Exit when branch condition -> 37 | <- 35
37: Enter block -> 38 | <- 36
38: Const: Int(5) -> 39 | <- 37
39: Exit block -> 40 | <- 38
40: Exit when branch result -> 41 | <- 39
41: Exit when -> 42 | <- 11, 22, 34[DEAD], 40
42: Variable declaration: lval y: R|kotlin/Int| -> 43 | <- 41
43: Exit block -> 44 | <- 42
44: Exit function "test_1" -> | <- 31, 43
0: Enter function "test_2" -> 1
1: Enter block -> 2 | <- 0
2: Enter when -> 3 | <- 1
3: Enter when branch condition -> 4 | <- 2
4: Enter && -> 5 | <- 3
5: Access variable R|<local>/x| -> 6 | <- 4
6: Type operator: "x is A" -> 7, 9 | <- 5
7: Access variable R|<local>/x| -> 8 | <- 6
8: Type operator: "x is B" -> 9 | <- 7
9: Exit && -> 10 | <- 6, 8
10: Exit when branch condition -> 11, 16 | <- 9
11: Enter block -> 12 | <- 10
12: Access variable R|<local>/x| -> 13 | <- 11
13: Type operator: "x is A" -> 14 | <- 12
14: Exit block -> 15 | <- 13
15: Exit when branch result -> 21 | <- 14
16: Enter when branch condition "else" -> 17 | <- 10
17: Exit when branch condition -> 18 | <- 16
18: Enter block -> 19 | <- 17
19: Exit block -> 20 | <- 18
20: Exit when branch result -> 21 | <- 19
21: Exit when -> 22 | <- 15, 20
22: Exit block -> 23 | <- 21
23: Exit function "test_2" -> | <- 22
@@ -31,7 +31,7 @@ abstract class AbstractFirCfgBuildingTest : AbstractFirResolveTestCase() {
firFiles.first().accept(FirControlFlowGraphRenderVisitor(simpleBuilder, dotBuilder), null)
val dotCfgDump = dotBuilder.toString()
val dotExpectedPath = path.replace(".kt", ".cfg.dot")
val dotExpectedPath = path.replace(".kt", ".dot")
KotlinTestUtils.assertEqualsToFile(File(dotExpectedPath), dotCfgDump)
}