summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--modules/luci-compat/luasrc/cbi/datatypes.lua41
1 files changed, 28 insertions, 13 deletions
diff --git a/modules/luci-compat/luasrc/cbi/datatypes.lua b/modules/luci-compat/luasrc/cbi/datatypes.lua
index c1cf01f9cd..7ef12eaf32 100644
--- a/modules/luci-compat/luasrc/cbi/datatypes.lua
+++ b/modules/luci-compat/luasrc/cbi/datatypes.lua
@@ -13,34 +13,49 @@ module "luci.cbi.datatypes"
_M['or'] = function(v, ...)
- local i
- for i = 1, select('#', ...), 2 do
+ local i, n = 1, select('#', ...)
+ while i <= n do
local f = select(i, ...)
- local a = select(i+1, ...)
if type(f) ~= "function" then
- if f == v then
+ i = i + 1
+ local c = v
+ if type(f) == "number" then
+ c = tonumber(c)
+ end
+ if f == c then
+ return true
+ end
+ else
+ i = i + 2
+ local a = select(i-1, ...)
+ if f(v, unpack(a)) then
return true
end
- i = i - 1
- elseif f(v, unpack(a)) then
- return true
end
end
return false
end
_M['and'] = function(v, ...)
- local i
- for i = 1, select('#', ...), 2 do
+ local i, n = 1, select('#', ...)
+ while i <= n do
local f = select(i, ...)
- local a = select(i+1, ...)
if type(f) ~= "function" then
- if f ~= v then
+ i = i + 1
+ local c = v
+ if type(f) == "number" then
+ c = tonumber(c)
+ end
+ if f ~= c then
return false
end
i = i - 1
- elseif not f(v, unpack(a)) then
- return false
+ else
+ i = i + 2
+ local a = select(i-1, ...)
+ if not f(v, unpack(a)) then
+ return false
+ end
end
end
return true