aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/ast/interpreter.py
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-01-20 19:27:42 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2019-01-22 16:09:35 +0100
commit08da3873ddf81a97cdce782d8cde4b904280d8f5 (patch)
treecc6ec4dfb01b2e640867e9a93ea62dbacf303075 /mesonbuild/ast/interpreter.py
parent005a62491b7f93c08dc471ee16d8f9e3b1888f55 (diff)
downloadmeson-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.py29
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