mirror of
https://github.com/github/codeql.git
synced 2026-02-20 08:53:49 +01:00
Merge pull request #130 from github/aibaars/ast-5
AST: add ElementReference as call
This commit is contained in:
@@ -83,6 +83,18 @@ class Call extends Expr {
|
||||
final Block getBlock() { result = range.getBlock() }
|
||||
}
|
||||
|
||||
/**
|
||||
* An element reference; a call to the `[]` method.
|
||||
* ```rb
|
||||
* a[0]
|
||||
* ```
|
||||
*/
|
||||
class ElementReference extends Call, @element_reference {
|
||||
final override ElementReference::Range range;
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "ElementReference" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A call to `yield`.
|
||||
* ```rb
|
||||
|
||||
@@ -46,6 +46,9 @@ class SingletonMethod extends Callable, BodyStatement, @singleton_method {
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "SingletonMethod" }
|
||||
|
||||
/** Gets the object of this singleton method. */
|
||||
final Expr getObject() { result = range.getObject() }
|
||||
|
||||
/** Gets the name of this method. */
|
||||
final string getName() { result = range.getName() }
|
||||
}
|
||||
|
||||
@@ -47,8 +47,6 @@ module AstNode {
|
||||
or
|
||||
this instanceof Generated::Array
|
||||
or
|
||||
this instanceof Generated::ElementReference
|
||||
or
|
||||
this instanceof Generated::Complex
|
||||
or
|
||||
this instanceof Generated::Character
|
||||
|
||||
@@ -13,7 +13,7 @@ module Call {
|
||||
|
||||
abstract Block getBlock();
|
||||
|
||||
final override string toString() { result = "call to " + this.getMethodName() }
|
||||
override string toString() { result = "call to " + this.getMethodName() }
|
||||
}
|
||||
|
||||
private class IdentifierCallRange extends Call::Range, @token_identifier {
|
||||
@@ -71,6 +71,22 @@ module Call {
|
||||
}
|
||||
}
|
||||
|
||||
module ElementReference {
|
||||
class Range extends Call::Range, @element_reference {
|
||||
final override Generated::ElementReference generated;
|
||||
|
||||
final override Expr getReceiver() { result = generated.getObject() }
|
||||
|
||||
final override string getMethodName() { result = "[]" }
|
||||
|
||||
final override string toString() { result = "...[...]" }
|
||||
|
||||
final override Expr getArgument(int n) { result = generated.getChild(n) }
|
||||
|
||||
final override Block getBlock() { none() }
|
||||
}
|
||||
}
|
||||
|
||||
module YieldCall {
|
||||
class Range extends Call::Range, @yield {
|
||||
final override Generated::Yield generated;
|
||||
|
||||
@@ -40,6 +40,8 @@ module SingletonMethod {
|
||||
result = generated.getName().(Generated::Setter).getName().getValue() + "="
|
||||
}
|
||||
|
||||
final Generated::AstNode getObject() { result = generated.getObject() }
|
||||
|
||||
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
|
||||
|
||||
final override string toString() { result = this.getName() }
|
||||
|
||||
Reference in New Issue
Block a user