Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
fix
This module is complicated enough as is. You don't need to add even more tangential functions, when p.call was working perfectly fine for months
Line 42: Line 42:
end
end


local function pairs2ArrayWithFunc(f, ...)
local function callWithTonumberOrStringOnPairs(f, ...)
local args = {}
local args = {}
for _, v in ... do
for _, v in ... do
table.insert(args, f(v))
table.insert(args, tonumberOrString(v))
end
end
return args
return (f(unpack(args)))
end

local function pairs2Array(...)
local args = {}
for _, v in ... do
table.insert(args, v)
end
return args
end
end


Line 79: Line 71:
end
end
return G
return G
end

local function call(s, args, ret)
if ret then
return ({get(s)(unpack(args))})[tonumber(ret)]
end
return get(s)(unpack(args))
end
end


Line 113: Line 98:
--]]
--]]
function p.call(frame)
function p.call(frame)
return call(frame.args[1],
return callWithTonumberOrStringOnPairs(get(frame.args[1]),
pairs2ArrayWithFunc(tonumberOrString, ipairsAtOffset(frame.args, 1)),
ipairsAtOffset(frame.args, 1)
frame.args['return']
)
end

--[[
------------------------------------------------------------------------------------
-- call_n
--
-- Like call(), but passing all arguments as number
------------------------------------------------------------------------------------
--]]
function p.call_n(frame)
return call(frame.args[1],
pairs2ArrayWithFunc(tonumber, ipairsAtOffset(frame.args, 1)),
frame.args['return']
)
end

--[[
------------------------------------------------------------------------------------
-- call_s
--
-- Like call(), but passing all arguments as string (no conversion)
------------------------------------------------------------------------------------
--]]
function p.call_s(frame)
-- unpack() not work on metatable
-- enclosing result in (), so that it will return only 1st element of result
--return (get(frame.args[1])(unpack(frame.args, 2)))
return call(frame.args[1],
pairs2Array(ipairsAtOffset(frame.args, 1)),
frame.args['return']
)
)
end
end