Skip to content

Commit 6d39523

Browse files
committed
Make BraceBlockTree extend StmtSequenceTree
1 parent a46f454 commit 6d39523

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ module CfgScope {
7575

7676
private class BraceBlockScope extends Range_, BraceBlock {
7777
final override predicate entry(AstNode first) {
78-
first(this.(Trees::BraceBlockTree).getFirstChildNode(), first)
78+
first(this.(Trees::BraceBlockTree).getBodyChild(0, _), first)
7979
}
8080

8181
final override predicate exit(AstNode last, Completion c) {
82-
last(this.(Trees::BraceBlockTree).getLastChildNode(), last, c)
82+
last(this.(Trees::BraceBlockTree).getLastBodyChild(), last, c)
8383
}
8484
}
8585
}
@@ -525,11 +525,24 @@ module Trees {
525525

526526
private class BooleanLiteralTree extends LeafTree, BooleanLiteral { }
527527

528-
class BraceBlockTree extends ScopeTree, BraceBlock {
529-
final override ControlFlowTree getChildNode(int i) {
530-
result = this.getParameter(i)
528+
class BraceBlockTree extends StmtSequenceTree, BraceBlock {
529+
final override predicate propagatesAbnormal(AstNode child) { none() }
530+
531+
final override AstNode getBodyChild(int i, boolean rescuable) {
532+
result = this.getParameter(i) and rescuable = false
531533
or
532-
result = this.getStmt(i - this.getNumberOfParameters())
534+
result = StmtSequenceTree.super.getBodyChild(i - this.getNumberOfParameters(), rescuable)
535+
}
536+
537+
override predicate first(AstNode first) { first = this }
538+
539+
override predicate succ(AstNode pred, AstNode succ, Completion c) {
540+
// Normal left-to-right evaluation in the body
541+
exists(int i |
542+
last(this.getBodyChild(i, _), pred, c) and
543+
first(this.getBodyChild(i + 1, _), succ) and
544+
c instanceof NormalCompletion
545+
)
533546
}
534547
}
535548

@@ -1140,10 +1153,7 @@ module Trees {
11401153
private class SplatParameterTree extends NonDefaultValueParameterTree, SplatParameter { }
11411154

11421155
class StmtSequenceTree extends PostOrderTree, StmtSequence {
1143-
StmtSequenceTree() {
1144-
not this instanceof BraceBlock and
1145-
not this instanceof EndBlock
1146-
}
1156+
StmtSequenceTree() { not this instanceof EndBlock }
11471157

11481158
override predicate propagatesAbnormal(AstNode child) { child = this.getAStmt() }
11491159

0 commit comments

Comments
 (0)