summaryrefslogtreecommitdiff
path: root/xmake/core/base/interpreter.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-07-17 22:18:46 +0800
committerruki <[email protected]>2019-07-17 07:52:42 +0800
commitb79aa8f838f8140b2512d65afc98ad7fca62a91f (patch)
treecc87c790432dcf396499fe6296634087015ad2aa /xmake/core/base/interpreter.lua
parente794a5c263c8abdfed62964fe22f38863fad32a1 (diff)
fix interpreter filter
Diffstat (limited to 'xmake/core/base/interpreter.lua')
-rw-r--r--xmake/core/base/interpreter.lua56
1 files changed, 26 insertions, 30 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index 02fcfe8da..89dd7d5c1 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -412,7 +412,7 @@ function interpreter:_clear()
end
-- filter values
-function interpreter:_filter(values)
+function interpreter:_filter(values, level)
-- check
assert(self and values ~= nil)
@@ -423,52 +423,48 @@ function interpreter:_filter(values)
return values
end
- -- done
- local results = {}
+ -- init level
+ if level == nil then
+ level = 0
+ end
+
+ -- filter keyvalues
if table.is_dictionary(values) then
- -- filter keyvalues
+ local results = {}
for key, value in pairs(values) do
+ key = filter:handle(key)
if type(value) == "string" then
- results[filter:handle(key)] = filter:handle(value)
- elseif type(value) == "table" then
- results[filter:handle(key)] = self:_filter(value)
+ results[key] = filter:handle(value)
+ elseif type(value) == "table" and level < 1 then
+ results[key] = self:_filter(value, level + 1) -- only filter 2 levels for table values
else
- results[filter:handle(key)] = value
+ results[key] = value
end
+ values = results
end
else
- for _, value in ipairs(table.wrap(values)) do
+ -- filter value or arrays
+ values = table.wrap(values)
+ for idx = 1, table.maxn(values) do
- -- string?
+ local value = values[idx]
if type(value) == "string" then
-
- -- filter value
value = filter:handle(value)
-
- -- array?
elseif table.is_array(value) then
-
- -- replace values
- local values = {}
- for _, v in ipairs(value) do
+ for i = 1, table.maxn(value) do
+ local v = value[i]
if type(v) == "string" then
- table.insert(values, filter:handle(v))
- elseif type(v) == "table" then
- table.insert(values, self:_filter(v))
- else
- table.insert(values, v)
+ v = filter:handle(v)
+ elseif type(v) == "table" and level < 1 then
+ v = self:_filter(v, level + 1)
end
+ value[i] = v
end
- value = values
end
-
- -- append value
- table.insert(results, value)
+ values[idx] = value
end
end
-
- -- ok?
- return results
+ return values
end
-- handle scope data