X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=desugaring.py;h=b04cf1ab7f7db06f19aa5652ce8559402b5db674;hp=47dfe6fd1e5961264776b393c4da5510e3860e25;hb=c4de9dca8a54bb5eb611a87b4d9fe36b0fe9a0b1;hpb=4d6f362ca35cd00803b1a79e03985301bcfbeea8 diff --git a/desugaring.py b/desugaring.py index 47dfe6f..b04cf1a 100644 --- a/desugaring.py +++ b/desugaring.py @@ -2,6 +2,14 @@ import collections import parsing +DesugaredBuiltinExpression = collections.namedtuple( + 'DesugaredBuiltinExpression', + ( + 'metadata', + 'symbol', + ), +) + DesugaredFunctionCallExpression = collections.namedtuple( 'DesugaredFunctionCallExpression', ( @@ -80,6 +88,14 @@ DesugaredSymbolExpression = collections.namedtuple( ), ) +DesugaredSymbolLiteralExpression = collections.namedtuple( + 'DesugaredSymbolLiteralExpression', + ( + 'metadata', + 'symbol', + ), +) + DesugaredAssignmentStatement = collections.namedtuple( 'DesugaredAssignmentStatement', ( @@ -158,7 +174,7 @@ def desugar_infix_expression(expression): ), argument_list=( desugar_expression(expression.left), - DesugaredStringLiteralExpression(string=expression.right.symbol), + desugar_symbol_literal_expression(expression.right), ), ) @@ -179,7 +195,7 @@ def desugar_infix_expression(expression): return DesugaredFunctionCallExpression( metadata=expression.metadata, - function=DesugaredSymbolExpression( + function=DesugaredBuiltinExpression( metadata=expression.metadata, symbol=function, ), @@ -203,7 +219,7 @@ def desugar_lambda_expression(expression): def desugar_list_item_expression(expression): return DesugaredFunctionCallExpression( metadata=expression.metadata, - function=DesugaredSymbolExpression( + function=DesugaredBuiltinExpression( metadata=expression.metadata, symbol='__get__', ), @@ -221,7 +237,7 @@ def desugar_list_literal_expression(expression): def desugar_negation_expression(expression): return DesugaredFunctionCallExpression( metadata=expression.metadata, - function=DesugaredSymbolExpression( + function=DesugaredBuiltinExpression( metadata=expression.metadata, symbol='__negate__', ), @@ -251,6 +267,12 @@ def desugar_symbol_expression(expression): symbol=expression.symbol, ) +def desugar_symbol_literal_expression(expression): + return DesugaredSymbolLiteralExpression( + metadata=expression.metadata, + symbol=expression.symbol, + ) + def desugar_expression(expression): return { parsing.FurFunctionCallExpression: desugar_function_call_expression,