]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Update lua-fun
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 17 Mar 2017 11:18:14 +0000 (11:18 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 17 Mar 2017 11:18:14 +0000 (11:18 +0000)
contrib/lua-fun/fun.lua

index 6a536d7594909cea742061a31e0a585f0e5e5033..bf291712b2fefaba0f7e71b42390ec5b1e4eea2b 100644 (file)
@@ -1,7 +1,7 @@
 ---
 --- Lua Fun - a high-performance functional programming library for LuaJIT
 ---
---- Copyright (c) 2013-2014 Roman Tsisyk <roman@tsisyk.com>
+--- Copyright (c) 2013-2017 Roman Tsisyk <roman@tsisyk.com>
 ---
 --- Distributed under the MIT/X11 License. See COPYING.md for more details.
 ---
@@ -9,6 +9,9 @@
 local exports = {}
 local methods = {}
 
+-- compatibility with Lua 5.1/5.2
+local unpack = rawget(table, "unpack") or unpack
+
 --------------------------------------------------------------------------------
 -- Tools
 --------------------------------------------------------------------------------
@@ -84,6 +87,8 @@ local string_gen = function(param, state)
     return state, r
 end
 
+local ipairs_gen = ipairs({}) -- get the generating function from ipairs
+
 local pairs_gen = pairs({ a = 0 }) -- get the generating function from pairs
 local map_gen = function(tab, key)
     local value
@@ -293,10 +298,10 @@ exports.rands = rands
 local nth = function(n, gen_x, param_x, state_x)
     assert(n > 0, "invalid first argument to nth")
     -- An optimization for arrays and strings
-    if gen_x == ipairs then
+    if gen_x == ipairs_gen then
         return param_x[n]
     elseif gen_x == string_gen then
-        if n < #param_x then
+        if n <= #param_x then
             return string.sub(param_x, n, n)
         else
             return nil
@@ -593,7 +598,7 @@ methods.reduce = methods.foldl
 exports.reduce = exports.foldl
 
 local length = function(gen, param, state)
-    if gen == ipairs or gen == string_gen then
+    if gen == ipairs_gen or gen == string_gen then
         return #param
     end
     local len = 0
@@ -938,7 +943,7 @@ local chain_gen_r2 = function(param, state, state_x, ...)
     if state_x == nil then
         local i = state[1]
         i = i + 1
-        if i > #param / 3 then
+        if param[3 * i - 1] == nil then
             return nil
         end
         local state_x = param[3 * i]
@@ -978,7 +983,7 @@ exports.chain = chain
 -- Operators
 --------------------------------------------------------------------------------
 
-operator = {
+local operator = {
     ----------------------------------------------------------------------------
     -- Comparison operators
     ----------------------------------------------------------------------------
@@ -1033,8 +1038,20 @@ methods.op = operator
 
 -- a special syntax sugar to export all functions to the global table
 setmetatable(exports, {
-    __call = function(t)
-        for k, v in pairs(t) do _G[k] = v end
+    __call = function(t, override)
+        for k, v in pairs(t) do
+            if _G[k] ~= nil then
+                local msg = 'function ' .. k .. ' already exists in global scope.'
+                if override then
+                    _G[k] = v
+                    print('WARNING: ' .. msg .. ' Overwritten.')
+                else
+                    print('NOTICE: ' .. msg .. ' Skipped.')
+                end
+            else
+                _G[k] = v
+            end
+        end
     end,
 })