Skip to content

Commit 055937e

Browse files
committed
NewTypeBranches are Predicates
1 parent 2af3fb5 commit 055937e

File tree

4 files changed

+10
-15
lines changed

4 files changed

+10
-15
lines changed

ql/src/codeql_ql/ast/Ast.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ class NewType extends TNewType, TypeDeclaration, ModuleDeclaration {
819819
* A branch in a `newtype`.
820820
* E.g. `Bar()` or `Baz()` in `newtype Foo = Bar() or Baz()`.
821821
*/
822-
class NewTypeBranch extends TNewTypeBranch, PredicateOrBuiltin, TypeDeclaration {
822+
class NewTypeBranch extends TNewTypeBranch, Predicate, TypeDeclaration {
823823
QL::DatatypeBranch branch;
824824

825825
NewTypeBranch() { this = TNewTypeBranch(branch) }
@@ -835,7 +835,7 @@ class NewTypeBranch extends TNewTypeBranch, PredicateOrBuiltin, TypeDeclaration
835835
}
836836

837837
/** Gets the body of this branch. */
838-
Formula getBody() { toQL(result) = branch.getChild(_).(QL::Body).getChild() }
838+
override Formula getBody() { toQL(result) = branch.getChild(_).(QL::Body).getChild() }
839839

840840
override NewTypeBranchType getReturnType() { result.getDeclaration() = this }
841841

ql/src/codeql_ql/ast/internal/AstNodes.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ QL::AstNode toQL(AST::AstNode n) {
193193
n = TAnnotationArg(result)
194194
}
195195

196-
class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate or TDBRelation;
196+
class TPredicate =
197+
TCharPred or TClasslessPredicate or TClassPredicate or TDBRelation or TNewTypeBranch;
197198

198199
class TPredOrBuiltin = TPredicate or TNewTypeBranch or TBuiltin;
199200

ql/src/codeql_ql/ast/internal/Predicate.qll

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,13 @@ private import Builtins
33
private import codeql_ql.ast.internal.Module
44
private import codeql_ql.ast.internal.AstNodes
55

6-
private class TClasslessPredicateOrNewTypeBranch = TClasslessPredicate or TNewTypeBranch;
7-
8-
private string getPredicateName(TClasslessPredicateOrNewTypeBranch p) {
9-
result = p.(ClasslessPredicate).getName() or
10-
result = p.(NewTypeBranch).getName()
11-
}
12-
136
private predicate definesPredicate(
14-
FileOrModule m, string name, int arity, TClasslessPredicateOrNewTypeBranch p, boolean public
7+
FileOrModule m, string name, int arity, Predicate p, boolean public
158
) {
169
m = getEnclosingModule(p) and
17-
name = getPredicateName(p) and
10+
name = p.getName() and
1811
public = getPublicBool(p) and
19-
arity = [p.(ClasslessPredicate).getArity(), count(p.(NewTypeBranch).getField(_))]
12+
arity = p.getArity()
2013
or
2114
// import X
2215
exists(Import imp, FileOrModule m0 |
@@ -40,7 +33,7 @@ private predicate definesPredicate(
4033
cached
4134
private module Cached {
4235
cached
43-
predicate resolvePredicateExpr(PredicateExpr pe, ClasslessPredicate p) {
36+
predicate resolvePredicateExpr(PredicateExpr pe, Predicate p) {
4437
exists(FileOrModule m, boolean public |
4538
not exists(pe.getQualifier()) and
4639
m = getEnclosingModule(pe).getEnclosing*() and
@@ -49,7 +42,7 @@ private module Cached {
4942
m = pe.getQualifier().getResolvedModule() and
5043
public = true
5144
|
52-
definesPredicate(m, pe.getName(), count(p.getParameter(_)), p, public)
45+
definesPredicate(m, pe.getName(), p.getArity(), p, public)
5346
)
5447
}
5548

ql/test/callgraph/callgraph.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ dependsOn
2525
exprPredicate
2626
| Foo.qll:24:22:24:31 | predicate | Foo.qll:22:3:22:32 | ClasslessPredicate myThing0 |
2727
| Foo.qll:26:22:26:31 | predicate | Foo.qll:20:3:20:54 | ClasslessPredicate myThing2 |
28+
| Foo.qll:47:55:47:62 | predicate | Foo.qll:42:20:42:27 | NewTypeBranch MkRoot |
2829
| Foo.qll:47:65:47:70 | predicate | Foo.qll:44:9:44:56 | ClasslessPredicate edge |

0 commit comments

Comments
 (0)