X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=transformation.py;h=ecfab9a0bee51a09c2891f60ed5be5087607197a;hp=4c1ef3b6f950e16a5014c5a7f0b396a688290963;hb=ab984279c92601b321db123984c753aa862daad8;hpb=1852539af30c364a11d2e2a0bb7944102293dcf6 diff --git a/transformation.py b/transformation.py index 4c1ef3b..ecfab9a 100644 --- a/transformation.py +++ b/transformation.py @@ -60,7 +60,8 @@ CFunctionCallExpression = collections.namedtuple( 'CFunctionCallExpression', [ 'name', - 'arguments', + 'argument_count', + 'argument_items', ], ) @@ -73,6 +74,14 @@ CSymbolAssignmentStatement = collections.namedtuple( ], ) +CArrayVariableInitializationStatement = collections.namedtuple( + 'CArrayVariableInitializationStatement', + [ + 'variable', + 'items', + ], +) + CVariableInitializationStatement = collections.namedtuple( 'CVariableInitializationStatement', [ @@ -257,17 +266,14 @@ def transform_negation_expression(accumulators, expression): ) def transform_function_call_expression(accumulators, function_call): - # TODO Function should be a full expression if function_call.function.value in BUILTINS.keys(): # TODO Check that the builtin is actually callable accumulators.builtin_set.add(function_call.function.value) return CFunctionCallExpression( name='builtin$' + function_call.function.value, - arguments=tuple( - transform_expression(accumulators, arg) - for arg in function_call.arguments - ), + argument_count=function_call.argument_count, + argument_items=transform_expression(accumulators, function_call.argument_items), ) raise Exception() @@ -289,6 +295,12 @@ def transform_if_else_statement(accumulators, statement): else_statements=tuple(transform_statement(accumulators, s) for s in statement.else_statements), ) +def transform_array_variable_initialization_statement(accumulators, statement): + return CArrayVariableInitializationStatement( + variable=statement.variable, + items=tuple(transform_expression(accumulators, i) for i in statement.items), + ) + def transform_variable_initialization_statement(accumulators, statement): return CVariableInitializationStatement( variable=statement.variable, @@ -307,6 +319,7 @@ def transform_statement(accumulators, statement): parsing.FurExpressionStatement: transform_expression_statement, normalization.NormalExpressionStatement: transform_expression_statement, normalization.NormalIfElseStatement: transform_if_else_statement, + normalization.NormalArrayVariableInitializationStatement: transform_array_variable_initialization_statement, normalization.NormalVariableInitializationStatement: transform_variable_initialization_statement, normalization.NormalVariableReassignmentStatement: transform_variable_reassignment_statement, }[type(statement)](accumulators, statement)