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.
This commit is contained in:
11
kraken.krak
11
kraken.krak
@@ -14,6 +14,7 @@ import obj_lower:*
|
|||||||
import defer_lower:*
|
import defer_lower:*
|
||||||
import ctce_lower:*
|
import ctce_lower:*
|
||||||
import c_line_control:*
|
import c_line_control:*
|
||||||
|
import node_counter:*
|
||||||
import c_generator:*
|
import c_generator:*
|
||||||
|
|
||||||
fun main(argc: int, argv: **char):int {
|
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
|
var importer.construct(parsers, ast_pass, vector(string(), base_dir + "/stdlib/")): importer
|
||||||
importer.import(kraken_file_name)
|
importer.import(kraken_file_name)
|
||||||
// Passes
|
// Passes
|
||||||
|
/*printlnerr("Counting Nodes")*/
|
||||||
|
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||||
printlnerr("Lowering ADTs")
|
printlnerr("Lowering ADTs")
|
||||||
adt_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
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")
|
printlnerr("Lowering Objects")
|
||||||
obj_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
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")
|
printlnerr("Lowering Defer")
|
||||||
defer_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
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")
|
printlnerr("Lowering CTCE")
|
||||||
ctce_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
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) {
|
if (interpret_instead) {
|
||||||
printlnerr("Interpreting!")
|
printlnerr("Interpreting!")
|
||||||
call_main(importer.name_ast_map)
|
call_main(importer.name_ast_map)
|
||||||
|
|||||||
@@ -203,8 +203,11 @@ obj c_generator (Object) {
|
|||||||
parameter_types += ", ..."
|
parameter_types += ", ..."
|
||||||
parameters += ", ..."
|
parameters += ", ..."
|
||||||
}
|
}
|
||||||
return make_pair(type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameter_types + ");\n",
|
var possibly_static = string()
|
||||||
type_to_c(backing.type->return_type) + " " + decorated_name + "(" + parameters + ")")
|
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<string, pair<*tree<symbol>,*ast_node>>, ast_to_syntax_in: map<*ast_node, *tree<symbol>> ): pair<string,string> {
|
fun generate_c(name_ast_map: map<string, pair<*tree<symbol>,*ast_node>>, ast_to_syntax_in: map<*ast_node, *tree<symbol>> ): pair<string,string> {
|
||||||
ast_to_syntax = ast_to_syntax_in
|
ast_to_syntax = ast_to_syntax_in
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
ext fun printf(format_str: *char, actual_str: *char): int
|
ext fun printf(format_str: *char, ...): int
|
||||||
|
|
||||||
fun main():int {
|
fun main():int {
|
||||||
printf("%s", "Hello extern!\n")
|
printf("%s", "Hello extern!\n")
|
||||||
|
|||||||
Reference in New Issue
Block a user