diff options
| author | ruki <[email protected]> | 2019-07-17 22:18:46 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-07-17 07:52:42 +0800 |
| commit | b79aa8f838f8140b2512d65afc98ad7fca62a91f (patch) | |
| tree | cc87c790432dcf396499fe6296634087015ad2aa /xmake/core/base/interpreter.lua | |
| parent | e794a5c263c8abdfed62964fe22f38863fad32a1 (diff) | |
fix interpreter filter
Diffstat (limited to 'xmake/core/base/interpreter.lua')
| -rw-r--r-- | xmake/core/base/interpreter.lua | 56 |
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 |
