11private import rust
22private import codeql.util.Boolean
3+ private import Completion
34
45newtype TLoopJumpType =
56 TContinueJump ( ) or
@@ -14,45 +15,43 @@ newtype TSuccessorType =
1415 TSuccessorSuccessor ( ) or
1516 TBooleanSuccessor ( Boolean b ) or
1617 TMatchSuccessor ( Boolean b ) or
17- TLoopSuccessor ( TLoopJumpType kind , TLabelType label ) or
18+ TLoopSuccessor ( TLoopJumpType kind , TLabelType label ) { exists ( TLoopCompletion ( kind , label ) ) } or
1819 TReturnSuccessor ( )
1920
2021/** The type of a control flow successor. */
21- abstract private class SuccessorTypeImpl extends TSuccessorType {
22+ abstract class SuccessorTypeImpl extends TSuccessorType {
2223 /** Gets a textual representation of successor type. */
2324 abstract string toString ( ) ;
2425}
2526
26- final class SuccessorType = SuccessorTypeImpl ;
27-
2827/** A normal control flow successor. */
29- final class NormalSuccessor extends SuccessorTypeImpl , TSuccessorSuccessor {
30- final override string toString ( ) { result = "successor" }
28+ class NormalSuccessorImpl extends SuccessorTypeImpl , TSuccessorSuccessor {
29+ override string toString ( ) { result = "successor" }
3130}
3231
3332/** A conditional control flow successor. */
34- abstract private class ConditionalSuccessor extends SuccessorTypeImpl {
33+ abstract class ConditionalSuccessorImpl extends SuccessorTypeImpl {
3534 boolean value ;
3635
3736 bindingset [ value]
38- ConditionalSuccessor ( ) { any ( ) }
37+ ConditionalSuccessorImpl ( ) { any ( ) }
3938
4039 /** Gets the Boolean value of this successor. */
41- final boolean getValue ( ) { result = value }
40+ boolean getValue ( ) { result = value }
4241}
4342
4443/** A Boolean control flow successor for a boolean conditon. */
45- final class BooleanSuccessor extends ConditionalSuccessor , TBooleanSuccessor {
46- BooleanSuccessor ( ) { this = TBooleanSuccessor ( value ) }
44+ class BooleanSuccessorImpl extends ConditionalSuccessorImpl , TBooleanSuccessor {
45+ BooleanSuccessorImpl ( ) { this = TBooleanSuccessor ( value ) }
4746
4847 override string toString ( ) { result = this .getValue ( ) .toString ( ) }
4948}
5049
5150/**
5251 * A control flow successor of a pattern match.
5352 */
54- final class MatchSuccessor extends ConditionalSuccessor , TMatchSuccessor {
55- MatchSuccessor ( ) { this = TMatchSuccessor ( value ) }
53+ class MatchSuccessorImpl extends ConditionalSuccessorImpl , TMatchSuccessor {
54+ MatchSuccessorImpl ( ) { this = TMatchSuccessor ( value ) }
5655
5756 override string toString ( ) {
5857 if this .getValue ( ) = true then result = "match" else result = "no-match"
@@ -62,20 +61,20 @@ final class MatchSuccessor extends ConditionalSuccessor, TMatchSuccessor {
6261/**
6362 * A control flow successor of a loop control flow expression, `continue` or `break`.
6463 */
65- final class LoopJumpSuccessor extends SuccessorTypeImpl , TLoopSuccessor {
66- final private TLoopJumpType getKind ( ) { this = TLoopSuccessor ( result , _) }
64+ class LoopJumpSuccessorImpl extends SuccessorTypeImpl , TLoopSuccessor {
65+ private TLoopJumpType getKind ( ) { this = TLoopSuccessor ( result , _) }
6766
68- final private TLabelType getLabelType ( ) { this = TLoopSuccessor ( _, result ) }
67+ private TLabelType getLabelType ( ) { this = TLoopSuccessor ( _, result ) }
6968
70- final predicate hasLabel ( ) { this .getLabelType ( ) = TLabel ( _) }
69+ predicate hasLabel ( ) { this .getLabelType ( ) = TLabel ( _) }
7170
72- final string getLabelName ( ) { this = TLoopSuccessor ( _, TLabel ( result ) ) }
71+ string getLabelName ( ) { this = TLoopSuccessor ( _, TLabel ( result ) ) }
7372
74- final predicate isContinue ( ) { this .getKind ( ) = TContinueJump ( ) }
73+ predicate isContinue ( ) { this .getKind ( ) = TContinueJump ( ) }
7574
76- final predicate isBreak ( ) { this .getKind ( ) = TBreakJump ( ) }
75+ predicate isBreak ( ) { this .getKind ( ) = TBreakJump ( ) }
7776
78- final override string toString ( ) {
77+ override string toString ( ) {
7978 exists ( string kind , string label |
8079 ( if this .isContinue ( ) then kind = "continue" else kind = "break" ) and
8180 ( if this .hasLabel ( ) then label = "(" + this .getLabelName ( ) + ")" else label = "" ) and
@@ -87,6 +86,6 @@ final class LoopJumpSuccessor extends SuccessorTypeImpl, TLoopSuccessor {
8786/**
8887 * A `return` control flow successor.
8988 */
90- final class ReturnSuccessor extends SuccessorTypeImpl , TReturnSuccessor {
91- final override string toString ( ) { result = "return" }
89+ class ReturnSuccessorImpl extends SuccessorTypeImpl , TReturnSuccessor {
90+ override string toString ( ) { result = "return" }
9291}
0 commit comments