X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=transformation.py;h=1fe7dc938b55e51674750a7db5a66cc621e3b474;hp=cdf81551c20d0bfec6de52f52fd933f219e9f5e4;hb=f60d1b48bbf73c51d214c5ae5c22ea3cdee087c1;hpb=08c7721c3ab3b3ba8c97b48fad718d2b59d36a0e diff --git a/transformation.py b/transformation.py index cdf8155..1fe7dc9 100644 --- a/transformation.py +++ b/transformation.py @@ -56,8 +56,8 @@ CModularDivisionExpression = collections.namedtuple( ], ) -CFunctionCallStatement = collections.namedtuple( - 'CFunctionCallStatement', +CFunctionCallExpression = collections.namedtuple( + 'CFunctionCallExpression', [ 'name', 'arguments', @@ -74,10 +74,13 @@ CProgram = collections.namedtuple( ) BUILTINS = { - 'print': ['stdio.h.'], + 'pow': ['math.h'], + 'print': ['stdio.h'], } def transform_expression(builtin_dependencies, expression): + if isinstance(expression, parsing.FurFunctionCallExpression): + return transform_function_call_expression(builtin_dependencies, expression) LITERAL_TYPE_MAPPING = { parsing.FurIntegerLiteralExpression: CIntegerLiteral, @@ -100,11 +103,11 @@ def transform_expression(builtin_dependencies, expression): right=transform_expression(builtin_dependencies, expression.right), ) -def transform_function_call_statement(builtin_dependencies, function_call): +def transform_function_call_expression(builtin_dependencies, function_call): if function_call.name in BUILTINS.keys(): builtin_dependencies.add(function_call.name) - return CFunctionCallStatement( + return CFunctionCallExpression( name='builtin$' + function_call.name, arguments=tuple(transform_expression(builtin_dependencies, arg) for arg in function_call.arguments), ) @@ -115,7 +118,7 @@ def transform(program): builtins = set() c_statements = [ - transform_function_call_statement(builtins, statement) for statement in program.statement_list + transform_function_call_expression(builtins, statement) for statement in program.statement_list ] standard_libraries = set()