- try:
- index = accumulators.string_literal_list.index(value)
- except ValueError:
- index = len(accumulators.string_literal_list)
- accumulators.string_literal_list.append(value)
-
- return CStringLiteral(index=index, value=value)
-
- LITERAL_TYPE_MAPPING = {
- parsing.FurIntegerLiteralExpression: CIntegerLiteral,
- }
-
- if type(expression) in LITERAL_TYPE_MAPPING:
- return LITERAL_TYPE_MAPPING[type(expression)](value=expression.value)
-
- if isinstance(expression, parsing.FurInfixExpression):
- if expression.order == 'equality_level':
- return transform_equality_level_expression(accumulators, expression)
-
- INFIX_OPERATOR_TO_FUNCTION_NAME = {
- '+': 'add',
- '-': 'subtract',
- '*': 'multiply',
- '//': 'integerDivide',
- '%': 'modularDivide',
- 'and': 'and',
- 'or': 'or',
- }
-
- return CFunctionCallForFurInfixOperator(
- name=INFIX_OPERATOR_TO_FUNCTION_NAME[expression.operator],
- left=transform_expression(accumulators, expression.left),
- right=transform_expression(accumulators, expression.right),
- )
-
- # TODO Handle all possible types in this form
+def transform_list_construct_expression(accumulators, expression):
+ return CListConstructExpression(allocate=expression.allocate)
+
+def transform_list_append_statement(accumulators, expression):
+ return CListAppendStatement(
+ list_expression=transform_expression(accumulators, expression.list_expression),
+ item_expression=transform_expression(accumulators, expression.item_expression),
+ )
+
+def transform_expression(accumulators, expression):