aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2023-08-25 09:58:32 -0400
committerCharles Brunet <charles.brunet@optelgroup.com>2023-09-11 07:51:18 -0400
commit0f4891cdf46e28d900cc35d57999fecff3ba8598 (patch)
tree4cefd1329a0b37e090de889382bc4089e3cb9eea /mesonbuild
parent02ff9553dbe09f3f2b7a93221dfd28fc53926d0e (diff)
downloadmeson-0f4891cdf46e28d900cc35d57999fecff3ba8598.zip
meson-0f4891cdf46e28d900cc35d57999fecff3ba8598.tar.gz
meson-0f4891cdf46e28d900cc35d57999fecff3ba8598.tar.bz2
parser: simplify Assignment and PlusAssignment nodes
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/cargo/builder.py2
-rw-r--r--mesonbuild/cmake/interpreter.py2
-rw-r--r--mesonbuild/interpreterbase/interpreterbase.py4
-rw-r--r--mesonbuild/mparser.py27
-rw-r--r--mesonbuild/rewriter.py4
5 files changed, 12 insertions, 27 deletions
diff --git a/mesonbuild/cargo/builder.py b/mesonbuild/cargo/builder.py
index 9c650b9..76d2e8b 100644
--- a/mesonbuild/cargo/builder.py
+++ b/mesonbuild/cargo/builder.py
@@ -172,7 +172,7 @@ def assign(value: mparser.BaseNode, varname: str, filename: str) -> mparser.Assi
:param filename: The filename
:return: An AssignmentNode
"""
- return mparser.AssignmentNode(filename, -1, -1, identifier(varname, filename), _symbol(filename, '='), value)
+ return mparser.AssignmentNode(identifier(varname, filename), _symbol(filename, '='), value)
def block(filename: str) -> mparser.CodeBlockNode:
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py
index 4f3b31e..88e5183 100644
--- a/mesonbuild/cmake/interpreter.py
+++ b/mesonbuild/cmake/interpreter.py
@@ -1021,7 +1021,7 @@ class CMakeInterpreter:
return MethodNode(self.subdir.as_posix(), 0, 0, obj, symbol('.'), id_node(name), symbol('('), args_n, symbol(')'))
def assign(var_name: str, value: BaseNode) -> AssignmentNode:
- return AssignmentNode(self.subdir.as_posix(), 0, 0, id_node(var_name), symbol('='), value)
+ return AssignmentNode(id_node(var_name), symbol('='), value)
# Generate the root code block and the project function call
root_cb = CodeBlockNode(token())
diff --git a/mesonbuild/interpreterbase/interpreterbase.py b/mesonbuild/interpreterbase/interpreterbase.py
index 5b07dc0..ea6e37c 100644
--- a/mesonbuild/interpreterbase/interpreterbase.py
+++ b/mesonbuild/interpreterbase/interpreterbase.py
@@ -192,6 +192,8 @@ class InterpreterBase:
self.current_node = cur
if isinstance(cur, mparser.FunctionNode):
return self.function_call(cur)
+ elif isinstance(cur, mparser.PlusAssignmentNode):
+ self.evaluate_plusassign(cur)
elif isinstance(cur, mparser.AssignmentNode):
self.assignment(cur)
elif isinstance(cur, mparser.MethodNode):
@@ -229,8 +231,6 @@ class InterpreterBase:
return self.evaluate_arithmeticstatement(cur)
elif isinstance(cur, mparser.ForeachClauseNode):
self.evaluate_foreach(cur)
- elif isinstance(cur, mparser.PlusAssignmentNode):
- self.evaluate_plusassign(cur)
elif isinstance(cur, mparser.IndexNode):
return self.evaluate_indexing(cur)
elif isinstance(cur, mparser.TernaryNode):
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py
index 7f329dd..ffe7750 100644
--- a/mesonbuild/mparser.py
+++ b/mesonbuild/mparser.py
@@ -530,7 +530,6 @@ class FunctionNode(BaseNode):
self.args = args
self.rpar = rpar
-
@dataclass(unsafe_hash=True)
class AssignmentNode(BaseNode):
@@ -538,28 +537,14 @@ class AssignmentNode(BaseNode):
operator: SymbolNode
value: BaseNode
- def __init__(self, filename: str, lineno: int, colno: int,
- var_name: IdNode, operator: SymbolNode, value: BaseNode):
- super().__init__(lineno, colno, filename)
- self.var_name = var_name
- self.operator = operator
- self.value = value
-
-
-@dataclass(unsafe_hash=True)
-class PlusAssignmentNode(BaseNode):
-
- var_name: IdNode
- operator: SymbolNode
- value: BaseNode
-
- def __init__(self, filename: str, lineno: int, colno: int,
- var_name: IdNode, operator: SymbolNode, value: BaseNode):
- super().__init__(lineno, colno, filename)
+ def __init__(self, var_name: IdNode, operator: SymbolNode, value: BaseNode):
+ super().__init__(var_name.lineno, var_name.colno, var_name.filename)
self.var_name = var_name
self.operator = operator
self.value = value
+class PlusAssignmentNode(AssignmentNode):
+ pass
@dataclass(unsafe_hash=True)
class ForeachClauseNode(BaseNode):
@@ -775,7 +760,7 @@ class Parser:
if not isinstance(left, IdNode):
raise ParseException('Plusassignment target must be an id.', self.getline(), left.lineno, left.colno)
assert isinstance(left.value, str)
- return self.create_node(PlusAssignmentNode, left.filename, left.lineno, left.colno, left, operator, value)
+ return self.create_node(PlusAssignmentNode, left, operator, value)
elif self.accept('assign'):
operator = self.create_node(SymbolNode, self.previous)
value = self.e1()
@@ -783,7 +768,7 @@ class Parser:
raise ParseException('Assignment target must be an id.',
self.getline(), left.lineno, left.colno)
assert isinstance(left.value, str)
- return self.create_node(AssignmentNode, left.filename, left.lineno, left.colno, left, operator, value)
+ return self.create_node(AssignmentNode, left, operator, value)
elif self.accept('questionmark'):
if self.in_ternary:
raise ParseException('Nested ternary operators are not allowed.',
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 64eb2f2..7527dab 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -818,14 +818,14 @@ class Rewriter:
src_arr_node = ArrayNode(_symbol('['), src_arg_node, _symbol(']'), 0, 0, 0, 0)
src_far_node = ArgumentNode(Token('string', filename, 0, 0, 0, None, ''))
src_fun_node = FunctionNode(filename, 0, 0, 0, 0, IdNode(Token('id', filename, 0, 0, 0, (0, 0), 'files')), _symbol('('), src_far_node, _symbol(')'))
- src_ass_node = AssignmentNode(filename, 0, 0, IdNode(Token('id', filename, 0, 0, 0, (0, 0), source_id)), _symbol('='), src_fun_node)
+ src_ass_node = AssignmentNode(IdNode(Token('id', filename, 0, 0, 0, (0, 0), source_id)), _symbol('='), src_fun_node)
src_arg_node.arguments = [StringNode(Token('string', filename, 0, 0, 0, None, x)) for x in cmd['sources']]
src_far_node.arguments = [src_arr_node]
# Build target
tgt_arg_node = ArgumentNode(Token('string', filename, 0, 0, 0, None, ''))
tgt_fun_node = FunctionNode(filename, 0, 0, 0, 0, IdNode(Token('id', filename, 0, 0, 0, (0, 0), cmd['target_type'])), _symbol('('), tgt_arg_node, _symbol(')'))
- tgt_ass_node = AssignmentNode(filename, 0, 0, IdNode(Token('id', filename, 0, 0, 0, (0, 0), target_id)), _symbol('='), tgt_fun_node)
+ tgt_ass_node = AssignmentNode(IdNode(Token('id', filename, 0, 0, 0, (0, 0), target_id)), _symbol('='), tgt_fun_node)
tgt_arg_node.arguments = [
StringNode(Token('string', filename, 0, 0, 0, None, cmd['target'])),
IdNode(Token('string', filename, 0, 0, 0, None, source_id))