mirror of
https://github.com/github/codeql.git
synced 2026-02-20 08:53:49 +01:00
AST: add ElementReference
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
|
||||
|
||||
@@ -49,8 +49,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;
|
||||
|
||||
@@ -84,6 +84,8 @@ callsWithArguments
|
||||
| calls.rb:36:3:36:16 | call to yield | yield | 1 | calls.rb:36:14:36:16 | 200 |
|
||||
| calls.rb:54:1:54:14 | call to some_func | some_func | 0 | calls.rb:54:11:54:13 | call to foo |
|
||||
| calls.rb:55:1:55:17 | call to some_func | some_func | 0 | calls.rb:55:11:55:16 | call to foo |
|
||||
| calls.rb:234:1:234:8 | ...[...] | [] | 0 | calls.rb:234:5:234:7 | call to bar |
|
||||
| calls.rb:235:1:235:14 | ...[...] | [] | 0 | calls.rb:235:8:235:13 | call to bar |
|
||||
| calls.rb:266:1:266:9 | call to foo | foo | 0 | calls.rb:266:5:266:8 | &... |
|
||||
| calls.rb:267:1:267:12 | call to foo | foo | 0 | calls.rb:267:5:267:11 | &... |
|
||||
| calls.rb:270:1:270:9 | call to foo | foo | 0 | calls.rb:270:5:270:8 | *... |
|
||||
@@ -156,7 +158,9 @@ callsWithReceiver
|
||||
| calls.rb:223:14:223:19 | call to foo | calls.rb:223:14:223:14 | X |
|
||||
| calls.rb:229:10:229:15 | call to bar | calls.rb:229:10:229:10 | X |
|
||||
| calls.rb:230:3:230:8 | call to baz | calls.rb:230:3:230:3 | X |
|
||||
| calls.rb:234:1:234:8 | ...[...] | calls.rb:234:1:234:3 | call to foo |
|
||||
| calls.rb:235:1:235:6 | call to foo | calls.rb:235:1:235:1 | X |
|
||||
| calls.rb:235:1:235:14 | ...[...] | calls.rb:235:1:235:6 | call to foo |
|
||||
| calls.rb:235:8:235:13 | call to bar | calls.rb:235:8:235:8 | X |
|
||||
| calls.rb:238:15:238:20 | call to baz | calls.rb:238:15:238:15 | X |
|
||||
| calls.rb:242:1:242:6 | call to foo | calls.rb:242:1:242:1 | X |
|
||||
|
||||
@@ -1038,14 +1038,14 @@ cfg.rb:
|
||||
# 68| puts
|
||||
#-----| -> items
|
||||
|
||||
# 68| ElementReference
|
||||
# 68| ...[...]
|
||||
#-----| -> call to puts
|
||||
|
||||
# 68| items
|
||||
#-----| -> 2
|
||||
|
||||
# 68| 2
|
||||
#-----| -> ElementReference
|
||||
#-----| -> ...[...]
|
||||
|
||||
# 69| print
|
||||
#-----| -> 42
|
||||
@@ -1298,14 +1298,14 @@ cfg.rb:
|
||||
# 103| return
|
||||
#-----| return -> exit parameters (normal)
|
||||
|
||||
# 103| ElementReference
|
||||
# 103| ...[...]
|
||||
#-----| -> return
|
||||
|
||||
# 103| kwargs
|
||||
#-----| -> key
|
||||
|
||||
# 103| key
|
||||
#-----| -> ElementReference
|
||||
#-----| -> ...[...]
|
||||
|
||||
# 106| ... = ...
|
||||
#-----| -> food
|
||||
|
||||
Reference in New Issue
Block a user