From dc5fe39083e523c70981224790abca64a69e95c5 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Wed, 6 Jul 2016 22:46:57 -0700 Subject: [PATCH] Added static to non extern non main functions in c_generator giving a 12 second compilation speedup - added a nodes touched pass, commented out in main, and fixed the test_extern test to use the right printf arguments. --- kraken.krak | 11 +++++++++++ stdlib/c_generator.krak | 7 +++++-- tests/test_extern.krak | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/kraken.krak b/kraken.krak index 585416f..36e30e6 100644 --- a/kraken.krak +++ b/kraken.krak @@ -14,6 +14,7 @@ import obj_lower:* import defer_lower:* import ctce_lower:* import c_line_control:* +import node_counter:* import c_generator:* fun main(argc: int, argv: **char):int { @@ -125,14 +126,24 @@ fun main(argc: int, argv: **char):int { var importer.construct(parsers, ast_pass, vector(string(), base_dir + "/stdlib/")): importer importer.import(kraken_file_name) // Passes + /*printlnerr("Counting Nodes")*/ + /*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/ printlnerr("Lowering ADTs") adt_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax) + /*printlnerr("Counting Nodes")*/ + /*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/ printlnerr("Lowering Objects") obj_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax) + /*printlnerr("Counting Nodes")*/ + /*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/ printlnerr("Lowering Defer") defer_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax) + /*printlnerr("Counting Nodes")*/ + /*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/ printlnerr("Lowering CTCE") ctce_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax) + /*printlnerr("Counting Nodes")*/ + /*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/ if (interpret_instead) { printlnerr("Interpreting!") call_main(importer.name_ast_map) diff --git a/stdlib/c_generator.krak b/stdlib/c_generator.krak index 2985a49..d529155 100644 --- a/stdlib/c_generator.krak +++ b/stdlib/c_generator.krak @@ -203,8 +203,11 @@ obj c_generator (Object) { parameter_types += ", ..." parameters += ", ..." } - return make_pair(type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameter_types + ");\n", - type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameters + ")") + var possibly_static = string() + if (!backing.is_extern && decorated_name != "main") + possibly_static = "static " + return make_pair(possibly_static + type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameter_types + ");\n", + possibly_static + type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameters + ")") } fun generate_c(name_ast_map: map,*ast_node>>, ast_to_syntax_in: map<*ast_node, *tree> ): pair { ast_to_syntax = ast_to_syntax_in diff --git a/tests/test_extern.krak b/tests/test_extern.krak index 3f6d396..174a60b 100644 --- a/tests/test_extern.krak +++ b/tests/test_extern.krak @@ -1,5 +1,5 @@ -ext fun printf(format_str: *char, actual_str: *char): int +ext fun printf(format_str: *char, ...): int fun main():int { printf("%s", "Hello extern!\n")