summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-01-20 09:51:14 +0800
committerruki <[email protected]>2017-01-20 09:51:14 +0800
commitb028a68c3f65f827ae2b7ff0ad644a86bb4597fa (patch)
tree3b835fae8d638c2bcd47d6132ab93800a6eb78b3
parent526ae0745dc6b354171e61ac97ff49f4cd8259f9 (diff)
add dictionary for interpreter
-rw-r--r--xmake/core/base/interpreter.lua59
-rw-r--r--xmake/core/project/template.lua6
-rw-r--r--xmake/core/tool/linker.lua6
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