@@ -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