mirror of
https://github.com/github/codeql.git
synced 2026-02-19 16:33:40 +01:00
AST: lambda and brace block bodies
This commit is contained in:
@@ -56,14 +56,14 @@ class SingletonMethod extends Callable, BodyStatement, @singleton_method {
|
||||
* -> (x) { x + 1 }
|
||||
* ```
|
||||
*/
|
||||
class Lambda extends Callable, @lambda {
|
||||
class Lambda extends Callable, BodyStatement, @lambda {
|
||||
final override Lambda::Range range;
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "Lambda" }
|
||||
}
|
||||
|
||||
/** A block. */
|
||||
class Block extends Callable {
|
||||
class Block extends Callable, ExprSequence {
|
||||
override Block::Range range;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,19 +48,26 @@ module SingletonMethod {
|
||||
}
|
||||
|
||||
module Lambda {
|
||||
class Range extends Callable::Range, @lambda {
|
||||
class Range extends Callable::Range, BodyStatement::Range, @lambda {
|
||||
final override Generated::Lambda generated;
|
||||
|
||||
final override Parameter::Range getParameter(int n) {
|
||||
result = generated.getParameters().getChild(n)
|
||||
}
|
||||
|
||||
final override Expr getExpr(int i) {
|
||||
result = generated.getBody().(Generated::DoBlock).getChild(i) or
|
||||
result = generated.getBody().(Generated::Block).getChild(i)
|
||||
}
|
||||
|
||||
final override string toString() { result = "-> { ... }" }
|
||||
}
|
||||
}
|
||||
|
||||
module Block {
|
||||
abstract class Range extends Callable::Range { }
|
||||
abstract class Range extends Callable::Range, ExprSequence::Range {
|
||||
Range() { not generated.getParent() instanceof Generated::Lambda }
|
||||
}
|
||||
}
|
||||
|
||||
module DoBlock {
|
||||
@@ -85,6 +92,8 @@ module BraceBlock {
|
||||
result = generated.getParameters().getChild(n)
|
||||
}
|
||||
|
||||
final override Expr getExpr(int i) { result = generated.getChild(i) }
|
||||
|
||||
final override string toString() { result = "{ ... }" }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user