parser: simplify Assignment and PlusAssignment nodes

pull/12152/head
Charles Brunet 2 years ago
parent 02ff9553db
commit 0f4891cdf4
  1. 2
      mesonbuild/cargo/builder.py
  2. 2
      mesonbuild/cmake/interpreter.py
  3. 4
      mesonbuild/interpreterbase/interpreterbase.py
  4. 27
      mesonbuild/mparser.py
  5. 4
      mesonbuild/rewriter.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:

@ -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())

@ -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):

@ -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.',

@ -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))

Loading…
Cancel
Save