X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fiterators.lua;h=bd150ff28cd3572ca407274a9bf4df2276e827df;hb=65e4b7b33de42357340f2fe9733807c8b9d57219;hp=aa9c3ec06a2756c404a2f5a6b1a60e6b81469bd6;hpb=f07f727a9af9c34196d21b1e3c9dcbba31796bba;p=prosody.git diff --git a/util/iterators.lua b/util/iterators.lua index aa9c3ec0..bd150ff2 100644 --- a/util/iterators.lua +++ b/util/iterators.lua @@ -11,8 +11,9 @@ local it = {}; local t_insert = table.insert; -local select, unpack, next = select, unpack, next; -local function pack(...) return { n = select("#", ...), ... }; end +local select, next = select, next; +local unpack = table.unpack or unpack; --luacheck: ignore 113 +local pack = table.pack or function (...) return { n = select("#", ...), ... }; end -- Reverse an iterator function it.reverse(f, s, var) @@ -22,18 +23,18 @@ function it.reverse(f, s, var) while true do local ret = { f(s, var) }; var = ret[1]; - if var == nil then break; end + if var == nil then break; end t_insert(results, 1, ret); end -- Then return our reverse one local i,max = 0, #results; - return function (results) - if i= n then return nil; end c = c + 1; - return f(s, var); - end, s; + return f(_s, _var); + end, s, var; end -- Skip the first n items an iterator returns function it.skip(n, f, s, var) - for i=1,n do + for _ = 1, n do var = f(s, var); end return f, s, var; @@ -109,7 +119,7 @@ function it.tail(n, f, s, var) while true do local ret = pack(f(s, var)); var = ret[1]; - if var == nil then break; end + if var == nil then break; end results[(count%n)+1] = ret; count = count + 1; end @@ -131,11 +141,11 @@ function it.filter(filter, f, s, var) local filter_value = filter; function filter(x) return x ~= filter_value; end end - return function (s, var) + return function (_s, _var) local ret; - repeat ret = pack(f(s, var)); - var = ret[1]; - until var == nil or filter(unpack(ret, 1, ret.n)); + repeat ret = pack(f(_s, _var)); + _var = ret[1]; + until _var == nil or filter(unpack(ret, 1, ret.n)); return unpack(ret, 1, ret.n); end, s, var; end @@ -153,10 +163,10 @@ end -- Convert the values returned by an iterator to an array function it.to_array(f, s, var) - local t, var = {}; + local t = {}; while true do var = f(s, var); - if var == nil then break; end + if var == nil then break; end t_insert(t, var); end return t; @@ -168,7 +178,7 @@ function it.to_table(f, s, var) local t, var2 = {}; while true do var, var2 = f(s, var); - if var == nil then break; end + if var == nil then break; end t[var] = var2; end return t;