aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/ast
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-09-26 11:09:23 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-10-06 22:37:18 +0200
commitaf0587cb490dfa2c2a00c2426c10d1de11d34fdd (patch)
treeea6cbdf3c861bebc3df145d4950211d45401dceb /mesonbuild/ast
parentb19530bd7dc99e0b5d71acd5cdf85af915b9ddcc (diff)
downloadmeson-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.py19
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