summaryrefslogtreecommitdiff
path: root/script/vm/eachDef.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/vm/eachDef.lua')
-rw-r--r--script/vm/eachDef.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/script/vm/eachDef.lua b/script/vm/eachDef.lua
new file mode 100644
index 00000000..5ff58889
--- /dev/null
+++ b/script/vm/eachDef.lua
@@ -0,0 +1,40 @@
+local vm = require 'vm.vm'
+local guide = require 'parser.guide'
+local files = require 'files'
+local util = require 'utility'
+local await = require 'await'
+
+local function eachDef(source, deep)
+ local results = {}
+ local lock = vm.lock('eachDef', source)
+ if not lock then
+ return results
+ end
+
+ await.delay()
+
+ local clock = os.clock()
+ local myResults, count = guide.requestDefinition(source, vm.interface, deep)
+ if DEVELOP and os.clock() - clock > 0.1 then
+ log.warn('requestDefinition', count, os.clock() - clock, guide.getUri(source), util.dump(source, { deep = 1 }))
+ end
+ vm.mergeResults(results, myResults)
+
+ lock()
+
+ return results
+end
+
+function vm.getDefs(source, deep)
+ if guide.isGlobal(source) then
+ local key = guide.getKeyName(source)
+ return vm.getGlobalSets(key)
+ else
+ local cache = vm.getCache('eachDef')[source]
+ or eachDef(source, deep)
+ if deep then
+ vm.getCache('eachDef')[source] = cache
+ end
+ return cache
+ end
+end