aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreterbase.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-12-02 22:40:43 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-12-04 23:44:17 +0200
commit58b838a80bfe1d3307e730c293ce91cb93b332c9 (patch)
treed4a385b084b63872a0768a0f439a4ab9bc794932 /mesonbuild/interpreterbase.py
parentc17a80f47b772d759aeb0878aa767a768a6fdd0c (diff)
downloadmeson-58b838a80bfe1d3307e730c293ce91cb93b332c9.zip
meson-58b838a80bfe1d3307e730c293ce91cb93b332c9.tar.gz
meson-58b838a80bfe1d3307e730c293ce91cb93b332c9.tar.bz2
Can specify keyword arguments with a dict.
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r--mesonbuild/interpreterbase.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index 66e9dd6..1594594 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -749,6 +749,7 @@ The result of this is undefined and will become a hard error in a future Meson r
except IndexError:
raise InterpreterException('Index %d out of bounds of array of size %d.' % (index, len(iobject)))
+
def function_call(self, node):
func_name = node.func_name
(posargs, kwargs) = self.reduce_arguments(node.args)
@@ -990,7 +991,20 @@ The result of this is undefined and will become a hard error in a future Meson r
a = args.kwargs[key]
reduced_kw[key] = self.evaluate_statement(a)
self.argument_depth -= 1
- return reduced_pos, reduced_kw
+ final_kw = self.expand_default_kwargs(reduced_kw)
+ return reduced_pos, final_kw
+
+ def expand_default_kwargs(self, kwargs):
+ if 'kwargs' not in kwargs:
+ return kwargs
+ to_expand = kwargs.pop('kwargs')
+ if not isinstance(to_expand, dict):
+ raise InterpreterException('Value of "kwarg" must be dictionary.')
+ for k, v in to_expand.items():
+ if k in kwargs:
+ raise InterpreterException('Entry "{}" defined both as a keyword argument and in a "kwarg" entry.'.format(k))
+ kwargs[k] = v
+ return kwargs
def assignment(self, node):
assert(isinstance(node, mparser.AssignmentNode))