🐐 __eq__ and precendence rules
This commit is contained in:
@@ -130,6 +130,9 @@ class ExpressionStatement(Node):
|
||||
def __init__(self, expression) -> None:
|
||||
self.expression = expression
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.expression == other.expression
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return self.expression.__repr__()
|
||||
|
||||
@@ -141,6 +144,9 @@ class DataArray(Node):
|
||||
def __init__(self, content) -> None:
|
||||
self.content = content
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.content == other.content
|
||||
|
||||
def __repr__(self) -> str:
|
||||
content_string = rep_join(self.content)
|
||||
return f"Array([{content_string}])"
|
||||
@@ -158,6 +164,9 @@ class DataRangeArray(Node):
|
||||
self.from_value = from_value
|
||||
self.to_value = to_value
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.from_value == other.from_value and self.to_value == other.to_value
|
||||
|
||||
def __repr__(self) -> str:
|
||||
content_string = rep_join([self.from_value, self.to_value])
|
||||
return f"RangeArray([{content_string}])"
|
||||
@@ -172,6 +181,9 @@ class String(Node):
|
||||
def __init__(self, value) -> None:
|
||||
self.value = value
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.value == other.value
|
||||
|
||||
def __repr__(self):
|
||||
return f"String({self.value})"
|
||||
|
||||
@@ -183,6 +195,9 @@ class Numeral(Node):
|
||||
def __init__(self, value) -> None:
|
||||
self.value = value
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.value == other.value
|
||||
|
||||
def __repr__(self):
|
||||
return f"Numeral({self.value})"
|
||||
|
||||
@@ -194,6 +209,9 @@ class Bool(Node):
|
||||
def __init__(self, value) -> None:
|
||||
self.value = value
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.value == other.value
|
||||
|
||||
def __repr__(self):
|
||||
return f"Bool({self.value})"
|
||||
|
||||
@@ -205,6 +223,9 @@ class ModuleCall(BaseBox):
|
||||
def __init__(self, module_name) -> None:
|
||||
self.module_name = module_name
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.module_name == other.module_name
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"{self.module_name}"
|
||||
|
||||
@@ -213,6 +234,9 @@ class ID(Node):
|
||||
def __init__(self, name: str) -> None:
|
||||
self.name = name
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.name == other.name
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"ID({self.name})"
|
||||
|
||||
@@ -225,6 +249,9 @@ class Designa(Node):
|
||||
self.id = variable
|
||||
self.value = value
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.id == other.id and self.value == other.value
|
||||
|
||||
def __repr__(self) -> str:
|
||||
id_string = repr(self.id).replace('\n', '\n ')
|
||||
value_string = repr(self.value).replace('\n', '\n ')
|
||||
@@ -242,6 +269,9 @@ class Defini(Node):
|
||||
self.parameters = parameters
|
||||
self.statements = statements
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.name == other.name and self.parameters == other.parameters and self.statements == other.statements
|
||||
|
||||
def __repr__(self) -> str:
|
||||
parameter_string = f"parameters([{rep_join(self.parameters)}])"
|
||||
statements_string = f"statements([{rep_join(self.statements)}])"
|
||||
@@ -259,6 +289,9 @@ class Redi(Node):
|
||||
def __init__(self, values) -> None:
|
||||
self.values = values
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.values == other.values
|
||||
|
||||
def __repr__(self) -> str:
|
||||
values_string = f"[{rep_join(self.values)}]"
|
||||
return f"Redi({values_string})"
|
||||
@@ -276,6 +309,9 @@ class Redi(Node):
|
||||
|
||||
|
||||
class Erumpe(Node):
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "Erumpe()"
|
||||
|
||||
@@ -285,6 +321,9 @@ class Erumpe(Node):
|
||||
|
||||
|
||||
class Nullus(Node):
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "Nullus()"
|
||||
|
||||
@@ -298,6 +337,9 @@ class BinOp(Node):
|
||||
self.right = right
|
||||
self.op = op
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.left == other.left and self.right == other.right and self.op == other.op
|
||||
|
||||
def __repr__(self) -> str:
|
||||
binop_string = rep_join([self.left, self.right, self.op])
|
||||
return f"BinOp({binop_string})"
|
||||
@@ -334,6 +376,9 @@ class UnaryMinus(Node):
|
||||
def __init__(self, expr):
|
||||
self.expr = expr
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.expr == other.expr
|
||||
|
||||
def __repr__(self):
|
||||
return f"UnaryMinus({self.expr!r})"
|
||||
|
||||
@@ -347,6 +392,9 @@ class ArrayIndex(Node):
|
||||
self.array = array
|
||||
self.index = index
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.array == other.array and self.index == other.index
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"ArrayIndex({self.array!r}, {self.index!r})"
|
||||
|
||||
@@ -366,6 +414,9 @@ class SiStatement(Node):
|
||||
self.statements = statements
|
||||
self.else_part = else_part
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.test == other.test and self.statements == other.statements and self.else_part == other.else_part
|
||||
|
||||
def __repr__(self) -> str:
|
||||
test = repr(self.test)
|
||||
statements = f"statements([{rep_join(self.statements)}])"
|
||||
@@ -390,6 +441,9 @@ class DumStatement(Node):
|
||||
self.test = test
|
||||
self.statements = statements
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.test == other.test and self.statements == other.statements
|
||||
|
||||
def __repr__(self) -> str:
|
||||
test = repr(self.test)
|
||||
statements = f"statements([{rep_join(self.statements)}])"
|
||||
@@ -418,6 +472,9 @@ class PerStatement(Node):
|
||||
self.variable_name = variable_name
|
||||
self.statements = statements
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.data_list == other.data_list and self.variable_name == other.variable_name and self.statements == other.statements
|
||||
|
||||
def __repr__(self) -> str:
|
||||
test = repr(self.data_list)
|
||||
variable_name = repr(self.variable_name)
|
||||
@@ -447,6 +504,9 @@ class Invoca(Node):
|
||||
self.name = name
|
||||
self.parameters = parameters
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.name == other.name and self.parameters == other.parameters
|
||||
|
||||
def __repr__(self) -> str:
|
||||
parameters_string = f"parameters([{rep_join(self.parameters)}])"
|
||||
invoca_string = rep_join([self.name, parameters_string])
|
||||
@@ -475,6 +535,9 @@ class BuiltIn(Node):
|
||||
self.builtin = builtin
|
||||
self.parameters = parameters
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.builtin == other.builtin and self.parameters == other.parameters
|
||||
|
||||
def __repr__(self) -> str:
|
||||
parameter_string = f"parameters([{rep_join(self.parameters)}])"
|
||||
builtin_string = rep_join([self.builtin, parameter_string])
|
||||
@@ -521,6 +584,9 @@ class Program(BaseBox):
|
||||
self.modules = module_calls
|
||||
self.statements = statements
|
||||
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other) and self.modules == other.modules and self.statements == other.statements
|
||||
|
||||
def __repr__(self) -> str:
|
||||
modules_string = f"modules([{rep_join(self.modules)}])"
|
||||
statements_string = f"statements([{rep_join(self.statements)}])"
|
||||
|
||||
Reference in New Issue
Block a user