Skip to content

Commit 49d5b66

Browse files
committed
QL: Add Node.getEnclosingPredicate
1 parent 2b84540 commit 49d5b66

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

ql/ql/src/codeql_ql/dataflow/DataFlow.qll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ class Node extends TNode {
1313
* Gets the underlying `Expr` or `VarDef` node, if this is an `AstNodeNode`.
1414
*/
1515
AstNode asAstNode() { astNode(result) = this }
16+
17+
/**
18+
* Gets the predicate containing this data-flow node.
19+
*
20+
* All data-flow nodes belong in exactly one predicate.
21+
* TODO: select clauses
22+
*/
23+
Predicate getEnclosingPredicate() { none() } // overridden in subclasses
1624
}
1725

1826
/**
@@ -35,6 +43,10 @@ class AstNodeNode extends Node, MkAstNodeNode {
3543
AstNode getAstNode() {
3644
result = ast
3745
}
46+
47+
override Predicate getEnclosingPredicate() {
48+
result = ast.getEnclosingPredicate()
49+
}
3850
}
3951

4052
/**
@@ -71,6 +83,10 @@ class ScopedVariableNode extends Node, MkScopedVariable {
7183
AstNode getScope() {
7284
result = scope
7385
}
86+
87+
override Predicate getEnclosingPredicate() {
88+
result = var.getEnclosingPredicate()
89+
}
7490
}
7591

7692
/**
@@ -101,6 +117,10 @@ class ThisNode extends Node, MkThisNode {
101117
Predicate getPredicate() {
102118
result = pred
103119
}
120+
121+
override Predicate getEnclosingPredicate() {
122+
result = pred
123+
}
104124
}
105125

106126
/**
@@ -131,6 +151,10 @@ class ResultNode extends Node, MkResultNode {
131151
Predicate getPredicate() {
132152
result = pred
133153
}
154+
155+
override Predicate getEnclosingPredicate() {
156+
result = pred
157+
}
134158
}
135159

136160
/**
@@ -171,6 +195,10 @@ class FieldNode extends Node, MkFieldNode {
171195
override Location getLocation() {
172196
result = pred.getLocation()
173197
}
198+
199+
override Predicate getEnclosingPredicate() {
200+
result = pred
201+
}
174202
}
175203

176204
/**

0 commit comments

Comments
 (0)