mirror of
https://github.com/github/codeql.git
synced 2026-05-04 13:15:21 +02:00
Merge pull request #7317 from hvitved/ruby/param-node-refactor
Ruby: Restructure `ParameterNode(Impl)`
This commit is contained in:
@@ -320,7 +320,9 @@ class ReturningStatementNode extends NodeImpl, TReturningNode {
|
||||
}
|
||||
|
||||
private module ParameterNodes {
|
||||
abstract class ParameterNodeImpl extends ParameterNode, NodeImpl {
|
||||
abstract class ParameterNodeImpl extends NodeImpl {
|
||||
abstract Parameter getParameter();
|
||||
|
||||
abstract predicate isSourceParameterOf(Callable c, int i);
|
||||
|
||||
predicate isParameterOf(DataFlowCallable c, int i) {
|
||||
@@ -341,6 +343,10 @@ private module ParameterNodes {
|
||||
|
||||
override predicate isSourceParameterOf(Callable c, int i) { c.getParameter(i) = parameter }
|
||||
|
||||
override predicate isParameterOf(DataFlowCallable c, int i) {
|
||||
this.isSourceParameterOf(c.asCallable(), i)
|
||||
}
|
||||
|
||||
override CfgScope getCfgScope() { result = parameter.getCallable() }
|
||||
|
||||
override Location getLocationImpl() { result = parameter.getLocation() }
|
||||
@@ -359,8 +365,14 @@ private module ParameterNodes {
|
||||
|
||||
final MethodBase getMethod() { result = method }
|
||||
|
||||
override Parameter getParameter() { none() }
|
||||
|
||||
override predicate isSourceParameterOf(Callable c, int i) { method = c and i = -1 }
|
||||
|
||||
override predicate isParameterOf(DataFlowCallable c, int i) {
|
||||
this.isSourceParameterOf(c.asCallable(), i)
|
||||
}
|
||||
|
||||
override CfgScope getCfgScope() { result = method }
|
||||
|
||||
override Location getLocationImpl() { result = method.getLocation() }
|
||||
@@ -385,6 +397,10 @@ private module ParameterNodes {
|
||||
|
||||
override predicate isSourceParameterOf(Callable c, int i) { c = method and i = -2 }
|
||||
|
||||
override predicate isParameterOf(DataFlowCallable c, int i) {
|
||||
this.isSourceParameterOf(c.asCallable(), i)
|
||||
}
|
||||
|
||||
override CfgScope getCfgScope() { result = method }
|
||||
|
||||
override Location getLocationImpl() {
|
||||
@@ -407,6 +423,8 @@ private module ParameterNodes {
|
||||
|
||||
SummaryParameterNode() { this = TSummaryParameterNode(sc, pos) }
|
||||
|
||||
override Parameter getParameter() { none() }
|
||||
|
||||
override predicate isSourceParameterOf(Callable c, int i) { none() }
|
||||
|
||||
override predicate isParameterOf(DataFlowCallable c, int i) { sc = c and i = pos }
|
||||
@@ -442,7 +460,7 @@ class SummaryNode extends NodeImpl, TSummaryNode {
|
||||
/** A data-flow node that represents a call argument. */
|
||||
abstract class ArgumentNode extends Node {
|
||||
/** Holds if this argument occurs at the given position in the given call. */
|
||||
predicate argumentOf(DataFlowCall call, int pos) { this.sourceArgumentOf(call.asCall(), pos) }
|
||||
abstract predicate argumentOf(DataFlowCall call, int pos);
|
||||
|
||||
abstract predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos);
|
||||
|
||||
@@ -457,6 +475,10 @@ private module ArgumentNodes {
|
||||
|
||||
ExplicitArgumentNode() { this.asExpr() = arg }
|
||||
|
||||
override predicate argumentOf(DataFlowCall call, int pos) {
|
||||
this.sourceArgumentOf(call.asCall(), pos)
|
||||
}
|
||||
|
||||
override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos) {
|
||||
arg.isArgumentOf(call, pos)
|
||||
}
|
||||
@@ -474,6 +496,10 @@ private module ArgumentNodes {
|
||||
exists(CfgNodes::ExprNodes::CallCfgNode c | c.getBlock() = this.asExpr())
|
||||
}
|
||||
|
||||
override predicate argumentOf(DataFlowCall call, int pos) {
|
||||
this.sourceArgumentOf(call.asCall(), pos)
|
||||
}
|
||||
|
||||
override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, int pos) {
|
||||
pos = -2 and
|
||||
(
|
||||
|
||||
@@ -83,9 +83,9 @@ class ExprNode extends Node, TExprNode {
|
||||
* The value of a parameter at function entry, viewed as a node in a data
|
||||
* flow graph.
|
||||
*/
|
||||
class ParameterNode extends Node, TParameterNode {
|
||||
class ParameterNode extends Node, TParameterNode instanceof ParameterNodeImpl {
|
||||
/** Gets the parameter corresponding to this node, if any. */
|
||||
Parameter getParameter() { none() }
|
||||
final Parameter getParameter() { result = super.getParameter() }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user