X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=desugaring.py;h=47dfe6fd1e5961264776b393c4da5510e3860e25;hp=c951fd5d830f27bb8f42e0745a0386f9abe5f9a2;hb=4d6f362ca35cd00803b1a79e03985301bcfbeea8;hpb=aa339c441f43849a8cae256aa130278ca7618b7e diff --git a/desugaring.py b/desugaring.py index c951fd5..47dfe6f 100644 --- a/desugaring.py +++ b/desugaring.py @@ -27,14 +27,22 @@ DesugaredIntegerLiteralExpression = collections.namedtuple( ), ) -DesugaredLambdaExpression = 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', ( @@ -87,15 +95,6 @@ DesugaredExpressionStatement = collections.namedtuple( ), ) -DesugaredFunctionDefinitionStatement = collections.namedtuple( - 'DesugaredFunctionDefinitionStatement', - ( - 'name', - 'argument_name_list', - 'statement_list', - ), -) - DesugaredProgram = collections.namedtuple( 'DesugaredProgram', ( @@ -279,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):