diff --git a/ql/src/codeql_ruby/ast/Control.qll b/ql/src/codeql_ruby/ast/Control.qll index a1208c24668..0673636cca4 100644 --- a/ql/src/codeql_ruby/ast/Control.qll +++ b/ql/src/codeql_ruby/ast/Control.qll @@ -46,11 +46,11 @@ class IfOrElsifExpr extends ConditionalExpr { override IfOrElsifExpr::Range range; /** Gets the 'then' branch of this `if`/`elsif` expression. */ - final override ThenExpr getThen() { result = range.getThen() } + final override ExprSequence getThen() { result = range.getThen() } /** * Gets the `elsif`/`else` branch of this `if`/`elsif` expression, if any. In - * the following example, the result is an `ElseExpr` containing `b`. + * the following example, the result is an `ExprSequence` containing `b`. * ```rb * if foo * a @@ -66,8 +66,8 @@ class IfOrElsifExpr extends ConditionalExpr { * ``` * There can be at most one result, since `elsif` branches nest. In the * following example, `ifExpr.getElse()` returns an `ElsifExpr`, and the - * `else` branch is nested inside that. To get the `ElseExpr` for the `else` - * branch, i.e. the one containing `c`, use + * `else` branch is nested inside that. To get the `ExprSequence` for the + * `else` branch, i.e. the one containing `c`, use * `getElse().(ElsifExpr).getElse()`. * ```rb * if foo @@ -219,7 +219,7 @@ class CaseExpr extends ControlExpr, @case__ { /** * Gets the `n`th branch of this case expression, either a `WhenExpr` or an - * `ElseExpr`. + * `ExprSequence`. */ final Expr getBranch(int n) { result = range.getBranch(n) } @@ -233,7 +233,7 @@ class CaseExpr extends ControlExpr, @case__ { final WhenExpr getAWhenBranch() { result = range.getAWhenBranch() } /** Gets the `else` branch of this case expression, if any. */ - final ElseExpr getElseBranch() { result = range.getElseBranch() } + final ExprSequence getElseBranch() { result = range.getElseBranch() } /** * Gets the number of branches of this case expression. @@ -257,7 +257,7 @@ class WhenExpr extends Expr, @when { final override string toString() { result = "when ..." } /** Gets the body of this case-when expression. */ - final ThenExpr getBody() { result = range.getBody() } + final ExprSequence getBody() { result = range.getBody() } /** * Gets the `n`th pattern (or condition) in this case-when expression. @@ -303,7 +303,7 @@ class WhileExpr extends Loop, @while { final override string toString() { result = "while ..." } /** Gets the body of this `while` loop. */ - final override DoExpr getBody() { result = range.getBody() } + final override ExprSequence getBody() { result = range.getBody() } /** Gets the condition expression of this `while` loop. */ final Expr getCondition() { result = range.getCondition() } @@ -326,7 +326,7 @@ class UntilExpr extends Loop, @until { final override string toString() { result = "until ..." } /** Gets the body of this `until` loop. */ - final override DoExpr getBody() { result = range.getBody() } + final override ExprSequence getBody() { result = range.getBody() } /** Gets the condition expression of this `until` loop. */ final Expr getCondition() { result = range.getCondition() } diff --git a/ql/src/codeql_ruby/ast/Expr.qll b/ql/src/codeql_ruby/ast/Expr.qll index 35ea19287f3..b32251966f7 100644 --- a/ql/src/codeql_ruby/ast/Expr.qll +++ b/ql/src/codeql_ruby/ast/Expr.qll @@ -78,6 +78,10 @@ class RegexLiteral extends Literal, @regex { class ExprSequence extends Expr { override ExprSequence::Range range; + final override string getAPrimaryQlClass() { result = "ExprSequence" } + + final override string toString() { result = "...; ..." } + /** Gets the `n`th expression in this sequence. */ final Expr getExpr(int n) { result = this.(ExprSequence::Range).getExpr(n) } @@ -93,39 +97,3 @@ class ExprSequence extends Expr { /** Holds if this sequence has no expressions. */ final predicate isEmpty() { this.getNumberOfExpressions() = 0 } } - -/** - * A sequence of expressions in a `then` branch of an `if`, `unless`, or `when` - * expression. - */ -class ThenExpr extends ExprSequence, @then { - final override ThenExpr::Range range; - - final override string getAPrimaryQlClass() { result = "ThenExpr" } - - final override string toString() { result = "then ..." } -} - -/** - * A sequence of expressions in an `else` branch of an `if`, `unless`, or - * `case` expression. - */ -class ElseExpr extends ExprSequence, @else { - final override ElseExpr::Range range; - - final override string getAPrimaryQlClass() { result = "ElseExpr" } - - final override string toString() { result = "else ..." } -} - -/** - * A sequence of expressions representing the body of a `for`, `while`, or - * `until` loop. - */ -class DoExpr extends ExprSequence, @do { - final override DoExpr::Range range; - - final override string getAPrimaryQlClass() { result = "DoExpr" } - - final override string toString() { result = "do ..." } -} diff --git a/ql/src/codeql_ruby/ast/internal/Control.qll b/ql/src/codeql_ruby/ast/internal/Control.qll index be7ed2c3a7a..7bac75b5610 100644 --- a/ql/src/codeql_ruby/ast/internal/Control.qll +++ b/ql/src/codeql_ruby/ast/internal/Control.qll @@ -27,7 +27,7 @@ module IfExpr { final override Expr getCondition() { result = generated.getCondition() } - final override ThenExpr getThen() { result = generated.getConsequence() } + final override ExprSequence getThen() { result = generated.getConsequence() } final override Expr getElse() { result = generated.getAlternative() } } @@ -39,7 +39,7 @@ module ElsifExpr { final override Expr getCondition() { result = generated.getCondition() } - final override ThenExpr getThen() { result = generated.getConsequence() } + final override ExprSequence getThen() { result = generated.getConsequence() } final override Expr getElse() { result = generated.getAlternative() } } @@ -51,9 +51,9 @@ module UnlessExpr { final override Expr getCondition() { result = generated.getCondition() } - final override ThenExpr getThen() { result = generated.getConsequence() } + final override ExprSequence getThen() { result = generated.getConsequence() } - final override ElseExpr getElse() { result = generated.getAlternative() } + final override ExprSequence getElse() { result = generated.getAlternative() } } } @@ -103,7 +103,7 @@ module CaseExpr { final WhenExpr getAWhenBranch() { result = this.getBranch(_) } - final ElseExpr getElseBranch() { result = this.getBranch(_) } + final ExprSequence getElseBranch() { result = this.getBranch(_) } } } @@ -111,7 +111,7 @@ module WhenExpr { class Range extends Expr::Range, @when { final override Generated::When generated; - final ThenExpr getBody() { result = generated.getBody() } + final ExprSequence getBody() { result = generated.getBody() } final Expr getPattern(int n) { result = generated.getPattern(n).getChild() } } @@ -127,7 +127,7 @@ module WhileExpr { class Range extends Loop::Range, @while { final override Generated::While generated; - final override DoExpr getBody() { result = generated.getBody() } + final override ExprSequence getBody() { result = generated.getBody() } final Expr getCondition() { result = generated.getCondition() } } @@ -137,7 +137,7 @@ module UntilExpr { class Range extends Loop::Range, @until { final override Generated::Until generated; - final override DoExpr getBody() { result = generated.getBody() } + final override ExprSequence getBody() { result = generated.getBody() } final Expr getCondition() { result = generated.getCondition() } } @@ -167,7 +167,7 @@ module ForExpr { class Range extends Loop::Range, @for { final override Generated::For generated; - final override DoExpr getBody() { result = generated.getBody() } + final override ExprSequence getBody() { result = generated.getBody() } final Pattern getPattern() { result = generated.getPattern() } diff --git a/ql/test/library-tests/ast/control/CaseExpr.expected b/ql/test/library-tests/ast/control/CaseExpr.expected index ff2b223690a..387a17efe72 100644 --- a/ql/test/library-tests/ast/control/CaseExpr.expected +++ b/ql/test/library-tests/ast/control/CaseExpr.expected @@ -3,20 +3,20 @@ caseValues caseNoValues | cases.rb:18:1:22:3 | case ... | caseElseBranches -| cases.rb:8:1:15:3 | case ... | cases.rb:13:1:14:7 | else ... | +| cases.rb:8:1:15:3 | case ... | cases.rb:13:1:14:7 | ...; ... | caseNoElseBranches | cases.rb:18:1:22:3 | case ... | caseWhenBranches -| cases.rb:8:1:15:3 | case ... | cases.rb:9:1:10:7 | when ... | 0 | cases.rb:9:6:9:6 | b | cases.rb:9:7:10:7 | then ... | -| cases.rb:8:1:15:3 | case ... | cases.rb:11:1:12:7 | when ... | 0 | cases.rb:11:6:11:6 | c | cases.rb:11:10:12:7 | then ... | -| cases.rb:8:1:15:3 | case ... | cases.rb:11:1:12:7 | when ... | 1 | cases.rb:11:9:11:9 | d | cases.rb:11:10:12:7 | then ... | -| cases.rb:18:1:22:3 | case ... | cases.rb:19:1:19:19 | when ... | 0 | cases.rb:19:6:19:10 | ... > ... | cases.rb:19:13:19:19 | then ... | -| cases.rb:18:1:22:3 | case ... | cases.rb:20:1:20:19 | when ... | 0 | cases.rb:20:6:20:11 | ... == ... | cases.rb:20:13:20:19 | then ... | -| cases.rb:18:1:22:3 | case ... | cases.rb:21:1:21:19 | when ... | 0 | cases.rb:21:6:21:10 | ... < ... | cases.rb:21:13:21:19 | then ... | +| cases.rb:8:1:15:3 | case ... | cases.rb:9:1:10:7 | when ... | 0 | cases.rb:9:6:9:6 | b | cases.rb:9:7:10:7 | ...; ... | +| cases.rb:8:1:15:3 | case ... | cases.rb:11:1:12:7 | when ... | 0 | cases.rb:11:6:11:6 | c | cases.rb:11:10:12:7 | ...; ... | +| cases.rb:8:1:15:3 | case ... | cases.rb:11:1:12:7 | when ... | 1 | cases.rb:11:9:11:9 | d | cases.rb:11:10:12:7 | ...; ... | +| cases.rb:18:1:22:3 | case ... | cases.rb:19:1:19:19 | when ... | 0 | cases.rb:19:6:19:10 | ... > ... | cases.rb:19:13:19:19 | ...; ... | +| cases.rb:18:1:22:3 | case ... | cases.rb:20:1:20:19 | when ... | 0 | cases.rb:20:6:20:11 | ... == ... | cases.rb:20:13:20:19 | ...; ... | +| cases.rb:18:1:22:3 | case ... | cases.rb:21:1:21:19 | when ... | 0 | cases.rb:21:6:21:10 | ... < ... | cases.rb:21:13:21:19 | ...; ... | caseAllBranches | cases.rb:8:1:15:3 | case ... | 0 | cases.rb:9:1:10:7 | when ... | | cases.rb:8:1:15:3 | case ... | 1 | cases.rb:11:1:12:7 | when ... | -| cases.rb:8:1:15:3 | case ... | 2 | cases.rb:13:1:14:7 | else ... | +| cases.rb:8:1:15:3 | case ... | 2 | cases.rb:13:1:14:7 | ...; ... | | cases.rb:18:1:22:3 | case ... | 0 | cases.rb:19:1:19:19 | when ... | | cases.rb:18:1:22:3 | case ... | 1 | cases.rb:20:1:20:19 | when ... | | cases.rb:18:1:22:3 | case ... | 2 | cases.rb:21:1:21:19 | when ... | diff --git a/ql/test/library-tests/ast/control/CaseExpr.ql b/ql/test/library-tests/ast/control/CaseExpr.ql index 38fcfc8c828..297b6b3577c 100644 --- a/ql/test/library-tests/ast/control/CaseExpr.ql +++ b/ql/test/library-tests/ast/control/CaseExpr.ql @@ -4,7 +4,9 @@ query predicate caseValues(CaseExpr c, Expr value) { value = c.getValue() } query predicate caseNoValues(CaseExpr c) { not exists(c.getValue()) } -query predicate caseElseBranches(CaseExpr c, ElseExpr elseBranch) { elseBranch = c.getElseBranch() } +query predicate caseElseBranches(CaseExpr c, ExprSequence elseBranch) { + elseBranch = c.getElseBranch() +} query predicate caseNoElseBranches(CaseExpr c) { not exists(c.getElseBranch()) } diff --git a/ql/test/library-tests/ast/control/ConditionalExpr.expected b/ql/test/library-tests/ast/control/ConditionalExpr.expected index 792b5565bb9..a67ef4c2861 100644 --- a/ql/test/library-tests/ast/control/ConditionalExpr.expected +++ b/ql/test/library-tests/ast/control/ConditionalExpr.expected @@ -1,28 +1,28 @@ conditionalExprsWithElse -| conditionals.rb:15:1:19:3 | if ... | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | then ... | conditionals.rb:17:1:18:5 | else ... | IfExpr | -| conditionals.rb:22:1:30:3 | if ... | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | then ... | conditionals.rb:24:1:29:5 | elsif ... | IfExpr | -| conditionals.rb:24:1:29:5 | elsif ... | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | then ... | conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | -| conditionals.rb:26:1:29:5 | elsif ... | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | then ... | conditionals.rb:28:1:29:5 | else ... | ElsifExpr | -| conditionals.rb:33:1:37:3 | if ... | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | then ... | conditionals.rb:35:1:36:5 | elsif ... | IfExpr | -| conditionals.rb:45:1:49:3 | unless ... | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | then ... | conditionals.rb:47:1:48:5 | else ... | UnlessExpr | +| conditionals.rb:15:1:19:3 | if ... | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | ...; ... | conditionals.rb:17:1:18:5 | ...; ... | IfExpr | +| conditionals.rb:22:1:30:3 | if ... | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | ...; ... | conditionals.rb:24:1:29:5 | elsif ... | IfExpr | +| conditionals.rb:24:1:29:5 | elsif ... | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | +| conditionals.rb:26:1:29:5 | elsif ... | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | conditionals.rb:28:1:29:5 | ...; ... | ElsifExpr | +| conditionals.rb:33:1:37:3 | if ... | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | ...; ... | conditionals.rb:35:1:36:5 | elsif ... | IfExpr | +| conditionals.rb:45:1:49:3 | unless ... | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | ...; ... | conditionals.rb:47:1:48:5 | ...; ... | UnlessExpr | | conditionals.rb:58:5:58:25 | ... ? ... : ... | conditionals.rb:58:5:58:9 | ... > ... | conditionals.rb:58:13:58:17 | ... + ... | conditionals.rb:58:21:58:25 | ... - ... | TernaryIfExpr | conditionalExprsWithoutElse -| conditionals.rb:10:1:12:3 | if ... | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | then ... | IfExpr | -| conditionals.rb:35:1:36:5 | elsif ... | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | then ... | ElsifExpr | -| conditionals.rb:40:1:42:3 | unless ... | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | then ... | UnlessExpr | +| conditionals.rb:10:1:12:3 | if ... | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | ...; ... | IfExpr | +| conditionals.rb:35:1:36:5 | elsif ... | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | ElsifExpr | +| conditionals.rb:40:1:42:3 | unless ... | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | ...; ... | UnlessExpr | | conditionals.rb:52:1:52:14 | ... if ... | conditionals.rb:52:10:52:14 | ... > ... | conditionals.rb:52:1:52:5 | ... = ... | IfModifierExpr | | conditionals.rb:55:1:55:18 | ... unless ... | conditionals.rb:55:14:55:18 | ... < ... | conditionals.rb:55:1:55:5 | ... = ... | UnlessModifierExpr | ifOrElsifExprs -| conditionals.rb:10:1:12:3 | if ... | IfExpr | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | then ... | (none) | -| conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | then ... | else ... | -| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | then ... | elsif ... | -| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | then ... | elsif ... | -| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | then ... | else ... | -| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | then ... | elsif ... | -| conditionals.rb:35:1:36:5 | elsif ... | ElsifExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | then ... | (none) | +| conditionals.rb:10:1:12:3 | if ... | IfExpr | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | ...; ... | (none) | +| conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | ...; ... | ...; ... | +| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | ...; ... | elsif ... | +| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | elsif ... | +| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | ...; ... | +| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | ...; ... | elsif ... | +| conditionals.rb:35:1:36:5 | elsif ... | ElsifExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | (none) | unlessExprs -| conditionals.rb:40:1:42:3 | unless ... | UnlessExpr | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | then ... | (none) | -| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | then ... | else ... | +| conditionals.rb:40:1:42:3 | unless ... | UnlessExpr | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | ...; ... | (none) | +| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | ...; ... | ...; ... | ifModifierExprs | conditionals.rb:52:1:52:14 | ... if ... | IfModifierExpr | conditionals.rb:52:10:52:14 | ... > ... | conditionals.rb:52:1:52:5 | ... = ... | (none) | unlessModifierExprs diff --git a/ql/test/library-tests/ast/control/ConditionalExpr.ql b/ql/test/library-tests/ast/control/ConditionalExpr.ql index 4d540a4c37a..19f29bc70be 100644 --- a/ql/test/library-tests/ast/control/ConditionalExpr.ql +++ b/ql/test/library-tests/ast/control/ConditionalExpr.ql @@ -26,13 +26,13 @@ predicate helper(ConditionalExpr e, string pClass, Expr cond, Expr thenExpr, str } query predicate ifOrElsifExprs( - IfOrElsifExpr e, string pClass, Expr cond, ThenExpr thenExpr, string elseStr + IfOrElsifExpr e, string pClass, Expr cond, ExprSequence thenExpr, string elseStr ) { helper(e, pClass, cond, thenExpr, elseStr) } query predicate unlessExprs( - UnlessExpr e, string pClass, Expr cond, ThenExpr thenExpr, string elseStr + UnlessExpr e, string pClass, Expr cond, ExprSequence thenExpr, string elseStr ) { helper(e, pClass, cond, thenExpr, elseStr) } diff --git a/ql/test/library-tests/ast/control/Loop.expected b/ql/test/library-tests/ast/control/Loop.expected index 44f89900a2a..6f46d76883c 100644 --- a/ql/test/library-tests/ast/control/Loop.expected +++ b/ql/test/library-tests/ast/control/Loop.expected @@ -1,38 +1,38 @@ loops -| loops.rb:9:1:12:3 | for ... in ... | ForExpr | loops.rb:9:15:12:3 | do ... | DoExpr | -| loops.rb:16:1:19:3 | for ... in ... | ForExpr | loops.rb:16:15:19:3 | do ... | DoExpr | -| loops.rb:22:1:25:3 | for ... in ... | ForExpr | loops.rb:22:35:25:3 | do ... | DoExpr | -| loops.rb:28:1:31:3 | for ... in ... | ForExpr | loops.rb:28:37:31:3 | do ... | DoExpr | -| loops.rb:34:1:37:3 | while ... | WhileExpr | loops.rb:34:12:37:3 | do ... | DoExpr | -| loops.rb:40:1:43:3 | while ... | WhileExpr | loops.rb:40:13:43:3 | do ... | DoExpr | +| loops.rb:9:1:12:3 | for ... in ... | ForExpr | loops.rb:9:15:12:3 | ...; ... | ExprSequence | +| loops.rb:16:1:19:3 | for ... in ... | ForExpr | loops.rb:16:15:19:3 | ...; ... | ExprSequence | +| loops.rb:22:1:25:3 | for ... in ... | ForExpr | loops.rb:22:35:25:3 | ...; ... | ExprSequence | +| loops.rb:28:1:31:3 | for ... in ... | ForExpr | loops.rb:28:37:31:3 | ...; ... | ExprSequence | +| loops.rb:34:1:37:3 | while ... | WhileExpr | loops.rb:34:12:37:3 | ...; ... | ExprSequence | +| loops.rb:40:1:43:3 | while ... | WhileExpr | loops.rb:40:13:43:3 | ...; ... | ExprSequence | | loops.rb:46:1:46:19 | ... while ... | WhileModifierExpr | loops.rb:46:1:46:6 | ... += ... | AssignAddExpr | -| loops.rb:49:1:52:3 | until ... | UntilExpr | loops.rb:49:13:52:3 | do ... | DoExpr | -| loops.rb:55:1:58:3 | until ... | UntilExpr | loops.rb:55:13:58:3 | do ... | DoExpr | +| loops.rb:49:1:52:3 | until ... | UntilExpr | loops.rb:49:13:52:3 | ...; ... | ExprSequence | +| loops.rb:55:1:58:3 | until ... | UntilExpr | loops.rb:55:13:58:3 | ...; ... | ExprSequence | | loops.rb:61:1:61:19 | ... until ... | UntilModifierExpr | loops.rb:61:1:61:6 | ... -= ... | AssignSubExpr | forExprs -| loops.rb:9:1:12:3 | for ... in ... | loops.rb:9:5:9:5 | n | loops.rb:9:15:12:3 | do ... | 0 | loops.rb:10:5:10:12 | ... += ... | -| loops.rb:9:1:12:3 | for ... in ... | loops.rb:9:5:9:5 | n | loops.rb:9:15:12:3 | do ... | 1 | loops.rb:11:5:11:11 | ... = ... | -| loops.rb:16:1:19:3 | for ... in ... | loops.rb:16:5:16:5 | n | loops.rb:16:15:19:3 | do ... | 0 | loops.rb:17:5:17:12 | ... += ... | -| loops.rb:16:1:19:3 | for ... in ... | loops.rb:16:5:16:5 | n | loops.rb:16:15:19:3 | do ... | 1 | loops.rb:18:5:18:12 | ... -= ... | -| loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | loops.rb:22:35:25:3 | do ... | 0 | loops.rb:23:3:23:14 | ... += ... | -| loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | loops.rb:22:35:25:3 | do ... | 1 | loops.rb:24:3:24:14 | ... *= ... | -| loops.rb:28:1:31:3 | for ... in ... | loops.rb:28:5:28:16 | (..., ...) | loops.rb:28:37:31:3 | do ... | 0 | loops.rb:29:3:29:14 | ... += ... | -| loops.rb:28:1:31:3 | for ... in ... | loops.rb:28:5:28:16 | (..., ...) | loops.rb:28:37:31:3 | do ... | 1 | loops.rb:30:3:30:14 | ... /= ... | +| loops.rb:9:1:12:3 | for ... in ... | loops.rb:9:5:9:5 | n | loops.rb:9:15:12:3 | ...; ... | 0 | loops.rb:10:5:10:12 | ... += ... | +| loops.rb:9:1:12:3 | for ... in ... | loops.rb:9:5:9:5 | n | loops.rb:9:15:12:3 | ...; ... | 1 | loops.rb:11:5:11:11 | ... = ... | +| loops.rb:16:1:19:3 | for ... in ... | loops.rb:16:5:16:5 | n | loops.rb:16:15:19:3 | ...; ... | 0 | loops.rb:17:5:17:12 | ... += ... | +| loops.rb:16:1:19:3 | for ... in ... | loops.rb:16:5:16:5 | n | loops.rb:16:15:19:3 | ...; ... | 1 | loops.rb:18:5:18:12 | ... -= ... | +| loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | loops.rb:22:35:25:3 | ...; ... | 0 | loops.rb:23:3:23:14 | ... += ... | +| loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | loops.rb:22:35:25:3 | ...; ... | 1 | loops.rb:24:3:24:14 | ... *= ... | +| loops.rb:28:1:31:3 | for ... in ... | loops.rb:28:5:28:16 | (..., ...) | loops.rb:28:37:31:3 | ...; ... | 0 | loops.rb:29:3:29:14 | ... += ... | +| loops.rb:28:1:31:3 | for ... in ... | loops.rb:28:5:28:16 | (..., ...) | loops.rb:28:37:31:3 | ...; ... | 1 | loops.rb:30:3:30:14 | ... /= ... | forExprsTuplePatterns | loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | 0 | loops.rb:22:5:22:7 | key | | loops.rb:22:1:25:3 | for ... in ... | loops.rb:22:5:22:14 | (..., ...) | 1 | loops.rb:22:10:22:14 | value | | loops.rb:28:1:31:3 | for ... in ... | loops.rb:28:5:28:16 | (..., ...) | 0 | loops.rb:28:5:28:16 | (..., ...) | whileExprs -| loops.rb:34:1:37:3 | while ... | loops.rb:34:7:34:11 | ... < ... | loops.rb:34:12:37:3 | do ... | 0 | loops.rb:35:3:35:8 | ... += ... | -| loops.rb:34:1:37:3 | while ... | loops.rb:34:7:34:11 | ... < ... | loops.rb:34:12:37:3 | do ... | 1 | loops.rb:36:3:36:8 | ... += ... | -| loops.rb:40:1:43:3 | while ... | loops.rb:40:7:40:11 | ... < ... | loops.rb:40:13:43:3 | do ... | 0 | loops.rb:41:3:41:8 | ... += ... | -| loops.rb:40:1:43:3 | while ... | loops.rb:40:7:40:11 | ... < ... | loops.rb:40:13:43:3 | do ... | 1 | loops.rb:42:3:42:8 | ... += ... | +| loops.rb:34:1:37:3 | while ... | loops.rb:34:7:34:11 | ... < ... | loops.rb:34:12:37:3 | ...; ... | 0 | loops.rb:35:3:35:8 | ... += ... | +| loops.rb:34:1:37:3 | while ... | loops.rb:34:7:34:11 | ... < ... | loops.rb:34:12:37:3 | ...; ... | 1 | loops.rb:36:3:36:8 | ... += ... | +| loops.rb:40:1:43:3 | while ... | loops.rb:40:7:40:11 | ... < ... | loops.rb:40:13:43:3 | ...; ... | 0 | loops.rb:41:3:41:8 | ... += ... | +| loops.rb:40:1:43:3 | while ... | loops.rb:40:7:40:11 | ... < ... | loops.rb:40:13:43:3 | ...; ... | 1 | loops.rb:42:3:42:8 | ... += ... | whileModifierExprs | loops.rb:46:1:46:19 | ... while ... | loops.rb:46:14:46:19 | ... >= ... | loops.rb:46:1:46:6 | ... += ... | untilExprs -| loops.rb:49:1:52:3 | until ... | loops.rb:49:7:49:12 | ... == ... | loops.rb:49:13:52:3 | do ... | 0 | loops.rb:50:3:50:8 | ... += ... | -| loops.rb:49:1:52:3 | until ... | loops.rb:49:7:49:12 | ... == ... | loops.rb:49:13:52:3 | do ... | 1 | loops.rb:51:3:51:8 | ... -= ... | -| loops.rb:55:1:58:3 | until ... | loops.rb:55:7:55:11 | ... > ... | loops.rb:55:13:58:3 | do ... | 0 | loops.rb:56:3:56:8 | ... += ... | -| loops.rb:55:1:58:3 | until ... | loops.rb:55:7:55:11 | ... > ... | loops.rb:55:13:58:3 | do ... | 1 | loops.rb:57:3:57:8 | ... -= ... | +| loops.rb:49:1:52:3 | until ... | loops.rb:49:7:49:12 | ... == ... | loops.rb:49:13:52:3 | ...; ... | 0 | loops.rb:50:3:50:8 | ... += ... | +| loops.rb:49:1:52:3 | until ... | loops.rb:49:7:49:12 | ... == ... | loops.rb:49:13:52:3 | ...; ... | 1 | loops.rb:51:3:51:8 | ... -= ... | +| loops.rb:55:1:58:3 | until ... | loops.rb:55:7:55:11 | ... > ... | loops.rb:55:13:58:3 | ...; ... | 0 | loops.rb:56:3:56:8 | ... += ... | +| loops.rb:55:1:58:3 | until ... | loops.rb:55:7:55:11 | ... > ... | loops.rb:55:13:58:3 | ...; ... | 1 | loops.rb:57:3:57:8 | ... -= ... | untilModifierExprs | loops.rb:61:1:61:19 | ... until ... | loops.rb:61:14:61:19 | ... == ... | loops.rb:61:1:61:6 | ... -= ... | diff --git a/ql/test/library-tests/ast/control/Loop.ql b/ql/test/library-tests/ast/control/Loop.ql index 9af8a94b357..cde967a7d9a 100644 --- a/ql/test/library-tests/ast/control/Loop.ql +++ b/ql/test/library-tests/ast/control/Loop.ql @@ -4,7 +4,7 @@ query predicate loops(Loop l, string lClass, Expr body, string bodyClass) { l.getBody() = body and lClass = l.getAPrimaryQlClass() and bodyClass = body.getAPrimaryQlClass() } -query predicate forExprs(ForExpr f, Pattern p, DoExpr body, int i, Expr bodyChild) { +query predicate forExprs(ForExpr f, Pattern p, ExprSequence body, int i, Expr bodyChild) { p = f.getPattern() and body = f.getBody() and bodyChild = body.getExpr(i) @@ -15,7 +15,7 @@ query predicate forExprsTuplePatterns(ForExpr f, TuplePattern tp, int i, Pattern cp = tp.getElement(i) } -query predicate whileExprs(WhileExpr e, Expr cond, DoExpr body, int i, Expr bodyChild) { +query predicate whileExprs(WhileExpr e, Expr cond, ExprSequence body, int i, Expr bodyChild) { cond = e.getCondition() and body = e.getBody() and bodyChild = body.getExpr(i) @@ -26,7 +26,7 @@ query predicate whileModifierExprs(WhileModifierExpr e, Expr cond, Expr body) { body = e.getBody() } -query predicate untilExprs(UntilExpr e, Expr cond, DoExpr body, int i, Expr bodyChild) { +query predicate untilExprs(UntilExpr e, Expr cond, ExprSequence body, int i, Expr bodyChild) { cond = e.getCondition() and body = e.getBody() and bodyChild = body.getExpr(i)