diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-02 22:40:43 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-04 23:44:17 +0200 |
commit | 58b838a80bfe1d3307e730c293ce91cb93b332c9 (patch) | |
tree | d4a385b084b63872a0768a0f439a4ab9bc794932 /mesonbuild/interpreterbase.py | |
parent | c17a80f47b772d759aeb0878aa767a768a6fdd0c (diff) | |
download | meson-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.py | 16 |
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)) |