-INFIX_OPERATOR_TO_DECLARATION = {
- '+': CInfixDeclaration(name='add', in_type='integer', out_type='integer', operator='+'),
- '-': CInfixDeclaration(name='subtract', in_type='integer', out_type='integer', operator='-'),
- '*': CInfixDeclaration(name='multiply', in_type='integer', out_type='integer', operator='*'),
- '//': CInfixDeclaration(name='integerDivide', in_type='integer', out_type='integer', operator='/'),
- '%': CInfixDeclaration(name='modularDivide', in_type='integer', out_type='integer', operator='%'),
- 'and': CInfixDeclaration(name='and', in_type='boolean', out_type='boolean', operator='&&'),
- 'or': CInfixDeclaration(name='or', in_type='boolean', out_type='boolean', operator='||'),
- '==': CInfixDeclaration(name='equals', in_type='integer', out_type='boolean', operator='=='),
- '!=': CInfixDeclaration(name='notEquals', in_type='integer', out_type='boolean', operator='!='),
- '<=': CInfixDeclaration(name='lessThanOrEqual', in_type='integer', out_type='boolean', operator='<='),
- '>=': CInfixDeclaration(name='greaterThanOrEqual', in_type='integer', out_type='boolean', operator='>='),
- '<': CInfixDeclaration(name='lessThan', in_type='integer', out_type='boolean', operator='<'),
- '>': CInfixDeclaration(name='greaterThan', in_type='integer', out_type='boolean', operator='>'),
-}
-
-def transform_comparison_level_expression(accumulators, expression):
- accumulators.operator_set.add(INFIX_OPERATOR_TO_DECLARATION[expression.operator])
-
- # Transform expressions like 1 < 2 < 3 into expressions like 1 < 2 && 2 < 3
- if isinstance(expression.left, parsing.FurInfixExpression) and expression.left.order == 'comparison_level':
- left = transform_comparison_level_expression(
- accumulators,
- expression.left
- )