Skip to content

Commit 8558d42

Browse files
jgardn3rcirras
authored andcommitted
Improve modeling of finally-except nesting in ControlFlowGraphs
1 parent 2236788 commit 8558d42

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

delphi-frontend/src/main/java/au/com/integradev/delphi/cfg/ControlFlowGraphVisitor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@ public ControlFlowGraphBuilder visit(TryStatementNode node, ControlFlowGraphBuil
524524

525525
private ControlFlowGraphBuilder buildTryFinally(
526526
TryStatementNode node, ControlFlowGraphBuilder builder) {
527+
// to ensure after a `finally` exceptional paths still exist
528+
handleExceptionalPaths(builder);
529+
527530
builder.addBlockBeforeCurrent();
528531
// Finally
529532
FinallyBlockNode finallyNode = node.getFinallyBlock();

delphi-frontend/src/test/java/au/com/integradev/delphi/cfg/ControlFlowGraphTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,10 +1142,12 @@ void testNestedTryFinallyExcept() {
11421142
"procedure Baz; begin end")),
11431143
"try try Foo finally Bar end except on E: Exception do Baz end;",
11441144
checker(
1145-
block(element(TryStatementNode.class)).succeedsTo(4),
1146-
block(element(TryStatementNode.class)).succeedsTo(3),
1147-
block(element(NameReferenceNode.class, "Foo")).succeedsToWithExceptions(2, 2),
1148-
block(element(NameReferenceNode.class, "Bar")).succeedsToWithExceptions(0, 0, 1),
1145+
block(element(TryStatementNode.class)).succeedsTo(6),
1146+
block(element(TryStatementNode.class)).succeedsTo(5),
1147+
block(element(NameReferenceNode.class, "Foo")).succeedsToWithExceptions(4, 4),
1148+
block(element(NameReferenceNode.class, "Bar")).succeedsToWithExceptions(3, 0, 1),
1149+
block().succeedsToWithExit(2, 0),
1150+
block().succeedsToWithExceptions(0, 0, 1),
11491151
block(element(NameDeclarationNode.class, "E"), element(NameReferenceNode.class, "Baz"))
11501152
.succeedsTo(0)));
11511153
}

0 commit comments

Comments
 (0)