mirror of
https://github.com/github/codeql.git
synced 2026-02-08 11:11:06 +01:00
Merge pull request #69 from github/erik-krogh/perf
fix two bad join orders
This commit is contained in:
@@ -74,23 +74,6 @@ private class Folder_ extends ContainerOrModule, TFolder {
|
||||
Folder getFolder() { result = f }
|
||||
}
|
||||
|
||||
// TODO: Use `AstNode::getParent` once it is total
|
||||
private Generated::AstNode parent(Generated::AstNode n) {
|
||||
result = n.getParent() and
|
||||
not n instanceof Generated::Module
|
||||
}
|
||||
|
||||
private Module getEnclosingModule0(AstNode n) {
|
||||
AstNodes::toGenerated(result) = parent*(AstNodes::toGenerated(n).getParent())
|
||||
}
|
||||
|
||||
ContainerOrModule getEnclosingModule(AstNode n) {
|
||||
result = TModule(getEnclosingModule0(n))
|
||||
or
|
||||
not exists(getEnclosingModule0(n)) and
|
||||
result = TFile(n.getLocation().getFile())
|
||||
}
|
||||
|
||||
class Module_ extends FileOrModule, TModule {
|
||||
Module m;
|
||||
|
||||
@@ -163,6 +146,24 @@ private predicate resolveSelectionName(Import imp, ContainerOrModule m, int i) {
|
||||
|
||||
cached
|
||||
private module Cached {
|
||||
// TODO: Use `AstNode::getParent` once it is total
|
||||
private Generated::AstNode parent(Generated::AstNode n) {
|
||||
result = n.getParent() and
|
||||
not n instanceof Generated::Module
|
||||
}
|
||||
|
||||
private Module getEnclosingModule0(AstNode n) {
|
||||
AstNodes::toGenerated(result) = parent*(AstNodes::toGenerated(n).getParent())
|
||||
}
|
||||
|
||||
cached
|
||||
ContainerOrModule getEnclosingModule(AstNode n) {
|
||||
result = TModule(getEnclosingModule0(n))
|
||||
or
|
||||
not exists(getEnclosingModule0(n)) and
|
||||
result = TFile(n.getLocation().getFile())
|
||||
}
|
||||
|
||||
cached
|
||||
module NewType {
|
||||
cached
|
||||
|
||||
@@ -76,7 +76,7 @@ class Type extends TType {
|
||||
p2 = classPredCandidate(this, name, arity)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
cached
|
||||
PredicateOrBuiltin getClassPredicate(string name, int arity) {
|
||||
result = classPredCandidate(this, name, arity) and
|
||||
not getClassPredicate1(name, arity, _, result)
|
||||
|
||||
@@ -72,7 +72,9 @@ private module Cached {
|
||||
predicate resolveVariable(Identifier i, VarDef decl) { scopeOf(i).containsVar(decl, getName(i)) }
|
||||
|
||||
cached
|
||||
predicate resolveField(Identifier i, VarDef decl) { scopeOf(i).containsField(decl, getName(i)) }
|
||||
predicate resolveField(Identifier i, VarDef decl) {
|
||||
scopeOf(i).containsField(decl, pragma[only_bind_into](getName(i)))
|
||||
}
|
||||
}
|
||||
|
||||
import Cached
|
||||
|
||||
Reference in New Issue
Block a user