@@ -221,7 +221,7 @@ function cfgWhile(whileLoop: RWhileLoop<ParentInformation>, condition: ControlFl
221
221
222
222
function cfgFor ( forLoop : RForLoop < ParentInformation > , variable : ControlFlowInformation , vector : ControlFlowInformation , body : ControlFlowInformation ) : ControlFlowInformation {
223
223
const graph = variable . graph ;
224
- graph . addVertex ( { id : forLoop . info . id , type : identifyMayStatementType ( forLoop ) , exit : [ forLoop . info . id + '-exit' ] } ) ;
224
+ graph . addVertex ( { id : forLoop . info . id , type : identifyMayStatementType ( forLoop ) , exit : [ forLoop . info . id + '-exit' ] , mid : [ forLoop . info . id + '-head' ] } ) ;
225
225
226
226
graph . merge ( vector . graph ) ;
227
227
graph . merge ( body . graph ) ;
@@ -236,10 +236,13 @@ function cfgFor(forLoop: RForLoop<ParentInformation>, variable: ControlFlowInfor
236
236
}
237
237
}
238
238
239
+ graph . addVertex ( { id : forLoop . info . id + '-head' , type : CfgVertexType . MidMarker , root : forLoop . info . id , kind : 'head' } ) ;
240
+
239
241
for ( const exit of variable . exitPoints ) {
240
- for ( const entry of body . entryPoints ) {
241
- graph . addEdge ( entry , exit , { label : CfgEdgeType . Cd , when : RTrue , caused : forLoop . info . id } ) ;
242
- }
242
+ graph . addEdge ( forLoop . info . id + '-head' , exit , { label : CfgEdgeType . Fd } ) ;
243
+ }
244
+ for ( const entry of body . entryPoints ) {
245
+ graph . addEdge ( entry , forLoop . info . id + '-head' , { label : CfgEdgeType . Cd , when : RTrue , caused : forLoop . info . id } ) ;
243
246
}
244
247
245
248
for ( const next of [ ...body . nexts , ...body . exitPoints ] ) {
0 commit comments