AST: lambda and brace block bodies

This commit is contained in:
Arthur Baars
2021-02-10 13:28:16 +01:00
parent d4ebcbf18f
commit 635b6fb45b
2 changed files with 13 additions and 4 deletions

View File

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

View File

@@ -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 = "{ ... }" }
}
}