From 4bbd06f51fedb02a8c6ba3cd1707131fe199c6c0 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 31 May 2021 08:06:49 +0000 Subject: [PATCH] improve performance of module resolution --- ql/src/codeql_ql/ast/internal/Module.qll | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ql/src/codeql_ql/ast/internal/Module.qll b/ql/src/codeql_ql/ast/internal/Module.qll index 210e7f6b352..2a3eeaeca20 100644 --- a/ql/src/codeql_ql/ast/internal/Module.qll +++ b/ql/src/codeql_ql/ast/internal/Module.qll @@ -186,13 +186,21 @@ private module Cached { predicate resolveModuleExpr(ModuleExpr me, FileOrModule m) { not m = TFile(any(File f | f.getExtension() = "ql")) and not exists(me.getQualifier()) and - definesModule(getEnclosingModule(me).getEnclosing*(), me.getName(), m, _) + exists(ContainerOrModule enclosing, string name | resolveModuleExprHelper(me, enclosing, name) | + definesModule(enclosing.getEnclosing*(), name, m, _) + ) or exists(FileOrModule mid | resolveModuleExpr(me.getQualifier(), mid) and definesModule(mid, me.getName(), m, true) ) } + + pragma[noinline] + private predicate resolveModuleExprHelper(ModuleExpr me, ContainerOrModule enclosing, string name) { + enclosing = getEnclosingModule(me) and + name = me.getName() + } } import Cached