diff --git a/nasal_import.h b/nasal_import.h index 08d8730..984fcf8 100644 --- a/nasal_import.h +++ b/nasal_import.h @@ -86,7 +86,7 @@ string linker::findf(const string& fname) { // we will find lib.nas in nasal std directory if (fname=="lib.nas") { - return is_windows()? findf("stl\\lib.nas"):findf("stl/lib.nas"); + return is_windows()? findf("std\\lib.nas"):findf("std/lib.nas"); } if (!show_path) { err.err("link", "cannot find file <"+fname+">"); @@ -105,7 +105,7 @@ bool linker::imptchk(const ast& node) { /* call |_id:import - |_callh:stl + |_callh:std |_callh:file */ if (node.type()==ast_call && node[0].str()=="import" && node.size()>=2 && node[1].type()==ast_callh) { diff --git a/src/nasal_new_codegen.cpp b/src/nasal_new_codegen.cpp index 1e1f370..a2f7065 100644 --- a/src/nasal_new_codegen.cpp +++ b/src/nasal_new_codegen.cpp @@ -237,6 +237,7 @@ void codegen::call_gen(call_expr* node) { case expr_type::ast_callh: call_hash_gen((call_hash*)i); break; case expr_type::ast_callv: call_vec((call_vector*)i); break; case expr_type::ast_callf: call_func((call_function*)i); break; + default: break; } } } @@ -341,6 +342,7 @@ void codegen::mcall(expr* node) { case expr_type::ast_callh: call_hash_gen((call_hash*)tmp); break; case expr_type::ast_callv: call_vec((call_vector*)tmp); break; case expr_type::ast_callf: call_func((call_function*)tmp); break; + default: break; } } auto tmp = call_node->get_calls().back(); @@ -444,7 +446,7 @@ void codegen::def_gen(definition_expr* node) { node->get_variable_name()? single_def(node):multi_def(node); } -void codegen::assignment_gen(assignment_expr* node) { +void codegen::assignment_expression(assignment_expr* node) { switch(node->get_assignment_type()) { case assignment_expr::assign_type::equal: calc_gen(node->get_right()); @@ -534,7 +536,7 @@ void codegen::assignment_gen(assignment_expr* node) { } } -void codegen::assign_statement(assignment_expr* node) { +void codegen::assignment_statement(assignment_expr* node) { switch(node->get_assignment_type()) { case assignment_expr::assign_type::equal: if (node->get_left()->get_type()==expr_type::ast_id) { @@ -672,6 +674,7 @@ void codegen::loop_gen(expr* node) { for_gen((for_expr*)node); break; case expr_type::ast_forei: forei_gen((forei_expr*)node); break; + default: break; } } @@ -699,7 +702,7 @@ void codegen::while_gen(while_expr* node) { } void codegen::for_gen(for_expr* node) { - expr_gen(node->get_initial()); + statement_generation(node->get_initial()); usize jmp_place = code.size(); if (node->get_condition()->get_type()==expr_type::ast_null) { regist_num(1); @@ -712,7 +715,7 @@ void codegen::for_gen(for_expr* node) { block_gen(node->get_code_block()); usize continue_place = code.size(); - expr_gen(node->get_step()); + statement_generation(node->get_step()); gen(op_jmp, jmp_place, node->get_step()->get_line()); code[label_exit].num = code.size(); @@ -755,7 +758,7 @@ void codegen::forei_gen(forei_expr* node) { gen(op_pop, 0, node->get_line());// pop iterator } -void codegen::expr_gen(expr* node) { +void codegen::statement_generation(expr* node) { switch(node->get_type()) { case expr_type::ast_null:break; case expr_type::ast_def: @@ -763,17 +766,20 @@ void codegen::expr_gen(expr* node) { case expr_type::ast_multi_assign: multi_assign_gen((multi_assign*)node); break; case expr_type::ast_assign: - assign_statement((assignment_expr*)node); break; + assignment_statement((assignment_expr*)node); break; case expr_type::ast_nil:case expr_type::ast_num: case expr_type::ast_str:case expr_type::ast_bool: break; - case expr_type::ast_vec:case expr_type::ast_hash: - case expr_type::ast_func:case expr_type::ast_call: + case expr_type::ast_vec: + case expr_type::ast_hash: + case expr_type::ast_func: + case expr_type::ast_call: case expr_type::ast_unary: case expr_type::ast_binary: case expr_type::ast_ternary: calc_gen(node); gen(op_pop, 0, node->get_line()); break; + default: break; } } @@ -956,6 +962,7 @@ void codegen::binary_gen(binary_operator* node) { gen(op_geqc, num_table.at(num), node->get_line()); } return; + default: break; } } @@ -992,7 +999,7 @@ void codegen::calc_gen(expr* node) { case expr_type::ast_call: call_gen((call_expr*)node); break; case expr_type::ast_assign: - assignment_gen((assignment_expr*)node); break; + assignment_expression((assignment_expr*)node); break; case expr_type::ast_ternary: trino_gen((ternary_operator*)node); break; case expr_type::ast_unary: @@ -1004,6 +1011,7 @@ void codegen::calc_gen(expr* node) { single_def((definition_expr*)node); call_id(((definition_expr*)node)->get_variable_name()); break; + default: break; } } @@ -1032,17 +1040,20 @@ void codegen::block_gen(code_block* node) { case expr_type::ast_for: case expr_type::ast_forei: loop_gen(tmp); break; - case expr_type::ast_binary: - case expr_type::ast_vec:case expr_type::ast_hash: - case expr_type::ast_func:case expr_type::ast_call: + case expr_type::ast_vec: + case expr_type::ast_hash: + case expr_type::ast_func: + case expr_type::ast_call: case expr_type::ast_unary: + case expr_type::ast_binary: case expr_type::ast_ternary: case expr_type::ast_def: case expr_type::ast_assign: case expr_type::ast_multi_assign: - expr_gen(tmp); break; + statement_generation(tmp); break; case expr_type::ast_ret: ret_gen((return_expr*)tmp); break; + default: break; } } } diff --git a/src/nasal_new_codegen.h b/src/nasal_new_codegen.h index a051e6a..8ef1e7f 100644 --- a/src/nasal_new_codegen.h +++ b/src/nasal_new_codegen.h @@ -74,16 +74,16 @@ private: void multi_def(definition_expr*); void single_def(definition_expr*); void def_gen(definition_expr*); - void assignment_gen(assignment_expr*); - void assign_statement(assignment_expr*); + void assignment_expression(assignment_expr*); + void assignment_statement(assignment_expr*); void multi_assign_gen(multi_assign*); void cond_gen(condition_expr*); void loop_gen(expr*); void load_continue_break(i32, i32); void while_gen(while_expr*); void for_gen(for_expr*); - void expr_gen(expr*); void forei_gen(forei_expr*); + void statement_generation(expr*); void or_gen(binary_operator*); void and_gen(binary_operator*); void unary_gen(unary_operator*); diff --git a/src/nasal_new_import.cpp b/src/nasal_new_import.cpp index da52eb2..00abaff 100644 --- a/src/nasal_new_import.cpp +++ b/src/nasal_new_import.cpp @@ -30,7 +30,8 @@ std::string linker::get_path(call_expr* node) { return fpath + ".nas"; } -std::string linker::find_file(const std::string& filename) { +std::string linker::find_file( + const std::string& filename, const span& location) { // first add file name itself into the file path std::vector fpath = {filename}; @@ -48,9 +49,12 @@ std::string linker::find_file(const std::string& filename) { // we will find lib.nas in nasal std directory if (filename=="lib.nas") { - return is_windows()? find_file("stl\\lib.nas"):find_file("stl/lib.nas"); + return is_windows()? + find_file("std\\lib.nas", location): + find_file("std/lib.nas", location); } if (!show_path) { + err.load(location.file); err.err("link", "cannot find file <" + filename + ">"); return ""; } @@ -58,6 +62,7 @@ std::string linker::find_file(const std::string& filename) { for(const auto& i : fpath) { paths += " " + i + "\n"; } + err.load(location.file); err.err("link", "cannot find file <" + filename + "> in these paths:\n" + paths); return ""; } @@ -66,7 +71,7 @@ bool linker::import_check(expr* node) { /* call |_id:import - |_callh:stl + |_callh:std |_callh:file */ if (node->get_type()!=expr_type::ast_call) { @@ -149,7 +154,7 @@ code_block* linker::import_regular_file(call_expr* node) { node->set_first(new nil_expr(location)); // avoid infinite loading loop - filename = find_file(filename); + filename = find_file(filename, node->get_location()); if (!filename.length() || exist(filename)) { return new code_block({0, 0, 0, 0, filename}); } @@ -166,7 +171,7 @@ code_block* linker::import_regular_file(call_expr* node) { code_block* linker::import_nasal_lib() { lexer lex(err); parse par(err); - auto filename = find_file("lib.nas"); + auto filename = find_file("lib.nas", {0, 0, 0, 0, files[0]}); if (!filename.length()) { return new code_block({0, 0, 0, 0, filename}); } diff --git a/src/nasal_new_import.h b/src/nasal_new_import.h index 09d12b6..73378e5 100644 --- a/src/nasal_new_import.h +++ b/src/nasal_new_import.h @@ -29,7 +29,7 @@ private: bool exist(const std::string&); void link(code_block*, code_block*); std::string get_path(call_expr*); - std::string find_file(const std::string&); + std::string find_file(const std::string&, const span&); code_block* import_regular_file(call_expr*); code_block* import_nasal_lib(); code_block* load(code_block*, u16); diff --git a/src/nasal_new_main.cpp b/src/nasal_new_main.cpp index c0de3e7..ae6efff 100644 --- a/src/nasal_new_main.cpp +++ b/src/nasal_new_main.cpp @@ -80,6 +80,7 @@ std::ostream& version(std::ostream& out) { } out << "version " << __nasver; out << " (" << __DATE__ << " " << __TIME__ << ")\n"; + return out; } [[noreturn]] diff --git a/stl/csv.nas b/std/csv.nas similarity index 100% rename from stl/csv.nas rename to std/csv.nas diff --git a/stl/fg_env.nas b/std/fg_env.nas similarity index 100% rename from stl/fg_env.nas rename to std/fg_env.nas diff --git a/stl/file.nas b/std/file.nas similarity index 100% rename from stl/file.nas rename to std/file.nas diff --git a/stl/json.nas b/std/json.nas similarity index 100% rename from stl/json.nas rename to std/json.nas diff --git a/stl/lib.nas b/std/lib.nas similarity index 100% rename from stl/lib.nas rename to std/lib.nas diff --git a/stl/list.nas b/std/list.nas similarity index 100% rename from stl/list.nas rename to std/list.nas diff --git a/stl/log.nas b/std/log.nas similarity index 100% rename from stl/log.nas rename to std/log.nas diff --git a/stl/mat.nas b/std/mat.nas similarity index 100% rename from stl/mat.nas rename to std/mat.nas diff --git a/stl/module.nas b/std/module.nas similarity index 100% rename from stl/module.nas rename to std/module.nas diff --git a/stl/padding.nas b/std/padding.nas similarity index 100% rename from stl/padding.nas rename to std/padding.nas diff --git a/stl/process_bar.nas b/std/process_bar.nas similarity index 100% rename from stl/process_bar.nas rename to std/process_bar.nas diff --git a/stl/queue.nas b/std/queue.nas similarity index 100% rename from stl/queue.nas rename to std/queue.nas diff --git a/stl/result.nas b/std/result.nas similarity index 100% rename from stl/result.nas rename to std/result.nas diff --git a/stl/sort.nas b/std/sort.nas similarity index 100% rename from stl/sort.nas rename to std/sort.nas diff --git a/stl/stack.nas b/std/stack.nas similarity index 100% rename from stl/stack.nas rename to std/stack.nas diff --git a/stl/string.nas b/std/string.nas similarity index 100% rename from stl/string.nas rename to std/string.nas diff --git a/test/ascii-art.nas b/test/ascii-art.nas index e1cf805..08c29fd 100644 --- a/test/ascii-art.nas +++ b/test/ascii-art.nas @@ -1,5 +1,5 @@ -import.stl.padding; -import.stl.process_bar; +import.std.padding; +import.std.process_bar; var char_ttf=[ [" "," "," "," "," "," "], diff --git a/test/auto_crash.nas b/test/auto_crash.nas index 2ab0e72..cd5dce7 100644 --- a/test/auto_crash.nas +++ b/test/auto_crash.nas @@ -1,5 +1,5 @@ # Road check and auto pilot by ValKmjolnir -import.stl.fg_env; +import.std.fg_env; var dt=0.01; var intergral=0; diff --git a/test/bfs.nas b/test/bfs.nas index b210665..dffce5b 100644 --- a/test/bfs.nas +++ b/test/bfs.nas @@ -1,4 +1,4 @@ -import.stl.queue; +import.std.queue; rand(time(0)); var pixel=[' ','#','.','*']; diff --git a/test/bp.nas b/test/bp.nas index 47b1438..1218a2d 100644 --- a/test/bp.nas +++ b/test/bp.nas @@ -1,4 +1,4 @@ -import.stl.mat; +import.std.mat; rand(time(0)); diff --git a/test/calc.nas b/test/calc.nas index c322450..a14692e 100644 --- a/test/calc.nas +++ b/test/calc.nas @@ -1,11 +1,11 @@ -import.stl.padding; -import.stl.file; -import.stl.sort; +import.std.padding; +import.std.file; +import.std.sort; var source=find_all_files_with_extension(".","cpp","h"); sort(source,func(a,b){return cmp(a,b)<0}); -var lib=find_all_files_with_extension("./stl","nas"); +var lib=find_all_files_with_extension("./std","nas"); sort(lib,func(a,b){return cmp(a,b)<0}); var testfile=find_all_files_with_extension("./test","nas"); @@ -79,7 +79,7 @@ var calc=func(codetype,files,path=""){ } var all=calc("source code:",source) - +calc("lib:",lib,"stl/") + +calc("lib:",lib,"std/") +calc("test file:",testfile,"test/") +calc("module:",module,"module/"); println(rightpad("total:",padding_length),'|',leftpad(str(all),6),' kb |'); \ No newline at end of file diff --git a/test/coroutine.nas b/test/coroutine.nas index 20e1732..0e2e8b9 100644 --- a/test/coroutine.nas +++ b/test/coroutine.nas @@ -1,7 +1,7 @@ # coroutine.nas by ValKmjolnir # 2022/5/19 -import.stl.process_bar; -import.stl.padding; +import.std.process_bar; +import.std.padding; if(os.platform()=="windows"){ system("chcp 65001"); diff --git a/test/datalog.nas b/test/datalog.nas index 2c5560c..31af9ea 100644 --- a/test/datalog.nas +++ b/test/datalog.nas @@ -1,6 +1,6 @@ -import.stl.sort; -import.stl.padding; -import.stl.process_bar; +import.std.sort; +import.std.padding; +import.std.process_bar; var mess=func(vec) { srand(); diff --git a/test/json.nas b/test/json.nas index 990a255..5355d92 100644 --- a/test/json.nas +++ b/test/json.nas @@ -1,5 +1,5 @@ -import.stl.json; -import.stl.process_bar; +import.std.json; +import.std.process_bar; var ss=JSON.stringify({ vec:[0,1,2], diff --git a/test/jsonrpc.nas b/test/jsonrpc.nas index d4f5e0d..37ef20e 100644 --- a/test/jsonrpc.nas +++ b/test/jsonrpc.nas @@ -1,5 +1,5 @@ import.module.libsock; -import.stl.json; +import.std.json; var gettime=func(){ return split(" ",os.time())[1]; diff --git a/test/lexer.nas b/test/lexer.nas index c8410a6..561eb57 100644 --- a/test/lexer.nas +++ b/test/lexer.nas @@ -172,7 +172,7 @@ var lexer=func(file) }; } -var lex=lexer("stl/fg_env.nas"); +var lex=lexer("std/fg_env.nas"); lex.compile(); foreach(var tok;lex.get_token()) print('(',tok.line,' | ',tok.token,')\n'); \ No newline at end of file diff --git a/test/life.nas b/test/life.nas index bffbf7a..3978352 100644 --- a/test/life.nas +++ b/test/life.nas @@ -1,4 +1,4 @@ -import.stl.process_bar; +import.std.process_bar; var new_map=func(width,height){ var tmp=[]; diff --git a/test/md5compare.nas b/test/md5compare.nas index 8f980d5..a6e9566 100644 --- a/test/md5compare.nas +++ b/test/md5compare.nas @@ -1,6 +1,6 @@ import.test.md5; -import.stl.process_bar; -import.stl.file; +import.std.process_bar; +import.std.file; srand(); var compare=func() { @@ -48,8 +48,8 @@ var filechecksum=func(){ foreach(var p;find_all_files_with_extension("./test","nas")) { append(files,"./test/"~p); } - foreach(var p;find_all_files_with_extension("./stl","nas")) { - append(files,"./stl/"~p); + foreach(var p;find_all_files_with_extension("./std","nas")) { + append(files,"./std/"~p); } foreach(var p;find_all_files_with_extension("./module","nas","cpp")) { append(files,"./module/"~p); diff --git a/test/occupation.nas b/test/occupation.nas index b527e15..b46fe76 100644 --- a/test/occupation.nas +++ b/test/occupation.nas @@ -1,4 +1,4 @@ -import.stl.process_bar; +import.std.process_bar; import.module.libkey; var is_windows_platform=os.platform()=="windows"; diff --git a/test/ppmgen.nas b/test/ppmgen.nas index 8de5a3d..75e725d 100644 --- a/test/ppmgen.nas +++ b/test/ppmgen.nas @@ -1,4 +1,4 @@ -import.stl.process_bar; +import.std.process_bar; var ppm=func(filename,width,height,RGB){ # P3 use ASCII number diff --git a/test/quick_sort.nas b/test/quick_sort.nas index 1456fe0..21b6438 100644 --- a/test/quick_sort.nas +++ b/test/quick_sort.nas @@ -1,4 +1,4 @@ -import.stl.sort; +import.std.sort; var vec=[]; rand(time(0)); diff --git a/test/word_collector.nas b/test/word_collector.nas index e033cdd..23efb73 100644 --- a/test/word_collector.nas +++ b/test/word_collector.nas @@ -1,4 +1,4 @@ -import.stl.sort; +import.std.sort; var to_lower=func(s){ var tmp="";