X-Git-Url: https://code.kerkeslager.com/?a=blobdiff_plain;f=normalization.py;h=e6fea775922c79b13e936880ea288c4c36d78b63;hb=f378cbf85e3dbd26d5a97b6ac9b1aeb0811ecf74;hp=76c539592c1627794b10e6e48be0adc9c1a50517;hpb=7b12616d21169685753b6e530569e431d45427b3;p=fur diff --git a/normalization.py b/normalization.py index 76c5395..e6fea77 100644 --- a/normalization.py +++ b/normalization.py @@ -35,9 +35,16 @@ NormalStringLiteralExpression = collections.namedtuple( NormalSymbolExpression = collections.namedtuple( 'NormalSymbolExpression', - [ + ( 'symbol', - ], + ), +) + +NormalSymbolLiteralExpression = collections.namedtuple( + 'NormalSymbolLiteralExpression', + ( + 'symbol', + ), ) NormalPushStatement = collections.namedtuple( @@ -56,22 +63,6 @@ NormalFunctionCallExpression = collections.namedtuple( ], ) -NormalArrayVariableInitializationStatement = collections.namedtuple( - 'NormalArrayVariableInitializationStatement', - [ - 'variable', - 'items', - ], -) - -NormalSymbolArrayVariableInitializationStatement = collections.namedtuple( - 'NormalSymbolArrayVariableInitializationStatement', - [ - 'variable', - 'symbol_list', - ], -) - NormalVariableInitializationStatement = collections.namedtuple( 'NormalVariableInitializationStatement', [ @@ -162,8 +153,6 @@ def normalize_list_literal_expression(counter, expression): prestatements = [] - list_expression = NormalVariableExpression(variable=list_variable) - for item_expression in expression.item_expression_list: counter, item_expression_prestatements, normalized = normalize_expression( counter, @@ -179,15 +168,10 @@ def normalize_list_literal_expression(counter, expression): ) ) - prestatements.append(NormalVariableInitializationStatement( - variable=list_variable, - expression=NormalListConstructExpression(allocate=len(expression.item_expression_list)), - )) - return ( counter, tuple(prestatements), - list_expression, + NormalListConstructExpression(allocate=len(expression.item_expression_list)), ) def normalize_string_literal_expression(counter, expression): @@ -199,70 +183,41 @@ def normalize_string_literal_expression(counter, expression): NormalStructureLiteralExpression = collections.namedtuple( 'NormalStructureLiteralExpression', - [ + ( 'field_count', - 'symbol_list_variable', - 'value_list_variable', - ], + ), ) def normalize_structure_literal_expression(counter, expression): prestatements = [] - field_symbol_array = [] - field_value_array = [] - for symbol_expression_pair in expression.fields: - counter, field_prestatements, field_expression = normalize_expression( + for field in expression.fields: + counter, field_expression_prestatements, field_expression = normalize_expression( counter, - symbol_expression_pair.expression, + field.expression, ) - for p in field_prestatements: + for p in field_expression_prestatements: prestatements.append(p) - field_symbol_array.append(symbol_expression_pair.symbol) - field_value_array.append(field_expression) - - symbol_array_variable = '${}'.format(counter) - counter += 1 - - prestatements.append( - NormalSymbolArrayVariableInitializationStatement( - variable=symbol_array_variable, - symbol_list=tuple(field_symbol_array), - ) - ) - - value_array_variable = '${}'.format(counter) - counter += 1 - - prestatements.append( - NormalArrayVariableInitializationStatement( - variable=value_array_variable, - items=tuple(field_value_array), - ) - ) - - variable = '${}'.format(counter) + prestatements.append(NormalPushStatement( + expression=field_expression, + )) - prestatements.append( - NormalVariableInitializationStatement( - variable=variable, - expression=NormalStructureLiteralExpression( - field_count=len(expression.fields), - symbol_list_variable=symbol_array_variable, - value_list_variable=value_array_variable, + prestatements.append(NormalPushStatement( + expression=NormalSymbolLiteralExpression( + symbol=field.symbol, ), - ) - ) + )) return ( - counter + 1, + counter, tuple(prestatements), - NormalVariableExpression(variable=variable), + NormalStructureLiteralExpression( + field_count=len(expression.fields), + ), ) - def normalize_symbol_expression(counter, expression): return ( counter,