X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=desugaring.py;h=f3c7728844f4e3087412f3f933e9e34ea8c5313e;hp=47dfe6fd1e5961264776b393c4da5510e3860e25;hb=d70666abc2db430300d48691046ada2395b2f0d5;hpb=4d6f362ca35cd00803b1a79e03985301bcfbeea8 diff --git a/desugaring.py b/desugaring.py index 47dfe6f..f3c7728 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', ( @@ -152,13 +168,13 @@ def desugar_infix_expression(expression): if expression.operator == '.': return DesugaredFunctionCallExpression( metadata=expression.metadata, - function=DesugaredSymbolExpression( + function=DesugaredBuiltinExpression( metadata=expression.metadata, symbol='__field__', ), 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,