More clean up; need to add return type checking pass so that can clean up c_generator more.
This commit is contained in:
38
kraken.krak
38
kraken.krak
@@ -10,6 +10,7 @@ import serialize:*
|
||||
import interpreter:*
|
||||
import os:*
|
||||
import ast_transformation:*
|
||||
import importer:*
|
||||
import adt_lower:*
|
||||
import obj_lower:*
|
||||
import defer_lower:*
|
||||
@@ -138,52 +139,51 @@ fun main(argc: int, argv: **char):int {
|
||||
var executable_name = string(".").join(kraken_file_name.split('.').slice(0,-2))
|
||||
if (positional_args.size > 1)
|
||||
executable_name = positional_args[1]
|
||||
var importer.construct(parsers, ast_pass, vector(string(), base_dir + "/stdlib/")): importer
|
||||
importer.import(kraken_file_name)
|
||||
var name_ast_map = import(kraken_file_name, parsers, ast_pass, vector(string(), base_dir + "/stdlib/"))
|
||||
// Passes
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
printlnerr("Lowering ADTs")
|
||||
adt_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
adt_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
printlnerr("Lowering Objects")
|
||||
obj_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
obj_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
printlnerr("Lowering Defer")
|
||||
defer_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
defer_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
// Should come after lowering of ADTs and before lowering of Refs
|
||||
printlnerr("Lowering Function Values (Lambdas, etc)")
|
||||
function_value_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
function_value_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
printlnerr("Lowering Ref")
|
||||
ref_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
ref_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
// Lowers #ctce and the current #ctce_pass
|
||||
printlnerr("Lowering CTCE")
|
||||
ctce_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
ctce_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
/*printlnerr("Counting Nodes")*/
|
||||
/*node_counter(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)*/
|
||||
/*node_counter(&name_ast_map, &ast_pass.ast_to_syntax)*/
|
||||
// Makes sure that & always takes reference to a variable
|
||||
printlnerr("Lowering & to always have variable")
|
||||
address_of_ensure_variable_lower(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
address_of_ensure_variable_lower(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
if (interpret_instead) {
|
||||
printlnerr("Interpreting!")
|
||||
call_main(importer.name_ast_map)
|
||||
call_main(name_ast_map)
|
||||
} else {
|
||||
if (line_ctrl) {
|
||||
printlnerr("running C-specific passes")
|
||||
printlnerr("running #line")
|
||||
c_line_control(&importer.name_ast_map, &importer.ast_pass.ast_to_syntax)
|
||||
c_line_control(&name_ast_map, &ast_pass.ast_to_syntax)
|
||||
}
|
||||
printlnerr("Generating C")
|
||||
var c_generator.construct(): c_generator
|
||||
var c_output_pair = c_generator.generate_c(importer.name_ast_map, importer.ast_pass.ast_to_syntax)
|
||||
var c_output_pair = c_generator.generate_c(name_ast_map, ast_pass.ast_to_syntax)
|
||||
var kraken_c_output_name = kraken_file_name + ".c"
|
||||
write_file(kraken_c_output_name, c_output_pair.first)
|
||||
if (compile_c) {
|
||||
|
||||
Reference in New Issue
Block a user