parser: simplify Assignment and PlusAssignment nodes
This commit is contained in:
parent
02ff9553db
commit
0f4891cdf4
|
@ -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…
Reference in New Issue