Make it easier to run without memory leak tests
[fur] / desugaring.py
index e671e04..47dfe6f 100644 (file)
@@ -27,6 +27,22 @@ DesugaredIntegerLiteralExpression = collections.namedtuple(
     ),
 )
 
+_DesugaredLambdaExpression = collections.namedtuple(
+    'DesugaredLambdaExpression',
+    (
+        'name',
+        'argument_name_list',
+        'statement_list',
+    ),
+)
+
+class DesugaredLambdaExpression(_DesugaredLambdaExpression):
+    def __new__(cls, *args, **kwargs):
+        if 'name' not in kwargs:
+            kwargs['name'] = None
+
+        return super(DesugaredLambdaExpression, cls).__new__(cls, *args, **kwargs)
+
 DesugaredListLiteralExpression = collections.namedtuple(
     'DesugaredListLiteralExpression',
     (
@@ -79,15 +95,6 @@ DesugaredExpressionStatement = collections.namedtuple(
     ),
 )
 
-DesugaredFunctionDefinitionStatement = collections.namedtuple(
-    'DesugaredFunctionDefinitionStatement',
-    (
-        'name',
-        'argument_name_list',
-        'statement_list',
-    ),
-)
-
 DesugaredProgram = collections.namedtuple(
     'DesugaredProgram',
     (
@@ -187,6 +194,12 @@ def desugar_integer_literal_expression(expression):
         integer=expression.integer,
     )
 
+def desugar_lambda_expression(expression):
+    return DesugaredLambdaExpression(
+        argument_name_list=expression.argument_name_list,
+        statement_list=tuple(desugar_statement(s) for s in expression.statement_list),
+    )
+
 def desugar_list_item_expression(expression):
     return DesugaredFunctionCallExpression(
         metadata=expression.metadata,
@@ -244,6 +257,7 @@ def desugar_expression(expression):
         parsing.FurIfExpression: desugar_if_expression,
         parsing.FurInfixExpression: desugar_infix_expression,
         parsing.FurIntegerLiteralExpression: desugar_integer_literal_expression,
+        parsing.FurLambdaExpression: desugar_lambda_expression,
         parsing.FurListItemExpression: desugar_list_item_expression,
         parsing.FurListLiteralExpression: desugar_list_literal_expression,
         parsing.FurNegationExpression: desugar_negation_expression,
@@ -264,10 +278,13 @@ def desugar_expression_statement(statement):
     )
 
 def desugar_function_definition_statement(statement):
-    return DesugaredFunctionDefinitionStatement(
-        name=statement.name,
-        argument_name_list=statement.argument_name_list,
-        statement_list=tuple(desugar_statement(s) for s in statement.statement_list),
+    return DesugaredAssignmentStatement(
+        target=statement.name,
+        expression=DesugaredLambdaExpression(
+            name=statement.name,
+            argument_name_list=statement.argument_name_list,
+            statement_list=tuple(desugar_statement(s) for s in statement.statement_list),
+        ),
     )
 
 def desugar_statement(statement):