diff --git a/ql/src/codeql_ql/ast/internal/Module.qll b/ql/src/codeql_ql/ast/internal/Module.qll index 47f91122706..1443876c30d 100644 --- a/ql/src/codeql_ql/ast/internal/Module.qll +++ b/ql/src/codeql_ql/ast/internal/Module.qll @@ -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 diff --git a/ql/src/codeql_ql/ast/internal/Variable.qll b/ql/src/codeql_ql/ast/internal/Variable.qll index eb3659cef7c..8b8d25d955e 100644 --- a/ql/src/codeql_ql/ast/internal/Variable.qll +++ b/ql/src/codeql_ql/ast/internal/Variable.qll @@ -72,7 +72,7 @@ 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