From b39bbd00881a3265486bff3003a2aed72730af08 Mon Sep 17 00:00:00 2001 From: Tom Lau Date: Fri, 24 May 2024 15:24:58 +0800 Subject: [PATCH] perf: Optimize `contains_call()` by adding memoization (#105) --- src/luacheck/stages/resolve_locals.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/luacheck/stages/resolve_locals.lua b/src/luacheck/stages/resolve_locals.lua index b47f0f93..be81c69f 100644 --- a/src/luacheck/stages/resolve_locals.lua +++ b/src/luacheck/stages/resolve_locals.lua @@ -79,18 +79,26 @@ local function in_scope(var, index) end local function contains_call(node) + if node._contains_call ~= nil then + -- return cached result + return node._contains_call + end + if node.tag == "Call" or node.tag == "Invoke" then + node._contains_call = true return true end if node.tag ~= "Function" then for _, sub_node in ipairs(node) do if type(sub_node) == 'table' and contains_call(sub_node) then + node._contains_call = true return true end end end + node._contains_call = false return false end