diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-20 19:27:42 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-22 16:09:35 +0100 |
commit | 08da3873ddf81a97cdce782d8cde4b904280d8f5 (patch) | |
tree | cc6ec4dfb01b2e640867e9a93ea62dbacf303075 /mesonbuild/ast/interpreter.py | |
parent | 005a62491b7f93c08dc471ee16d8f9e3b1888f55 (diff) | |
download | meson-08da3873ddf81a97cdce782d8cde4b904280d8f5.zip meson-08da3873ddf81a97cdce782d8cde4b904280d8f5.tar.gz meson-08da3873ddf81a97cdce782d8cde4b904280d8f5.tar.bz2 |
Added target AST Interpreter support
Diffstat (limited to 'mesonbuild/ast/interpreter.py')
-rw-r--r-- | mesonbuild/ast/interpreter.py | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index 0323378..28f1150 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -170,16 +170,33 @@ class AstInterpreter(interpreterbase.InterpreterBase): def assignment(self, node): pass - def flatten_args(self, args): + def flatten_args(self, args, include_unknown_args: bool = False): # Resolve mparser.ArrayNode if needed flattend_args = [] + temp_args = [] if isinstance(args, mparser.ArrayNode): - args = [x.value for x in args.args.arguments] + args = [x for x in args.args.arguments] + elif isinstance(args, mparser.ArgumentNode): + args = [x for x in args.arguments] for i in args: if isinstance(i, mparser.ArrayNode): - flattend_args += [x.value for x in i.args.arguments] - elif isinstance(i, str): - flattend_args += [i] + temp_args += [x for x in i.args.arguments] else: - pass + temp_args += [i] + for i in temp_args: + if isinstance(i, mparser.ElementaryNode): + flattend_args += [i.value] + elif isinstance(i, (str, bool, int, float)) or include_unknown_args: + flattend_args += [i] return flattend_args + + def flatten_kwargs(self, kwargs: object, include_unknown_args: bool = False): + flattend_kwargs = {} + for key, val in kwargs.items(): + if isinstance(val, mparser.ElementaryNode): + flattend_kwargs[key] = val.value + elif isinstance(val, (mparser.ArrayNode, mparser.ArgumentNode)): + flattend_kwargs[key] = self.flatten_args(val, include_unknown_args) + elif isinstance(val, (str, bool, int, float)) or include_unknown_args: + flattend_kwargs[key] = val + return flattend_kwargs |