diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-09-26 11:09:23 +0200 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-10-06 22:37:18 +0200 |
commit | af0587cb490dfa2c2a00c2426c10d1de11d34fdd (patch) | |
tree | ea6cbdf3c861bebc3df145d4950211d45401dceb /mesonbuild/ast | |
parent | b19530bd7dc99e0b5d71acd5cdf85af915b9ddcc (diff) | |
download | meson-af0587cb490dfa2c2a00c2426c10d1de11d34fdd.zip meson-af0587cb490dfa2c2a00c2426c10d1de11d34fdd.tar.gz meson-af0587cb490dfa2c2a00c2426c10d1de11d34fdd.tar.bz2 |
interpreter: Holderify arrays and dicts
This is the final refactoring for extracting the bultin object
logic out of Interpreterbase. I decided to do both arrays and
dicts in one go since splitting it would have been a lot more
confusing.
Diffstat (limited to 'mesonbuild/ast')
-rw-r--r-- | mesonbuild/ast/interpreter.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index 5998e5b..7954b9b 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -30,6 +30,15 @@ from ..interpreterbase import ( TYPE_nkwargs, ) +from ..interpreter import ( + Interpreter, + StringHolder, + BooleanHolder, + IntegerHolder, + ArrayHolder, + DictHolder, +) + from ..mparser import ( AndNode, ArgumentNode, @@ -202,6 +211,9 @@ class AstInterpreter(InterpreterBase): assert isinstance(node, mparser.FormatStringNode) return node.value + def evaluate_arraystatement(self, cur: mparser.ArrayNode) -> TYPE_nvar: + return self.reduce_arguments(cur.args)[0] + def evaluate_arithmeticstatement(self, cur: ArithmeticNode) -> int: self.evaluate_statement(cur.left) self.evaluate_statement(cur.right) @@ -364,18 +376,15 @@ class AstInterpreter(InterpreterBase): mkwargs = {} # type: T.Dict[str, TYPE_nvar] try: if isinstance(src, str): - from ..interpreter import Interpreter, StringHolder result = StringHolder(src, T.cast(Interpreter, self)).method_call(node.name, margs, mkwargs) elif isinstance(src, bool): - from ..interpreter import Interpreter, BooleanHolder result = BooleanHolder(src, T.cast(Interpreter, self)).method_call(node.name, margs, mkwargs) elif isinstance(src, int): - from ..interpreter import Interpreter, IntegerHolder result = IntegerHolder(src, T.cast(Interpreter, self)).method_call(node.name, margs, mkwargs) elif isinstance(src, list): - result = self.array_method_call(src, node.name, margs, mkwargs) + result = ArrayHolder(src, T.cast(Interpreter, self)).method_call(node.name, margs, mkwargs) elif isinstance(src, dict): - result = self.dict_method_call(src, node.name, margs, mkwargs) + result = DictHolder(src, T.cast(Interpreter, self)).method_call(node.name, margs, mkwargs) except mesonlib.MesonException: return None |