luci-compat: fix evaluating or()
and and()
datatype expressions
Fixes: #5705 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
315a592d9b
commit
03bb0e2493
1 changed files with 28 additions and 13 deletions
|
@ -13,36 +13,51 @@ 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
|
||||
i = i - 1
|
||||
elseif f(v, unpack(a)) then
|
||||
else
|
||||
i = i + 2
|
||||
local a = select(i-1, ...)
|
||||
if f(v, unpack(a)) then
|
||||
return true
|
||||
end
|
||||
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
|
||||
else
|
||||
i = i + 2
|
||||
local a = select(i-1, ...)
|
||||
if not f(v, unpack(a)) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue