[FIR] Add kind for back edges in CFG
This commit is contained in:
@@ -260,7 +260,7 @@ digraph complex_kt {
|
||||
79 -> {68} [style=dotted];
|
||||
80 -> {68};
|
||||
81 -> {82};
|
||||
82 -> {58};
|
||||
82 -> {58} [color=green style=dashed];
|
||||
83 -> {84};
|
||||
84 -> {52};
|
||||
84 -> {85} [style=dotted];
|
||||
|
||||
@@ -191,7 +191,7 @@ digraph jumps_kt {
|
||||
63 -> {64} [style=dotted];
|
||||
64 -> {65} [style=dotted];
|
||||
65 -> {66} [style=dotted];
|
||||
66 -> {56} [style=dotted];
|
||||
66 -> {56} [color=green style=dotted];
|
||||
67 -> {68};
|
||||
68 -> {53};
|
||||
|
||||
@@ -241,7 +241,8 @@ digraph jumps_kt {
|
||||
80 -> {81} [style=dotted];
|
||||
81 -> {82} [style=dotted];
|
||||
82 -> {83} [style=dotted];
|
||||
83 -> {73 72} [style=dotted];
|
||||
83 -> {72} [style=dotted];
|
||||
83 -> {73} [color=green style=dotted];
|
||||
84 -> {85};
|
||||
85 -> {70};
|
||||
|
||||
@@ -307,14 +308,14 @@ digraph jumps_kt {
|
||||
99 -> {100 106};
|
||||
100 -> {101};
|
||||
101 -> {102};
|
||||
102 -> {88};
|
||||
102 -> {103} [style=dotted];
|
||||
102 -> {88} [color=green style=dashed];
|
||||
103 -> {104} [style=dotted];
|
||||
104 -> {105} [style=dotted];
|
||||
105 -> {96} [style=dotted];
|
||||
106 -> {96};
|
||||
107 -> {108};
|
||||
108 -> {90};
|
||||
108 -> {90} [color=green style=dashed];
|
||||
|
||||
subgraph cluster_30 {
|
||||
color=red
|
||||
@@ -346,8 +347,8 @@ digraph jumps_kt {
|
||||
115 -> {116};
|
||||
116 -> {113};
|
||||
117 -> {118 119};
|
||||
118 -> {117};
|
||||
118 -> {115} [color=green];
|
||||
118 -> {117} [color=green style=dashed];
|
||||
119 -> {118};
|
||||
119 -> {120} [style=dotted];
|
||||
120 -> {118} [style=dotted];
|
||||
|
||||
@@ -64,8 +64,8 @@ digraph lambdas_kt {
|
||||
17 -> {6};
|
||||
18 -> {6};
|
||||
19 -> {20 21};
|
||||
20 -> {19};
|
||||
20 -> {14} [color=green];
|
||||
20 -> {19} [color=green style=dashed];
|
||||
21 -> {22};
|
||||
22 -> {20};
|
||||
|
||||
@@ -166,8 +166,8 @@ digraph lambdas_kt {
|
||||
52 -> {53} [style=dotted];
|
||||
53 -> {48} [style=dotted];
|
||||
54 -> {55 56};
|
||||
55 -> {54};
|
||||
55 -> {50} [color=green];
|
||||
55 -> {54} [color=green style=dashed];
|
||||
56 -> {57};
|
||||
57 -> {48};
|
||||
57 -> {58} [style=dotted];
|
||||
@@ -203,8 +203,8 @@ digraph lambdas_kt {
|
||||
64 -> {65} [style=dotted];
|
||||
65 -> {60} [style=dotted];
|
||||
66 -> {67 68};
|
||||
67 -> {66};
|
||||
67 -> {62} [color=green];
|
||||
67 -> {66} [color=green style=dashed];
|
||||
68 -> {69};
|
||||
69 -> {60};
|
||||
69 -> {70} [style=dotted];
|
||||
|
||||
+4
-4
@@ -184,8 +184,8 @@ digraph localClassesWithImplicit_kt {
|
||||
31 -> {32} [style=dotted];
|
||||
32 -> {27} [style=dotted];
|
||||
33 -> {34 35};
|
||||
34 -> {33};
|
||||
34 -> {29} [color=green];
|
||||
34 -> {33} [color=green style=dashed];
|
||||
35 -> {36};
|
||||
36 -> {37};
|
||||
37 -> {39};
|
||||
@@ -217,8 +217,8 @@ digraph localClassesWithImplicit_kt {
|
||||
62 -> {63} [style=dotted];
|
||||
63 -> {58} [style=dotted];
|
||||
64 -> {65 66};
|
||||
65 -> {64};
|
||||
65 -> {60} [color=green];
|
||||
65 -> {64} [color=green style=dashed];
|
||||
66 -> {67};
|
||||
67 -> {68};
|
||||
68 -> {69};
|
||||
@@ -320,8 +320,8 @@ digraph localClassesWithImplicit_kt {
|
||||
86 -> {87} [style=dotted];
|
||||
87 -> {82} [style=dotted];
|
||||
88 -> {89 90};
|
||||
89 -> {88};
|
||||
89 -> {84} [color=green];
|
||||
89 -> {88} [color=green style=dashed];
|
||||
90 -> {91};
|
||||
91 -> {92};
|
||||
92 -> {94};
|
||||
@@ -379,8 +379,8 @@ digraph localClassesWithImplicit_kt {
|
||||
117 -> {118} [style=dotted];
|
||||
118 -> {113} [style=dotted];
|
||||
119 -> {120 121};
|
||||
120 -> {119};
|
||||
120 -> {115} [color=green];
|
||||
120 -> {119} [color=green style=dashed];
|
||||
121 -> {122};
|
||||
122 -> {123};
|
||||
123 -> {124};
|
||||
|
||||
+10
-9
@@ -46,7 +46,7 @@ digraph loops_kt {
|
||||
10 -> {11};
|
||||
11 -> {12};
|
||||
12 -> {13};
|
||||
13 -> {4};
|
||||
13 -> {4} [color=green style=dashed];
|
||||
14 -> {15};
|
||||
15 -> {1};
|
||||
|
||||
@@ -93,7 +93,8 @@ digraph loops_kt {
|
||||
26 -> {27};
|
||||
27 -> {28};
|
||||
28 -> {29};
|
||||
29 -> {20 19};
|
||||
29 -> {19};
|
||||
29 -> {20} [color=green style=dashed];
|
||||
30 -> {31};
|
||||
31 -> {17};
|
||||
|
||||
@@ -158,7 +159,7 @@ digraph loops_kt {
|
||||
51 -> {52};
|
||||
52 -> {53};
|
||||
53 -> {54};
|
||||
54 -> {41};
|
||||
54 -> {41} [color=green style=dashed];
|
||||
55 -> {56};
|
||||
56 -> {33};
|
||||
|
||||
@@ -201,7 +202,7 @@ digraph loops_kt {
|
||||
65 -> {66};
|
||||
66 -> {67};
|
||||
67 -> {68};
|
||||
68 -> {61};
|
||||
68 -> {61} [color=green style=dashed];
|
||||
69 -> {58} [style=dotted];
|
||||
|
||||
subgraph cluster_20 {
|
||||
@@ -275,7 +276,7 @@ digraph loops_kt {
|
||||
89 -> {80} [style=dotted];
|
||||
90 -> {80};
|
||||
91 -> {92};
|
||||
92 -> {74};
|
||||
92 -> {74} [color=green style=dashed];
|
||||
93 -> {71};
|
||||
|
||||
subgraph cluster_28 {
|
||||
@@ -317,7 +318,7 @@ digraph loops_kt {
|
||||
102 -> {103} [style=dotted];
|
||||
103 -> {104} [style=dotted];
|
||||
104 -> {105} [style=dotted];
|
||||
105 -> {98} [style=dotted];
|
||||
105 -> {98} [color=green style=dotted];
|
||||
106 -> {95};
|
||||
|
||||
subgraph cluster_33 {
|
||||
@@ -358,8 +359,8 @@ digraph loops_kt {
|
||||
115 -> {116};
|
||||
116 -> {117};
|
||||
117 -> {118};
|
||||
118 -> {111};
|
||||
118 -> {110} [style=dotted];
|
||||
118 -> {111} [color=green style=dashed];
|
||||
119 -> {108} [style=dotted];
|
||||
|
||||
subgraph cluster_38 {
|
||||
@@ -432,8 +433,8 @@ digraph loops_kt {
|
||||
139 -> {140};
|
||||
140 -> {141};
|
||||
141 -> {142};
|
||||
142 -> {124};
|
||||
142 -> {123} [style=dotted];
|
||||
142 -> {124} [color=green style=dashed];
|
||||
143 -> {121};
|
||||
|
||||
subgraph cluster_46 {
|
||||
@@ -475,7 +476,7 @@ digraph loops_kt {
|
||||
153 -> {154};
|
||||
154 -> {155};
|
||||
155 -> {147};
|
||||
155 -> {148} [style=dotted];
|
||||
155 -> {148} [color=green style=dotted];
|
||||
156 -> {145};
|
||||
|
||||
}
|
||||
|
||||
@@ -34,8 +34,8 @@ digraph postponedLambdas_kt {
|
||||
7 -> {8};
|
||||
8 -> {3};
|
||||
9 -> {10 11};
|
||||
10 -> {9};
|
||||
10 -> {6} [color=green];
|
||||
10 -> {9} [color=green style=dashed];
|
||||
11 -> {10};
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -177,8 +177,8 @@ digraph propertiesAndInitBlocks_kt {
|
||||
67 -> {64};
|
||||
20 -> {21 22};
|
||||
20 -> {26 35 38} [color=red];
|
||||
21 -> {20};
|
||||
21 -> {66} [color=green];
|
||||
21 -> {20} [color=green style=dashed];
|
||||
22 -> {23};
|
||||
23 -> {24};
|
||||
24 -> {64};
|
||||
|
||||
@@ -280,8 +280,8 @@ digraph tryCatch_kt {
|
||||
79 -> {80};
|
||||
80 -> {47};
|
||||
81 -> {82};
|
||||
82 -> {39};
|
||||
82 -> {83} [style=dotted];
|
||||
82 -> {39} [color=green style=dashed];
|
||||
83 -> {84} [style=dotted];
|
||||
84 -> {85} [style=dotted];
|
||||
85 -> {47} [style=dotted];
|
||||
@@ -294,7 +294,7 @@ digraph tryCatch_kt {
|
||||
91 -> {92};
|
||||
92 -> {93};
|
||||
93 -> {94};
|
||||
94 -> {41};
|
||||
94 -> {41} [color=green style=dashed];
|
||||
95 -> {96};
|
||||
96 -> {38};
|
||||
|
||||
|
||||
+2
-2
@@ -124,8 +124,8 @@ digraph boundSmartcastsInBranches_kt {
|
||||
36 -> {37};
|
||||
37 -> {38};
|
||||
38 -> {39};
|
||||
39 -> {17};
|
||||
39 -> {40} [style=dotted];
|
||||
39 -> {17} [color=green style=dashed];
|
||||
40 -> {41} [style=dotted];
|
||||
41 -> {42} [style=dotted];
|
||||
42 -> {29} [style=dotted];
|
||||
@@ -133,7 +133,7 @@ digraph boundSmartcastsInBranches_kt {
|
||||
44 -> {45};
|
||||
45 -> {46};
|
||||
46 -> {47};
|
||||
47 -> {19};
|
||||
47 -> {19} [color=green style=dashed];
|
||||
|
||||
subgraph cluster_12 {
|
||||
color=red
|
||||
|
||||
Vendored
+1
-1
@@ -91,6 +91,6 @@ digraph dataFlowInfoFromWhileCondition_kt {
|
||||
26 -> {27};
|
||||
27 -> {28};
|
||||
28 -> {29};
|
||||
29 -> {14};
|
||||
29 -> {14} [color=green style=dashed];
|
||||
|
||||
}
|
||||
|
||||
+7
-7
@@ -93,7 +93,7 @@ digraph endlessLoops_kt {
|
||||
25 -> {16} [style=dotted];
|
||||
26 -> {16};
|
||||
27 -> {28};
|
||||
28 -> {8};
|
||||
28 -> {8} [color=green style=dashed];
|
||||
29 -> {30};
|
||||
30 -> {5};
|
||||
|
||||
@@ -173,7 +173,7 @@ digraph endlessLoops_kt {
|
||||
52 -> {41} [style=dotted];
|
||||
53 -> {41};
|
||||
54 -> {55};
|
||||
55 -> {35};
|
||||
55 -> {35} [color=green style=dashed];
|
||||
56 -> {57};
|
||||
57 -> {32};
|
||||
|
||||
@@ -287,7 +287,7 @@ digraph endlessLoops_kt {
|
||||
91 -> {82} [style=dotted];
|
||||
92 -> {82};
|
||||
93 -> {94};
|
||||
94 -> {62};
|
||||
94 -> {62} [color=green style=dashed];
|
||||
95 -> {96};
|
||||
96 -> {59};
|
||||
|
||||
@@ -372,7 +372,7 @@ digraph endlessLoops_kt {
|
||||
120 -> {121} [style=dotted];
|
||||
121 -> {122} [style=dotted];
|
||||
122 -> {123} [style=dotted];
|
||||
123 -> {101} [style=dotted];
|
||||
123 -> {101} [color=green style=dotted];
|
||||
124 -> {125};
|
||||
125 -> {98};
|
||||
|
||||
@@ -451,8 +451,8 @@ digraph endlessLoops_kt {
|
||||
147 -> {148};
|
||||
148 -> {149};
|
||||
149 -> {150};
|
||||
150 -> {130};
|
||||
150 -> {129} [style=dotted];
|
||||
150 -> {130} [color=green style=dashed];
|
||||
151 -> {152};
|
||||
152 -> {127};
|
||||
|
||||
@@ -531,8 +531,8 @@ digraph endlessLoops_kt {
|
||||
174 -> {175};
|
||||
175 -> {176};
|
||||
176 -> {177};
|
||||
177 -> {157};
|
||||
177 -> {156} [style=dotted];
|
||||
177 -> {157} [color=green style=dashed];
|
||||
178 -> {179};
|
||||
179 -> {154};
|
||||
|
||||
@@ -577,8 +577,8 @@ digraph endlessLoops_kt {
|
||||
189 -> {190};
|
||||
190 -> {191};
|
||||
191 -> {192};
|
||||
192 -> {184};
|
||||
192 -> {183} [style=dotted];
|
||||
192 -> {184} [color=green style=dashed];
|
||||
193 -> {194} [style=dotted];
|
||||
194 -> {181} [style=dotted];
|
||||
|
||||
|
||||
+1
-1
@@ -250,7 +250,7 @@ digraph smartcastToNothing_kt {
|
||||
81 -> {70} [style=dotted];
|
||||
82 -> {70} [style=dotted];
|
||||
83 -> {84} [style=dotted];
|
||||
84 -> {56} [style=dotted];
|
||||
84 -> {56} [color=green style=dotted];
|
||||
85 -> {86 87};
|
||||
86 -> {88};
|
||||
87 -> {48} [style=dotted];
|
||||
|
||||
Vendored
+6
-6
@@ -59,8 +59,8 @@ digraph callsInPlace_kt {
|
||||
17 -> {18};
|
||||
18 -> {14};
|
||||
19 -> {20 21};
|
||||
20 -> {19};
|
||||
20 -> {17} [color=green];
|
||||
20 -> {19} [color=green style=dashed];
|
||||
21 -> {20};
|
||||
|
||||
subgraph cluster_4 {
|
||||
@@ -85,8 +85,8 @@ digraph callsInPlace_kt {
|
||||
26 -> {27};
|
||||
27 -> {23};
|
||||
28 -> {29 30};
|
||||
29 -> {28};
|
||||
29 -> {25} [color=green];
|
||||
29 -> {28} [color=green style=dashed];
|
||||
30 -> {29};
|
||||
|
||||
subgraph cluster_6 {
|
||||
@@ -203,12 +203,12 @@ digraph callsInPlace_kt {
|
||||
68 -> {69};
|
||||
69 -> {64};
|
||||
70 -> {71 72};
|
||||
71 -> {70};
|
||||
71 -> {66} [color=green];
|
||||
71 -> {70} [color=green style=dashed];
|
||||
72 -> {71};
|
||||
73 -> {74 75};
|
||||
74 -> {73};
|
||||
74 -> {68} [color=green];
|
||||
74 -> {73} [color=green style=dashed];
|
||||
75 -> {74};
|
||||
|
||||
subgraph cluster_14 {
|
||||
@@ -242,12 +242,12 @@ digraph callsInPlace_kt {
|
||||
81 -> {82};
|
||||
82 -> {77};
|
||||
83 -> {84 85};
|
||||
84 -> {83};
|
||||
84 -> {79} [color=green];
|
||||
84 -> {83} [color=green style=dashed];
|
||||
85 -> {84};
|
||||
86 -> {87 88};
|
||||
87 -> {86};
|
||||
87 -> {81} [color=green];
|
||||
87 -> {86} [color=green style=dashed];
|
||||
88 -> {87};
|
||||
|
||||
subgraph cluster_17 {
|
||||
|
||||
+2
-2
@@ -48,8 +48,8 @@ digraph atLeastOnce_kt {
|
||||
12 -> {13};
|
||||
13 -> {7};
|
||||
14 -> {16};
|
||||
15 -> {14};
|
||||
15 -> {10} [color=green];
|
||||
15 -> {14} [color=green style=dashed];
|
||||
16 -> {17};
|
||||
17 -> {15};
|
||||
|
||||
@@ -80,8 +80,8 @@ digraph atLeastOnce_kt {
|
||||
24 -> {25};
|
||||
25 -> {19};
|
||||
26 -> {28};
|
||||
27 -> {26};
|
||||
27 -> {22} [color=green];
|
||||
27 -> {26} [color=green style=dashed];
|
||||
28 -> {29};
|
||||
29 -> {27};
|
||||
|
||||
|
||||
+2
-2
@@ -48,8 +48,8 @@ digraph unknown_kt {
|
||||
12 -> {13};
|
||||
13 -> {7};
|
||||
14 -> {15 16};
|
||||
15 -> {14};
|
||||
15 -> {10} [color=green];
|
||||
15 -> {14} [color=green style=dashed];
|
||||
16 -> {17};
|
||||
17 -> {15};
|
||||
|
||||
@@ -80,8 +80,8 @@ digraph unknown_kt {
|
||||
24 -> {25};
|
||||
25 -> {19};
|
||||
26 -> {27 28};
|
||||
27 -> {26};
|
||||
27 -> {22} [color=green];
|
||||
27 -> {26} [color=green style=dashed];
|
||||
28 -> {29};
|
||||
29 -> {27};
|
||||
|
||||
|
||||
+1
-1
@@ -94,8 +94,8 @@ finally {
|
||||
23 -> {24} [style=dotted];
|
||||
24 -> {8} [style=dotted];
|
||||
25 -> {26 27};
|
||||
26 -> {25};
|
||||
26 -> {16} [color=green];
|
||||
26 -> {25} [color=green style=dashed];
|
||||
27 -> {26};
|
||||
|
||||
subgraph cluster_9 {
|
||||
|
||||
+7
-5
@@ -69,9 +69,11 @@ class ControlFlowGraph(val declaration: FirDeclaration?, val name: String, val k
|
||||
}
|
||||
}
|
||||
|
||||
enum class EdgeKind(val usedInDfa: Boolean) {
|
||||
Simple(usedInDfa = true),
|
||||
Dead(usedInDfa = false),
|
||||
Cfg(usedInDfa = false),
|
||||
Dfg(usedInDfa = true)
|
||||
enum class EdgeKind(val usedInDfa: Boolean, val isBack: Boolean) {
|
||||
Simple(usedInDfa = true, isBack = false),
|
||||
Dead(usedInDfa = false, isBack = false),
|
||||
Cfg(usedInDfa = false, isBack = false),
|
||||
Dfg(usedInDfa = true, isBack = false),
|
||||
Back(usedInDfa = false, isBack = true),
|
||||
DeadBack(usedInDfa = false, isBack = true)
|
||||
}
|
||||
|
||||
+24
-9
@@ -151,7 +151,7 @@ class ControlFlowGraphBuilder {
|
||||
val enterNode = functionEnterNodes.pop()
|
||||
@Suppress("NON_EXHAUSTIVE_WHEN")
|
||||
when (invocationKind) {
|
||||
InvocationKind.AT_LEAST_ONCE, InvocationKind.UNKNOWN -> addEdge(exitNode, enterNode, propagateDeadness = false)
|
||||
InvocationKind.AT_LEAST_ONCE, InvocationKind.UNKNOWN -> addBackEdge(exitNode, enterNode)
|
||||
}
|
||||
if (postponedExitNode != null) {
|
||||
CFGNode.addEdge(lastNodes.pop(), postponedExitNode, propagateDeadness = true, kind = EdgeKind.Cfg)
|
||||
@@ -399,7 +399,7 @@ class ControlFlowGraphBuilder {
|
||||
is FirBreakExpression -> loopExitNodes[jump.target.labeledElement]
|
||||
else -> throw IllegalArgumentException("Unknown jump type: ${jump.render()}")
|
||||
}
|
||||
addNodeWithJump(node, nextNode)
|
||||
addNodeWithJump(node, nextNode, isBack = jump is FirContinueExpression)
|
||||
return node
|
||||
}
|
||||
|
||||
@@ -502,7 +502,7 @@ class ControlFlowGraphBuilder {
|
||||
if (lastNodes.isNotEmpty) {
|
||||
val conditionEnterNode = lastNodes.pop()
|
||||
require(conditionEnterNode is LoopConditionEnterNode) { loop.render() }
|
||||
addEdge(loopBlockExitNode, conditionEnterNode, propagateDeadness = false)
|
||||
addBackEdge(loopBlockExitNode, conditionEnterNode)
|
||||
}
|
||||
val loopExitNode = loopExitNodes.pop()
|
||||
loopExitNode.updateDeadStatus()
|
||||
@@ -543,7 +543,7 @@ class ControlFlowGraphBuilder {
|
||||
addEdge(lastNodes.pop(), conditionExitNode)
|
||||
val blockEnterNode = lastNodes.pop()
|
||||
require(blockEnterNode is LoopBlockEnterNode)
|
||||
addEdge(conditionExitNode, blockEnterNode, propagateDeadness = false, isDead = conditionBooleanValue == false)
|
||||
addBackEdge(conditionExitNode, blockEnterNode, isDead = conditionBooleanValue == false)
|
||||
val loopExit = loopExitNodes.pop()
|
||||
addEdge(conditionExitNode, loopExit, propagateDeadness = false, isDead = conditionBooleanValue == true)
|
||||
loopExit.updateDeadStatus()
|
||||
@@ -903,13 +903,17 @@ class ControlFlowGraphBuilder {
|
||||
* it will be replaced after correct implementation of CFG for class initialization
|
||||
*/
|
||||
val exitNode: CFGNode<*> = exitNodes.top()
|
||||
addNodeWithJump(node, exitNode, preferredKind)
|
||||
addNodeWithJump(node, exitNode)
|
||||
}
|
||||
|
||||
private fun addNodeWithJump(node: CFGNode<*>, targetNode: CFGNode<*>?, preferredKind: EdgeKind = EdgeKind.Simple) {
|
||||
private fun addNodeWithJump(node: CFGNode<*>, targetNode: CFGNode<*>?, isBack: Boolean = false) {
|
||||
addEdge(lastNodes.pop(), node)
|
||||
if (targetNode != null) {
|
||||
addEdge(node, targetNode)
|
||||
if (isBack) {
|
||||
addBackEdge(node, targetNode)
|
||||
} else {
|
||||
addEdge(node, targetNode)
|
||||
}
|
||||
}
|
||||
val stub = createStubNode()
|
||||
addEdge(node, stub)
|
||||
@@ -933,12 +937,23 @@ class ControlFlowGraphBuilder {
|
||||
to: CFGNode<*>,
|
||||
propagateDeadness: Boolean = true,
|
||||
isDead: Boolean = false,
|
||||
preferredKind: EdgeKind = EdgeKind.Simple
|
||||
isBack: Boolean = false,
|
||||
preferredKind: EdgeKind = EdgeKind.Simple,
|
||||
) {
|
||||
val kind = if (isDead || from.isDead || to.isDead) EdgeKind.Dead else preferredKind
|
||||
val kind = if (isDead || from.isDead || to.isDead) {
|
||||
if (isBack) EdgeKind.DeadBack else EdgeKind.Dead
|
||||
} else preferredKind
|
||||
CFGNode.addEdge(from, to, kind, propagateDeadness)
|
||||
}
|
||||
|
||||
private fun addBackEdge(
|
||||
from: CFGNode<*>,
|
||||
to: CFGNode<*>,
|
||||
isDead: Boolean = false
|
||||
) {
|
||||
addEdge(from, to, propagateDeadness = false, isDead = isDead, isBack = true, preferredKind = EdgeKind.Back)
|
||||
}
|
||||
|
||||
private val FirFunction<*>.invocationKind: InvocationKind?
|
||||
get() = (this as? FirAnonymousFunction)?.invocationKind
|
||||
|
||||
|
||||
+2
@@ -30,6 +30,8 @@ class FirControlFlowGraphRenderVisitor(
|
||||
EdgeKind.Dead to "[style=dotted]",
|
||||
EdgeKind.Cfg to "[color=green]",
|
||||
EdgeKind.Dfg to "[color=red]",
|
||||
EdgeKind.Back to "[color=green style=dashed]",
|
||||
EdgeKind.DeadBack to "[color=green style=dotted]"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
|
||||
val toKind = to.incomingEdges.getValue(from)
|
||||
TestCase.assertEquals(fromKind, toKind)
|
||||
if (from.isDead || to.isDead) {
|
||||
KtUsefulTestCase.assertContainsElements(listOf(EdgeKind.Dead, EdgeKind.Cfg), toKind)
|
||||
KtUsefulTestCase.assertContainsElements(listOf(EdgeKind.Dead, EdgeKind.Cfg, EdgeKind.DeadBack, EdgeKind.Back), toKind)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user