61 lines
946 B
Lua
61 lines
946 B
Lua
local compiler = require "core:bitwise/compiler"
|
|
|
|
local cache = { }
|
|
|
|
local cacheLength = 512
|
|
|
|
local function hashOfArgs(args)
|
|
local str = ""
|
|
|
|
for i = 1, #args do
|
|
str = str..args[i]
|
|
|
|
if i ~= #args then
|
|
str = str..';'
|
|
end
|
|
end
|
|
|
|
return str
|
|
end
|
|
|
|
local function execute(str, args, ...)
|
|
local hasArgs = args and type(args) == 'table'
|
|
|
|
local expArgs
|
|
|
|
if hasArgs then
|
|
expArgs = args
|
|
else
|
|
expArgs = nil
|
|
end
|
|
|
|
local argsHash = hasArgs and hashOfArgs(args) or ""
|
|
|
|
local func
|
|
|
|
if (#str + #argsHash) <= cacheLength then
|
|
if cache[argsHash] then
|
|
local fun = cache[argsHash][str]
|
|
|
|
if fun then return fun end
|
|
end
|
|
|
|
local comp = compiler(str, expArgs)
|
|
|
|
cache[argsHash] = { }
|
|
|
|
cache[argsHash][str] = comp
|
|
|
|
func = comp
|
|
else
|
|
func = compiler(str, expArgs)
|
|
end
|
|
|
|
if hasArgs or not args then
|
|
return func(...)
|
|
else
|
|
return func(args, ...)
|
|
end
|
|
end
|
|
|
|
return execute |