diff options
| author | ruki <[email protected]> | 2017-01-20 09:51:14 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-01-20 09:51:14 +0800 |
| commit | b028a68c3f65f827ae2b7ff0ad644a86bb4597fa (patch) | |
| tree | 3b835fae8d638c2bcd47d6132ab93800a6eb78b3 | |
| parent | 526ae0745dc6b354171e61ac97ff49f4cd8259f9 (diff) | |
add dictionary for interpreter
| -rw-r--r-- | xmake/core/base/interpreter.lua | 59 | ||||
| -rw-r--r-- | xmake/core/project/template.lua | 6 | ||||
| -rw-r--r-- | xmake/core/tool/linker.lua | 6 |
3 files changed, 30 insertions, 41 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua index 1220aa5e7..87932e61a 100644 --- a/xmake/core/base/interpreter.lua +++ b/xmake/core/base/interpreter.lua @@ -1072,61 +1072,49 @@ function interpreter:api_register_after_script(scope_kind, ...) self:_api_register_xxx_values(scope_kind, "after", implementation, ...) end --- register api for set_keyvalues -function interpreter:api_register_set_keyvalues(scope_kind, ...) +-- register api for set_dictionary +function interpreter:api_register_set_dictionary(scope_kind, ...) -- check assert(self) -- define implementation - local implementation = function (self, scope, name, ...) + local implementation = function (self, scope, name, dict_or_key, value) - -- update keyvalues? - scope[name] = {} - table.insert(scope[name], {...}) + -- check + if type(dict_or_key) == "table" then + scope[name] = dict_or_key + elseif type(dict_or_key) == "string" and value ~= nil then + scope[name] = {dict_or_key = value} + else + -- error + os.raise("set_%s(%s): invalid value type!", name, type(dict)) + end end -- register implementation self:_api_register_xxx_values(scope_kind, "set", implementation, ...) end --- register api for add_keyvalues -function interpreter:api_register_add_keyvalues(scope_kind, ...) +-- register api for add_dictionary +function interpreter:api_register_add_dictionary(scope_kind, ...) -- check assert(self) -- define implementation - local implementation = function (self, scope, name, ...) + local implementation = function (self, scope, name, dict_or_key, value) - -- append keyvalues? + -- check scope[name] = scope[name] or {} - - -- the values - local values = {...} - local count = #values - - -- check count - if (count % 2) == 1 then - os.raise("add_%s() values must be key-value pair!", name) - end - - -- done - local i = 0 - local keyvalues = scope[name] - while i + 2 <= count do - - -- the key and value - local key = values[i + 1] - local val = values[i + 2] - - -- insert key and value - keyvalues[key] = val - - -- next pair - i = i + 2 + if type(dict_or_key) == "table" then + table.join2(scope[name], dict_or_key) + elseif type(dict_or_key) == "string" and value ~= nil then + scope[name][dict_or_key] = value + else + -- error + os.raise("add_%s(%s): invalid value type!", name, type(dict)) end - end -- register implementation @@ -1145,7 +1133,6 @@ function interpreter:api_register_set_pathes(scope_kind, ...) -- update values? scope[name] = {} table.join2(scope[name], self:_api_translate_pathes(...)) - end -- register implementation diff --git a/xmake/core/project/template.lua b/xmake/core/project/template.lua index 7e617c777..cdcefd414 100644 --- a/xmake/core/project/template.lua +++ b/xmake/core/project/template.lua @@ -60,10 +60,12 @@ function template._interpreter() -- add_xxx , "add_macrofiles" } - , keyvalues = + , dictionary = { + -- set_xxx + "set_macros" -- add_xxx - "add_macros" + , "add_macros" } , script = { diff --git a/xmake/core/tool/linker.lua b/xmake/core/tool/linker.lua index 360fe6ef3..b1c9d2c18 100644 --- a/xmake/core/tool/linker.lua +++ b/xmake/core/tool/linker.lua @@ -198,14 +198,14 @@ function linker:_addflags_from_platform(flags) end -- add flags from the compiler -function linker:_addflags_from_compiler(flags, srckinds) +function linker:_addflags_from_compiler(flags, sourcekinds) -- done local flags_of_compiler = {} - for _, srckind in ipairs(table.wrap(srckinds)) do + for _, sourcekind in ipairs(table.wrap(sourcekinds)) do -- load compiler - local instance, errors = compiler.load(srckind) + local instance, errors = compiler.load(sourcekind) if instance then table.join2(flags_of_compiler, instance:get(self:_flagname())) end |
