Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
+call(s, args, ret)
+frame.return
Line 81: Line 81:
end
end


function call(s, args, ret)
local function call(s, args, ret)
if ret then
if ret then
return ({get(s)(unpack(args))})[ret]
return ({get(s)(unpack(args))})[ret]
Line 113: Line 113:
--]]
--]]
function p.call(frame)
function p.call(frame)
return call(frame.args[1],
-- enclosing result in (), so that it will return only 1st element of result
pairs2ArrayWithFunc(tonumberOrString, ipairsAtOffset(frame.args, 1)),
return (get(frame.args[1])(
frame['return']
unpack(pairs2ArrayWithFunc(tonumberOrString, ipairsAtOffset(frame.args, 1)))
))
)
end
end


Line 127: Line 127:
--]]
--]]
function p.call_n(frame)
function p.call_n(frame)
return (get(frame.args[1])(
return call(frame.args[1],
unpack(pairs2ArrayWithFunc(tonumber, ipairsAtOffset(frame.args, 1)))
pairs2ArrayWithFunc(tonumber, ipairsAtOffset(frame.args, 1)),
frame['return']
))
)
end
end


Line 141: Line 142:
function p.call_s(frame)
function p.call_s(frame)
-- unpack() not work on metatable
-- 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 (get(frame.args[1])(unpack(frame.args, 2)))
return (get(frame.args[1])(
return call(frame.args[1],
unpack(pairs2Array(ipairsAtOffset(frame.args, 1)))
pairs2Array(ipairsAtOffset(frame.args, 1)),
frame['return']
))
)
end
end