From af0587cb490dfa2c2a00c2426c10d1de11d34fdd Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Sun, 26 Sep 2021 11:09:23 +0200 Subject: 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. --- mesonbuild/ast/interpreter.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'mesonbuild/ast') 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 -- cgit v1.1