From 3ee83870b6def22a1cf75ed1b01b81149b407271 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 18 Feb 2021 13:41:47 +0100 Subject: [PATCH] AST: add begin expressions --- ql/src/codeql_ruby/ast/Statement.qll | 16 ++++++++++++++- ql/src/codeql_ruby/ast/internal/Expr.qll | 10 ---------- ql/src/codeql_ruby/ast/internal/Statement.qll | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/ql/src/codeql_ruby/ast/Statement.qll b/ql/src/codeql_ruby/ast/Statement.qll index e30f0c15fd7..2e6e6c37509 100644 --- a/ql/src/codeql_ruby/ast/Statement.qll +++ b/ql/src/codeql_ruby/ast/Statement.qll @@ -36,7 +36,21 @@ class EmptyStmt extends Stmt, @token_empty_statement { } /** - * An `BEGIN` block. + * A `begin` statement. + * ```rb + * begin + * puts "hello world" + * end + * ``` + */ +class BeginExpr extends BodyStatement, @begin { + final override Begin::Range range; + + final override string getAPrimaryQlClass() { result = "BeginExpr" } +} + +/** + * A `BEGIN` block. * ```rb * BEGIN { puts "starting ..." } * ``` diff --git a/ql/src/codeql_ruby/ast/internal/Expr.qll b/ql/src/codeql_ruby/ast/internal/Expr.qll index 1d10bf85680..337589a5653 100644 --- a/ql/src/codeql_ruby/ast/internal/Expr.qll +++ b/ql/src/codeql_ruby/ast/internal/Expr.qll @@ -90,16 +90,6 @@ module ParenthesizedExpr { } } -module BeginBlock { - class Range extends StmtSequence::Range, @begin_block { - final override Generated::BeginBlock generated; - - final override Stmt getStmt(int n) { result = generated.getChild(n) } - - final override string toString() { result = "BEGIN { ... }" } - } -} - module ThenExpr { class Range extends StmtSequence::Range, @then { final override Generated::Then generated; diff --git a/ql/src/codeql_ruby/ast/internal/Statement.qll b/ql/src/codeql_ruby/ast/internal/Statement.qll index 8fd7291b503..08d5d2a19bc 100644 --- a/ql/src/codeql_ruby/ast/internal/Statement.qll +++ b/ql/src/codeql_ruby/ast/internal/Statement.qll @@ -17,6 +17,26 @@ module EmptyStmt { } } +module Begin { + class Range extends BodyStatement::Range, @begin { + final override Generated::Begin generated; + + final override Generated::AstNode getChild(int n) { result = generated.getChild(n) } + + final override string toString() { result = "begin ... " } + } +} + +module BeginBlock { + class Range extends StmtSequence::Range, @begin_block { + final override Generated::BeginBlock generated; + + final override Stmt getStmt(int n) { result = generated.getChild(n) } + + final override string toString() { result = "BEGIN { ... }" } + } +} + module EndBlock { class Range extends StmtSequence::Range, @end_block { final override Generated::EndBlock generated;