X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=generation.py;h=808b0d8dd7ea83c05d026f736f3f3013b7d50876;hp=b51650bf4384b4cc1c292fb162f4b03bce80d846;hb=f60d1b48bbf73c51d214c5ae5c22ea3cdee087c1;hpb=08c7721c3ab3b3ba8c97b48fad718d2b59d36a0e diff --git a/generation.py b/generation.py index b51650b..808b0d8 100644 --- a/generation.py +++ b/generation.py @@ -24,6 +24,9 @@ def generate_string_literal(c_string_literal): ) def generate_argument(c_argument): + if isinstance(c_argument, transformation.CFunctionCallExpression): + return generate_function_call(c_argument) + LITERAL_TYPE_MAPPING = { transformation.CIntegerLiteral: generate_integer_literal, transformation.CStringLiteral: generate_string_literal, @@ -46,18 +49,21 @@ def generate_argument(c_argument): generate_argument(c_argument.right), ) -def generate_statement(c_function_call_statement): - return '{}({});'.format( - c_function_call_statement.name, - ', '.join(generate_argument(argument) for argument in c_function_call_statement.arguments), +def generate_function_call(c_function_call): + return '{}({})'.format( + c_function_call.name, + ', '.join(generate_argument(argument) for argument in c_function_call.arguments), ) +def generate_statement(c_function_call_statement): + return '{};'.format(generate_function_call(c_function_call_statement)) + def generate(c_program): template = ENV.get_template('program.c') return template.render( builtins=list(sorted(c_program.builtins)), statements=[generate_statement(statement) for statement in c_program.statements], - standard_libraries=set(['stdio.h']), + standard_libraries=list(sorted(c_program.standard_libraries)), ) if __name__ == '__main__':