Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
p.call() use callWithTonumberOrStringOnPairs()
Removing commented out or broken code
Line 6: Line 6:
local reserved_function,reserved_contents
local reserved_function,reserved_contents
for k,v in pairs(parent.args or {}) do
for k,v in pairs(parent.args or {}) do
--if tonumber(v) then v=tonumber(v) end
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
-- debuglog=debuglog..k.."="..v.."</nowiki><br /><nowiki>"
end
end
for k,v in pairs(frame.args or {}) do
for k,v in pairs(frame.args or {}) do
--if tonumber(v) then v=tonumber(v) end
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
end
end
Line 36: Line 33:
if type(reserved_call)~="function" then
if type(reserved_call)~="function" then
return tostring(reserved_call)
return tostring(reserved_call)
elseif reserved_debug or not reserved_function then return mw.text.nowiki(debuglog)
else reserved_output={reserved_call(unpack(reserved_value))}
else reserved_output={reserved_call(unpack(reserved_value))}
return reserved_output[reserved_return or 1]
return reserved_output[reserved_return or 1]
Line 45: Line 41:
return tonumber(v) or v:gsub("^\\", "", 1)
return tonumber(v) or v:gsub("^\\", "", 1)
end
end

--local function tonumberOrStringOnPairs(...)
-- local args = {}
-- for _, v in ... do
-- --table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
-- table.insert(args, tonumberOrString(v))
-- end
-- return args
--end


local function callWithTonumberOrStringOnPairs(f, ...)
local function callWithTonumberOrStringOnPairs(f, ...)
Line 146: Line 133:
--]]
--]]
function p.call(frame)
function p.call(frame)
----local f = mw.text.trim(frame.args[1], '%s')
----local args = {}
----for _, v in ipairsAtOffset(frame.args, 1) do
---- --table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
---- table.insert(args, tonumberOrString(v))
----end
--local args = tonumberOrStringOnPairs(ipairsAtOffset(frame.args, 1))
----local G = _G
----for _ in mw.text.gsplit(
---- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*'
----) do
---- G = G[_]
----end
--return (get(frame.args[1])(unpack(args)))
return callWithTonumberOrStringOnPairs(get(frame.args[1]),
return callWithTonumberOrStringOnPairs(get(frame.args[1]),
ipairsAtOffset(frame.args, 1)
ipairsAtOffset(frame.args, 1)
Line 191: Line 164:
-- always treat it as string,
-- always treat it as string,
-- so 'obj.1' will mean obj['1'] rather obj[1]
-- so 'obj.1' will mean obj['1'] rather obj[1]
--local G = _G; for _ in mw.text.gsplit(
-- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*'
--) do
-- G = G[_]
--end
--return G
return get(frame.args[1])
return get(frame.args[1])
else
else
--local args = {}
local G = _G
local G = _G
for _, v in ipairs(frame.args) do
for _, v in ipairs(frame.args) do
--table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
--G = G[tonumber(v) or v:gsub("^\\", "", 1)]
G = G[tonumberOrString(v)]
G = G[tonumberOrString(v)]
end
end
--local G = _G; for _, v in ipairs(args) do
-- G = G[v]
--end
return G
return G
end
end