Skip to content

Commit d1721d0

Browse files
authored
QL: Merge pull request #69 from github/erik-krogh/perf
fix two bad join orders
2 parents 411faca + 15679df commit d1721d0

3 files changed

Lines changed: 22 additions & 19 deletions

File tree

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

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,6 @@ private class Folder_ extends ContainerOrModule, TFolder {
7474
Folder getFolder() { result = f }
7575
}
7676

77-
// TODO: Use `AstNode::getParent` once it is total
78-
private Generated::AstNode parent(Generated::AstNode n) {
79-
result = n.getParent() and
80-
not n instanceof Generated::Module
81-
}
82-
83-
private Module getEnclosingModule0(AstNode n) {
84-
AstNodes::toGenerated(result) = parent*(AstNodes::toGenerated(n).getParent())
85-
}
86-
87-
ContainerOrModule getEnclosingModule(AstNode n) {
88-
result = TModule(getEnclosingModule0(n))
89-
or
90-
not exists(getEnclosingModule0(n)) and
91-
result = TFile(n.getLocation().getFile())
92-
}
93-
9477
class Module_ extends FileOrModule, TModule {
9578
Module m;
9679

@@ -163,6 +146,24 @@ private predicate resolveSelectionName(Import imp, ContainerOrModule m, int i) {
163146

164147
cached
165148
private module Cached {
149+
// TODO: Use `AstNode::getParent` once it is total
150+
private Generated::AstNode parent(Generated::AstNode n) {
151+
result = n.getParent() and
152+
not n instanceof Generated::Module
153+
}
154+
155+
private Module getEnclosingModule0(AstNode n) {
156+
AstNodes::toGenerated(result) = parent*(AstNodes::toGenerated(n).getParent())
157+
}
158+
159+
cached
160+
ContainerOrModule getEnclosingModule(AstNode n) {
161+
result = TModule(getEnclosingModule0(n))
162+
or
163+
not exists(getEnclosingModule0(n)) and
164+
result = TFile(n.getLocation().getFile())
165+
}
166+
166167
cached
167168
module NewType {
168169
cached

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class Type extends TType {
7676
p2 = classPredCandidate(this, name, arity)
7777
}
7878

79-
pragma[nomagic]
79+
cached
8080
PredicateOrBuiltin getClassPredicate(string name, int arity) {
8181
result = classPredCandidate(this, name, arity) and
8282
not getClassPredicate1(name, arity, _, result)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ private module Cached {
7272
predicate resolveVariable(Identifier i, VarDef decl) { scopeOf(i).containsVar(decl, getName(i)) }
7373

7474
cached
75-
predicate resolveField(Identifier i, VarDef decl) { scopeOf(i).containsField(decl, getName(i)) }
75+
predicate resolveField(Identifier i, VarDef decl) {
76+
scopeOf(i).containsField(decl, pragma[only_bind_into](getName(i)))
77+
}
7678
}
7779

7880
import Cached

0 commit comments

Comments
 (0)