From 4bb80e039198ceb2e45bb51d46d7013eacc8f452 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 17 Jun 2021 10:40:03 +0200 Subject: perf: searchSameFields: return early when obj was already locked --- script/core/guide.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'script') diff --git a/script/core/guide.lua b/script/core/guide.lua index e4871060..c7a784b7 100644 --- a/script/core/guide.lua +++ b/script/core/guide.lua @@ -3016,7 +3016,7 @@ function m.searchSameFields(status, simple, mode) locks[start] = lock end if lock[obj] then - return + return false end lock[obj] = true queueLen = queueLen + 1 @@ -3032,13 +3032,17 @@ function m.searchSameFields(status, simple, mode) forces[queueLen] = force end end + return true end local function pushQueue(obj, start, force) if obj.type == 'getlocal' or obj.type == 'setlocal' then obj = obj.node end - appendQueue(obj, start, force) + if appendQueue(obj, start, force) == false then + -- no need to process the rest if obj is already locked + return + end if obj.type == 'local' and obj.ref then for _, ref in ipairs(obj.ref) do appendQueue(ref, start, force) -- cgit v1.2.3