X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=normalization.py;h=9725b5b54e70fa84b5ff6fb290c748a26788dc3e;hp=40e3afdaa1afc275afe26a6aa3f19d4cedf38690;hb=aa339c441f43849a8cae256aa130278ca7618b7e;hpb=3a076cfd2c46c9f3b51815facd613445722a340b diff --git a/normalization.py b/normalization.py index 40e3afd..9725b5b 100644 --- a/normalization.py +++ b/normalization.py @@ -17,6 +17,14 @@ NormalIntegerLiteralExpression = collections.namedtuple( ], ) +NormalLambdaExpression = collections.namedtuple( + 'NormalLambdaExpression', + ( + 'argument_name_list', + 'statement_list', + ), +) + NormalStringLiteralExpression = collections.namedtuple( 'NormalStringLiteralExpression', [ @@ -132,6 +140,29 @@ def normalize_integer_literal_expression(counter, expression): NormalVariableExpression(variable=variable), ) +def normalize_lambda_expression(counter, expression): + variable = '${}'.format(counter) + + _, statement_list = normalize_statement_list( + 0, + expression.statement_list, + assign_result_to='result', + ) + + return ( + counter + 1, + ( + NormalVariableInitializationStatement( + variable=variable, + expression=NormalLambdaExpression( + argument_name_list=expression.argument_name_list, + statement_list=statement_list, + ), + ), + ), + NormalVariableExpression(variable=variable), + ) + NormalListConstructExpression = collections.namedtuple( 'NormalListConstructExpression', [ @@ -147,14 +178,6 @@ NormalListAppendStatement = collections.namedtuple( ], ) -NormalListGetExpression = collections.namedtuple( - 'NormalListGetExpression', - [ - 'list_expression', - 'index_expression', - ], -) - def normalize_list_literal_expression(counter, expression): list_variable = '${}'.format(counter) counter += 1 @@ -190,25 +213,6 @@ def normalize_list_literal_expression(counter, expression): list_expression, ) -def normalize_list_item_expression(counter, expression): - counter, list_prestatements, list_expression = normalize_expression(counter, expression.list_expression) - counter, index_prestatements, index_expression = normalize_expression(counter, expression.index_expression) - - result_variable = '${}'.format(counter) - result_prestatement = NormalVariableInitializationStatement( - variable=result_variable, - expression=NormalListGetExpression( - list_expression=list_expression, - index_expression=index_expression, - ), - ) - - return ( - counter + 1, - list_prestatements + index_prestatements + (result_prestatement,), - NormalVariableExpression(variable=result_variable), - ) - def normalize_string_literal_expression(counter, expression): variable = '${}'.format(counter) return ( @@ -407,6 +411,7 @@ def normalize_expression(counter, expression): desugaring.DesugaredFunctionCallExpression: normalize_function_call_expression, desugaring.DesugaredIfExpression: normalize_if_expression, desugaring.DesugaredIntegerLiteralExpression: normalize_integer_literal_expression, + desugaring.DesugaredLambdaExpression: normalize_lambda_expression, desugaring.DesugaredListLiteralExpression: normalize_list_literal_expression, desugaring.DesugaredStringLiteralExpression: normalize_string_literal_expression, desugaring.DesugaredStructureLiteralExpression: normalize_structure_literal_expression,