Skip to content

Commit

Permalink
Remove duplicate code
Browse files Browse the repository at this point in the history
Ref. #282
  • Loading branch information
Alexander Senier authored and treiher committed Jul 23, 2020
1 parent 6ba9132 commit e125063
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions rflx/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,13 @@ def __resolve_type(expr: Expr) -> Optional[TypeExpr]:
assert righttype
return (lefttype, righttype)

def __invalid_relation(left: TypeExpr, right: TypeExpr) -> bool:
return (
(isinstance(left, Opaque) and not isinstance(right, (Opaque, Aggregate)))
or (isinstance(left, Array) and not isinstance(right, (Array, Aggregate)))
or (isinstance(left, Aggregate) and not isinstance(right, Composite))
)

for relation in expression.findall(lambda x: isinstance(x, Relation)):
assert isinstance(relation, Relation)
left, right = __resolve_types(
Expand All @@ -816,18 +823,9 @@ def __resolve_type(expr: Expr) -> Optional[TypeExpr]:
):
relation_error(relation, left, right)
elif isinstance(relation, (Equal, NotEqual)):
# pylint: disable=too-many-boolean-expressions
if (
(isinstance(left, Opaque) and not isinstance(right, (Opaque, Aggregate)))
or (isinstance(left, Array) and not isinstance(right, (Array, Aggregate)))
or (isinstance(left, Aggregate) and not isinstance(right, Composite))
):
if __invalid_relation(left, right):
relation_error(relation, left, right)
elif (
(not isinstance(left, (Opaque, Aggregate)) and isinstance(right, Opaque))
or (not isinstance(left, (Array, Aggregate)) and isinstance(right, Array))
or (not isinstance(left, Composite) and isinstance(right, Aggregate))
):
elif __invalid_relation(left=right, right=left):
relation_error(relation, left=right, right=left)
elif isinstance(left, Aggregate) and isinstance(right, Composite):
check_composite_element_range(relation, left, right)
Expand Down

0 comments on commit e125063

Please sign in to comment.