X-Git-Url: https://code.kerkeslager.com/?a=blobdiff_plain;f=normalization.py;h=9da90d7e389f946ee95df5864d516f6d28a9dd06;hb=ad9360cb4b392987edff8e3a650a2fbbc51f7046;hp=5b5bd94cf058b5de65633298143220f56b44334b;hpb=3769b766b898b95fd699e3cb6d005576a4c22086;p=fur diff --git a/normalization.py b/normalization.py index 5b5bd94..9da90d7 100644 --- a/normalization.py +++ b/normalization.py @@ -51,8 +51,6 @@ NormalInfixExpression = collections.namedtuple( [ 'order', 'operator', - 'left', - 'right', ], ) @@ -398,29 +396,17 @@ def normalize_basic_infix_operation(counter, expression): counter, left_prestatements, left_expression = normalize_expression(counter, expression.left) counter, right_prestatements, right_expression = normalize_expression(counter, expression.right) - left_variable = '${}'.format(counter) - counter += 1 - right_variable = '${}'.format(counter) - counter += 1 center_variable = '${}'.format(counter) counter += 1 root_prestatements = ( - NormalVariableInitializationStatement( - variable=left_variable, - expression=left_expression, - ), - NormalVariableInitializationStatement( - variable=right_variable, - expression=right_expression, - ), + NormalPushStatement(expression=left_expression), + NormalPushStatement(expression=right_expression), NormalVariableInitializationStatement( variable=center_variable, expression=NormalInfixExpression( order=expression.order, operator=expression.operator, - left=NormalVariableExpression(variable=left_variable), - right=NormalVariableExpression(variable=right_variable), ), ), ) @@ -440,6 +426,7 @@ def desugar_ternary_comparison(counter, expression): middle_variable = '${}'.format(counter) counter += 1 + # TODO Is there a memory leak if the middle expression throws an exception because the first expression result hasn't been added to the stack? juncture_prestatements = ( NormalVariableInitializationStatement( variable=left_variable, @@ -481,37 +468,7 @@ def normalize_comparison_expression(counter, expression): if isinstance(expression.left, parsing.FurInfixExpression) and expression.order == 'comparison_level': return desugar_ternary_comparison(counter, expression) - counter, left_prestatements, left_expression = normalize_expression(counter, expression.left) - counter, right_prestatements, right_expression = normalize_expression(counter, expression.right) - - left_variable = '${}'.format(counter) - counter += 1 - right_variable = '${}'.format(counter) - counter += 1 - - root_prestatements = ( - NormalVariableInitializationStatement( - variable=left_variable, - expression=left_expression, - ), - NormalVariableInitializationStatement( - variable=right_variable, - expression=right_expression, - ), - ) - - counter, result_prestatements, result_expression = ( - counter, - left_prestatements + right_prestatements + root_prestatements, - NormalInfixExpression( - order=expression.order, - operator=expression.operator, - left=NormalVariableExpression(variable=left_variable), - right=NormalVariableExpression(variable=right_variable), - ), - ) - - return (counter, result_prestatements, result_expression) + return normalize_basic_infix_operation(counter, expression) def normalize_boolean_expression(counter, expression): counter, left_prestatements, left_expression = normalize_expression(counter, expression.left)