Skip to content

Commit

Permalink
Remove to_bytes for Aggregate
Browse files Browse the repository at this point in the history
Ref: #964
  • Loading branch information
rssen committed May 5, 2022
1 parent 84f04f1 commit 8055f04
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 21 deletions.
21 changes: 3 additions & 18 deletions rflx/expression.py
Original file line number Diff line number Diff line change
Expand Up @@ -1571,15 +1571,9 @@ def __init__(self, *elements: Expr, location: Location = None) -> None:
self.elements = list(elements)

def __eq__(self, other: object) -> bool:
if (
isinstance(other, Aggregate)
and all((isinstance(v, Number) for v in self.elements))
and all((isinstance(v, Number) for v in other.elements))
):
return [v.value for v in self.elements if isinstance(v, Number)] == [
v.value for v in other.elements if isinstance(v, Number)
]
return super().__eq__(other)
if isinstance(other, Aggregate):
return self.elements == other.elements
return NotImplemented

def __hash__(self) -> int:
return hash(tuple(self.elements))
Expand Down Expand Up @@ -1618,15 +1612,6 @@ def simplified(self) -> Expr:
def length(self) -> Expr:
return Number(len(self.elements))

def to_bytes(self) -> bytes:
if not all((isinstance(element, Number) for element in self.elements)):
return NotImplemented
return b"".join(
element.value.to_bytes((element.value.bit_length() + 7) // 8, "big")
for element in self.elements
if isinstance(element, Number)
)

def ada_expr(self) -> ada.Expr:
return ada.Aggregate(*[e.ada_expr() for e in self.elements])

Expand Down
10 changes: 7 additions & 3 deletions rflx/pyrflx/typevalue.py
Original file line number Diff line number Diff line change
Expand Up @@ -1152,7 +1152,7 @@ def _calculate_checksum(self, checksum: "MessageValue.Checksum") -> int:
f"no callable checksum function provided"
)

arguments: ty.Dict[str, ty.Union[int, bytes, ty.Tuple[int, int]]] = {}
arguments: ty.Dict[str, ty.Union[int, bytes, ty.Tuple[int, int], ty.List[int]]] = {}
for expr_tuple in checksum.parameters:
if isinstance(expr_tuple.evaluated_expression, ValueRange):
assert isinstance(expr_tuple.evaluated_expression.lower, Number) and isinstance(
Expand All @@ -1163,7 +1163,11 @@ def _calculate_checksum(self, checksum: "MessageValue.Checksum") -> int:
expr_tuple.evaluated_expression.upper.value,
)
elif isinstance(expr_tuple.evaluated_expression, Aggregate):
arguments[str(expr_tuple.expression)] = expr_tuple.evaluated_expression.to_bytes()
arguments[str(expr_tuple.expression)] = [
v.value
for v in expr_tuple.evaluated_expression.elements
if isinstance(v, Number)
]
else:
assert isinstance(expr_tuple.evaluated_expression, Number)
arguments[str(expr_tuple.expression)] = expr_tuple.evaluated_expression.value
Expand Down Expand Up @@ -1370,7 +1374,7 @@ def subst(expression: Expr) -> Expr:
and isinstance(exp_value[0], IntegerValue)
):
return Aggregate(*[Number(e.value) for e in exp_value])
return NotImplemented
raise NotImplementedError
return expression

return expr.substituted(func=subst).substituted(func=subst).simplified()
Expand Down

0 comments on commit 8055f04

Please sign in to comment.