From 7a2cef08e84a7fde4157ef56efb772533664b8f9 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Fri, 5 Feb 2016 21:34:25 -0500 Subject: [PATCH] Added in checking the stdlib directory to Kalypso --- stdlib/importer.krak | 18 ++++++++++++++++-- stdlib/parser.krak | 4 +++- tests/simple_print.krak | 9 +++++++++ tests/test_compiler.krak | 2 +- tests/test_conversions.krak | 2 +- tests/test_functionTemplateTest.krak | 6 +++--- 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/stdlib/importer.krak b/stdlib/importer.krak index 13070ed..651b44d 100644 --- a/stdlib/importer.krak +++ b/stdlib/importer.krak @@ -15,16 +15,19 @@ obj importer (Object) { var parse: parser var ast_pass: ast_transformation var name_ast_map: map,*ast_node>> - fun construct(parseIn: ref parser, ast_passIn: ref ast_transformation): *importer { + var import_paths: vector + fun construct(parseIn: ref parser, ast_passIn: ref ast_transformation, import_paths_in: vector): *importer { parse.copy_construct(&parseIn) ast_pass.copy_construct(&ast_passIn) name_ast_map.construct() + import_paths.copy_construct(&import_paths_in) return this } fun copy_construct(old: *importer) { parse.copy_construct(&old->parse) ast_pass.copy_construct(&old->ast_pass) name_ast_map.copy_construct(&old->name_ast_map) + import_paths.copy_construct(&old->import_paths) } fun operator=(old: ref importer) { destruct() @@ -34,6 +37,7 @@ obj importer (Object) { parse.destruct() ast_pass.destruct() name_ast_map.destruct() + import_paths.destruct() } fun import(file_name: string): *ast_node { println("**First Pass**") @@ -58,7 +62,17 @@ obj importer (Object) { return name_ast_map[file_name].second print("pre-parse: "); println(file_name) - var parse_tree = parse.parse_input(read_file(file_name), file_name) + var file = string() + import_paths.for_each(fun(path: string) { + println(string("Checking ") + path + " for " + file_name) + if (file_exists(path + file_name)) { + println("Found it!") + file = read_file(path + file_name) + return + } else + println("did not find it") + }) + var parse_tree = parse.parse_input(file, file_name) print("post-parse: "); println(file_name) write_file(file_name + ".parse.dot", syntax_tree_to_dot(parse_tree)) print("pre-trim: "); println(file_name) diff --git a/stdlib/parser.krak b/stdlib/parser.krak index 5d33e97..6fee24a 100644 --- a/stdlib/parser.krak +++ b/stdlib/parser.krak @@ -137,11 +137,13 @@ obj parser (Object) { println("**PARSE ERROR**") println("REJECTED") - println("parsing (not lexing) failed for ") + println("parsing (not lexing) failed AT THE END for ") println(name) print(" line number: ") print(find_line(input.size)) println("(minus 2?)") + print("' with txt ") + println(input.last().to_string()) return null>() } fun reducer(i: int) { diff --git a/tests/simple_print.krak b/tests/simple_print.krak index 7fa5643..25158f2 100644 --- a/tests/simple_print.krak +++ b/tests/simple_print.krak @@ -6,6 +6,10 @@ fun println(to_print: *char) { print(to_print) print("\n") } +fun println(to_print: char) { + print(to_print) + print("\n") +} fun println(to_print: int) { print(to_print) print("\n") @@ -23,6 +27,11 @@ fun print(to_print: *char) { printf("%s", to_print); """ } +fun print(to_print: char) { + __if_comp__ __C__ simple_passthrough(to_print::) """ + printf("%c", to_print); + """ +} fun print(to_print: int) { __if_comp__ __C__ simple_passthrough(to_print::) """ printf("%d", to_print); diff --git a/tests/test_compiler.krak b/tests/test_compiler.krak index bf2ad8d..bbbca3d 100644 --- a/tests/test_compiler.krak +++ b/tests/test_compiler.krak @@ -66,7 +66,7 @@ fun main(argc: int, argv: **char):int { kraken_file_name = string(argv[1]) var parse.construct(gram): parser var ast_pass.construct(): ast_transformation - var importer.construct(parse, ast_pass): importer + var importer.construct(parse, ast_pass, vector(string(), string("../stdlib/"))): importer importer.import(kraken_file_name) println("NOW DOING C_GENERATOR") var c_generator.construct(): c_generator diff --git a/tests/test_conversions.krak b/tests/test_conversions.krak index db429db..8dcc090 100644 --- a/tests/test_conversions.krak +++ b/tests/test_conversions.krak @@ -1,4 +1,4 @@ -import io:* +import simple_print:* import conversions:* fun main():int { diff --git a/tests/test_functionTemplateTest.krak b/tests/test_functionTemplateTest.krak index af7bb2d..8f0d33f 100644 --- a/tests/test_functionTemplateTest.krak +++ b/tests/test_functionTemplateTest.krak @@ -1,13 +1,13 @@ -import io; +import simple_print; fun addAndPrint(a: T, b: T): T { - io::print(a+b); + simple_print::print(a+b); return a+b; } fun main(): int { addAndPrint(10,12); - io::print("\n"); + simple_print::print("\n"); return 0; }