Vertical bar removed from syntax of vararg table
The syntax 'function foo (a, b, ...arg)' is already used by JavaScript for this same semantics, so it seems natural to use the same notation in Lua.
This commit is contained in:
@@ -310,7 +310,7 @@ do -- testing presence of second argument
|
||||
local function foo (howtoclose, obj, n)
|
||||
local ca -- copy of 'a' visible inside its close metamethod
|
||||
do
|
||||
local a <close> = func2close(function (... | t)
|
||||
local a <close> = func2close(function (...t)
|
||||
assert(select("#", ...) == n)
|
||||
assert(t.n == n and t[1] == ca and (t.n < 2 or t[2] == obj))
|
||||
ca = 15 -- final value to be returned if howtoclose=="scope"
|
||||
@@ -910,7 +910,7 @@ do
|
||||
|
||||
local extrares -- result from extra yield (if any)
|
||||
|
||||
local function check (body, extra, ...|t)
|
||||
local function check (body, extra, ...t)
|
||||
local co = coroutine.wrap(body)
|
||||
if extra then
|
||||
extrares = co() -- runs until first (extra) yield
|
||||
|
||||
@@ -126,13 +126,13 @@ testamem("coroutine creation", function()
|
||||
end)
|
||||
|
||||
do -- vararg tables
|
||||
local function pack (... | t) return t end
|
||||
local function pack (...t) return t end
|
||||
local b = testamem("vararg table", function ()
|
||||
return pack(10, 20, 30, 40, "hello")
|
||||
end)
|
||||
assert(b.aloc == 3) -- new table uses three memory blocks
|
||||
-- table optimized away
|
||||
local function sel (n, ...|arg) return arg[n] + arg.n end
|
||||
local function sel (n, ...arg) return arg[n] + arg.n end
|
||||
local b = testamem("optimized vararg table",
|
||||
function () return sel(2.0, 20, 30) end)
|
||||
assert(b.res == 32 and b.aloc == 0) -- no memory needed for this case
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
print('testing vararg')
|
||||
|
||||
local function f (a, ...|t)
|
||||
local function f (a, ...t)
|
||||
local x = {n = select('#', ...), ...}
|
||||
assert(x.n == t.n)
|
||||
for i = 1, x.n do
|
||||
@@ -20,7 +20,7 @@ local function c12 (...)
|
||||
return res, 2
|
||||
end
|
||||
|
||||
local function vararg (... | t) return t end
|
||||
local function vararg (... t) return t end
|
||||
|
||||
local call = function (f, args) return f(table.unpack(args, 1, args.n)) end
|
||||
|
||||
@@ -153,8 +153,8 @@ end
|
||||
|
||||
|
||||
do -- vararg parameter used in nested functions
|
||||
local function foo (... | tab1)
|
||||
return function (... | tab2)
|
||||
local function foo (...tab1)
|
||||
return function (...tab2)
|
||||
return {tab1, tab2}
|
||||
end
|
||||
end
|
||||
@@ -165,11 +165,11 @@ do -- vararg parameter used in nested functions
|
||||
end
|
||||
|
||||
do -- vararg parameter is read-only
|
||||
local st, msg = load("return function (... | t) t = 10 end")
|
||||
local st, msg = load("return function (... t) t = 10 end")
|
||||
assert(string.find(msg, "const variable 't'"))
|
||||
|
||||
local st, msg = load[[
|
||||
local function foo (... | extra)
|
||||
local function foo (...extra)
|
||||
return function (...) extra = nil end
|
||||
end
|
||||
]]
|
||||
@@ -179,19 +179,19 @@ end
|
||||
|
||||
do -- _ENV as vararg parameter
|
||||
local st, msg = load[[
|
||||
local function aux (... | _ENV)
|
||||
local function aux (... _ENV)
|
||||
global <const> a
|
||||
a = 10
|
||||
end ]]
|
||||
assert(string.find(msg, "const variable 'a'"))
|
||||
|
||||
local function aux (... | _ENV)
|
||||
local function aux (..._ENV)
|
||||
global a; a = 10
|
||||
return a
|
||||
end
|
||||
assert(aux() == 10)
|
||||
|
||||
local function aux (... | _ENV)
|
||||
local function aux (... _ENV)
|
||||
global a = 10
|
||||
return a
|
||||
end
|
||||
@@ -200,7 +200,7 @@ end
|
||||
|
||||
|
||||
do -- access to vararg parameter
|
||||
local function notab (keys, t, ... | v)
|
||||
local function notab (keys, t, ...v)
|
||||
for _, k in pairs(keys) do
|
||||
assert(t[k] == v[k])
|
||||
end
|
||||
@@ -216,7 +216,7 @@ do -- access to vararg parameter
|
||||
assert(m == collectgarbage"count")
|
||||
|
||||
-- writing to the vararg table
|
||||
local function foo (... | t)
|
||||
local function foo (...t)
|
||||
t[1] = t[1] + 10
|
||||
return t[1]
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user