+ for item_expression in expression.item_expression_list:
+ counter, item_expression_prestatements, normalized = normalize_expression(
+ counter,
+ item_expression,
+ )
+
+ for p in item_expression_prestatements:
+ prestatements.append(p)
+
+ prestatements.append(
+ NormalPushStatement(
+ expression=normalized,
+ )
+ )
+
+ return (
+ counter,
+ tuple(prestatements),
+ NormalListConstructExpression(allocate=len(expression.item_expression_list)),
+ )
+
+def normalize_string_literal_expression(counter, expression):
+ return (
+ counter,
+ (),
+ NormalStringLiteralExpression(string=expression.string),
+ )
+
+NormalStructureLiteralExpression = collections.namedtuple(
+ 'NormalStructureLiteralExpression',
+ (
+ 'field_count',
+ ),
+)
+
+def normalize_structure_literal_expression(counter, expression):
+ prestatements = []
+
+ for field in expression.fields:
+ counter, field_expression_prestatements, field_expression = normalize_expression(
+ counter,
+ field.expression,
+ )
+
+ for p in field_expression_prestatements:
+ prestatements.append(p)
+
+ prestatements.append(NormalPushStatement(
+ expression=field_expression,
+ ))
+
+ prestatements.append(NormalPushStatement(
+ expression=NormalSymbolLiteralExpression(
+ symbol=field.symbol,
+ ),
+ ))
+
+ return (
+ counter,
+ tuple(prestatements),
+ NormalStructureLiteralExpression(
+ field_count=len(expression.fields),
+ ),
+ )
+
+def normalize_symbol_expression(counter, expression):
+ return (
+ counter,
+ (),
+ NormalSymbolExpression(symbol=expression.symbol),
+ )
+
+def normalize_function_call_expression(counter, expression):
+ prestatements = []
+
+ for argument in expression.argument_list: