From cd4e0c171673b0c144a72e7524ff89d1c38065d9 Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Fri, 8 Sep 2023 00:33:57 +0800 Subject: [PATCH] :art: add namespace --- src/ast_dumper.cpp | 6 +++++- src/ast_dumper.h | 6 +++++- src/ast_visitor.cpp | 6 +++++- src/ast_visitor.h | 6 +++++- src/main.cpp | 24 ++++++++++++------------ src/nasal_ast.cpp | 6 +++++- src/nasal_ast.h | 4 ++++ src/nasal_codegen.cpp | 4 ++++ src/nasal_codegen.h | 4 ++++ src/nasal_dbg.cpp | 4 ++++ src/nasal_dbg.h | 4 ++++ src/nasal_err.cpp | 6 +++++- src/nasal_err.h | 4 ++++ src/nasal_import.cpp | 4 ++++ src/nasal_import.h | 7 ++++++- src/nasal_lexer.cpp | 4 ++++ src/nasal_lexer.h | 4 ++++ src/nasal_parse.cpp | 4 ++++ src/nasal_parse.h | 6 +++++- src/nasal_vm.cpp | 4 ++++ src/nasal_vm.h | 6 +++++- src/optimizer.cpp | 6 +++++- src/optimizer.h | 4 ++++ src/repl.cpp | 4 +++- src/repl.h | 4 +++- src/symbol_finder.cpp | 6 +++++- src/symbol_finder.h | 6 +++++- 27 files changed, 127 insertions(+), 26 deletions(-) diff --git a/src/ast_dumper.cpp b/src/ast_dumper.cpp index 84f62f2..c46bfd0 100644 --- a/src/ast_dumper.cpp +++ b/src/ast_dumper.cpp @@ -2,6 +2,8 @@ #include +namespace nasal { + bool ast_dumper::visit_null_expr(null_expr* node) { dump_indent(); std::cout << "null" << format_location(node->get_location()); @@ -478,4 +480,6 @@ bool ast_dumper::visit_return_expr(return_expr* node) { pop_indent(); } return true; -} \ No newline at end of file +} + +} diff --git a/src/ast_dumper.h b/src/ast_dumper.h index 1f520d2..1385698 100644 --- a/src/ast_dumper.h +++ b/src/ast_dumper.h @@ -6,6 +6,8 @@ #include #include +namespace nasal { + class ast_dumper:public ast_visitor { private: std::vector indent; @@ -78,4 +80,6 @@ public: void dump(code_block* root) { root->accept(this); } -}; \ No newline at end of file +}; + +} diff --git a/src/ast_visitor.cpp b/src/ast_visitor.cpp index d9aa45a..677c043 100644 --- a/src/ast_visitor.cpp +++ b/src/ast_visitor.cpp @@ -1,5 +1,7 @@ #include "ast_visitor.h" +namespace nasal { + bool ast_visitor::visit_expr(expr* node) { node->accept(this); return true; @@ -231,4 +233,6 @@ bool ast_visitor::visit_return_expr(return_expr* node) { node->get_value()->accept(this); } return true; -} \ No newline at end of file +} + +} diff --git a/src/ast_visitor.h b/src/ast_visitor.h index 9586633..62f4dff 100644 --- a/src/ast_visitor.h +++ b/src/ast_visitor.h @@ -2,6 +2,8 @@ #include "nasal_ast.h" +namespace nasal { + class ast_visitor { public: virtual bool visit_expr(expr*); @@ -40,4 +42,6 @@ public: virtual bool visit_continue_expr(continue_expr*); virtual bool visit_break_expr(break_expr*); virtual bool visit_return_expr(return_expr*); -}; \ No newline at end of file +}; + +} diff --git a/src/main.cpp b/src/main.cpp index f9cfe84..6f6316e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -89,7 +89,7 @@ std::ostream& version(std::ostream& out) { num = (num+rand())*(1.0/(RAND_MAX+1.0)); } if (num<0.01) { - parse::easter_egg(); + nasal::parse::easter_egg(); } out << "nasal interpreter version " << __nasver; out << " (" << __DATE__ << " " << __TIME__ << ")\n"; @@ -112,10 +112,10 @@ void execute( using clk = std::chrono::high_resolution_clock; const auto den = clk::duration::period::den; - lexer lex; - parse parse; - linker ld; - codegen gen; + nasal::lexer lex; + nasal::parse parse; + nasal::linker ld; + nasal::codegen gen; // lexer scans file to get tokens lex.scan(file).chkerr(); @@ -123,7 +123,7 @@ void execute( // parser gets lexer's token list to compile parse.compile(lex).chkerr(); if (cmd&VM_RAW_AST) { - auto dumper = std::unique_ptr(new ast_dumper); + auto dumper = std::unique_ptr(new nasal::ast_dumper); dumper->dump(parse.tree()); } @@ -131,10 +131,10 @@ void execute( ld.link(parse, file, cmd&VM_DETAIL).chkerr(); // optimizer does simple optimization on ast - auto opt = std::unique_ptr(new optimizer); + auto opt = std::unique_ptr(new nasal::optimizer); opt->do_optimization(parse.tree()); if (cmd&VM_AST) { - auto dumper = std::unique_ptr(new ast_dumper); + auto dumper = std::unique_ptr(new nasal::ast_dumper); dumper->dump(parse.tree()); } @@ -150,10 +150,10 @@ void execute( // run auto start = clk::now(); if (cmd&VM_DEBUG) { - auto debugger = std::unique_ptr(new dbg); + auto debugger = std::unique_ptr(new nasal::dbg); debugger->run(gen, ld, argv, cmd&VM_PROFILE, cmd&VM_PROF_ALL); } else if (cmd&VM_TIME || cmd&VM_EXEC) { - auto runtime = std::unique_ptr(new vm); + auto runtime = std::unique_ptr(new nasal::vm); runtime->run(gen, ld, argv, cmd&VM_DETAIL); } @@ -180,8 +180,8 @@ i32 main(i32 argc, const char* argv[]) { } else if (s=="-v" || s=="--version") { std::clog << version; } else if (s=="-r" || s=="--repl") { - auto repl_module = std::unique_ptr(new repl::repl); - repl_module->execute(); + auto repl = std::unique_ptr(new nasal::repl::repl); + repl->execute(); } else if (s[0]!='-') { execute(s, {}, VM_EXEC); } else { diff --git a/src/nasal_ast.cpp b/src/nasal_ast.cpp index 5b2610c..a1c8859 100644 --- a/src/nasal_ast.cpp +++ b/src/nasal_ast.cpp @@ -1,6 +1,8 @@ #include "nasal_ast.h" #include "ast_visitor.h" +namespace nasal { + void expr::accept(ast_visitor* visitor) { visitor->visit_expr(this); } @@ -365,4 +367,6 @@ return_expr::~return_expr() { void return_expr::accept(ast_visitor* visitor) { visitor->visit_return_expr(this); -} \ No newline at end of file +} + +} diff --git a/src/nasal_ast.h b/src/nasal_ast.h index ffffd95..6e04e84 100644 --- a/src/nasal_ast.h +++ b/src/nasal_ast.h @@ -6,6 +6,8 @@ #include #include +namespace nasal { + enum class expr_type:u32 { ast_null = 0, // null node ast_block, // code block @@ -669,3 +671,5 @@ public: expr* get_value() {return value;} void accept(ast_visitor*) override; }; + +} diff --git a/src/nasal_codegen.cpp b/src/nasal_codegen.cpp index 9a9fc1a..1b3c6d6 100644 --- a/src/nasal_codegen.cpp +++ b/src/nasal_codegen.cpp @@ -1,5 +1,7 @@ #include "nasal_codegen.h" +namespace nasal { + void codegen::init_file_map(const std::vector& file_list) { file_map = {}; for(usize i = 0; i #include +namespace nasal { + class debug_prof_data { private: static const usize operand_size = op_code_type::op_ret + 1; @@ -167,3 +169,5 @@ public: bool ); }; + +} diff --git a/src/nasal_err.cpp b/src/nasal_err.cpp index eca1714..c3ce95e 100644 --- a/src/nasal_err.cpp +++ b/src/nasal_err.cpp @@ -1,6 +1,8 @@ #include "nasal_err.h" #include "repl.h" +namespace nasal { + #ifdef _WIN32 #include // use SetConsoleTextAttribute struct for_reset { @@ -184,4 +186,6 @@ void error::err( } } std::cerr << "\n\n"; -} \ No newline at end of file +} + +} diff --git a/src/nasal_err.h b/src/nasal_err.h index 8c0e50e..bbeeb2a 100644 --- a/src/nasal_err.h +++ b/src/nasal_err.h @@ -8,6 +8,8 @@ #include "nasal.h" +namespace nasal { + struct span { u32 begin_line; u32 begin_column; @@ -65,3 +67,5 @@ public: } u32 geterr() const {return cnt;} }; + +} diff --git a/src/nasal_import.cpp b/src/nasal_import.cpp index 31b862b..f7390ae 100644 --- a/src/nasal_import.cpp +++ b/src/nasal_import.cpp @@ -1,6 +1,8 @@ #include "nasal_import.h" #include "symbol_finder.h" +namespace nasal { + linker::linker(): show_path(false), lib_loaded(false), this_file(""), lib_path("") { @@ -346,3 +348,5 @@ const error& linker::link( delete old_tree_root; return err; } + +} diff --git a/src/nasal_import.h b/src/nasal_import.h index e50161f..fc53fe9 100644 --- a/src/nasal_import.h +++ b/src/nasal_import.h @@ -20,7 +20,9 @@ #include -class linker{ +namespace nasal { + +class linker { private: bool show_path; bool lib_loaded; @@ -31,6 +33,7 @@ private: std::vector module_load_stack; std::vector envpath; +private: bool import_check(expr*); bool exist(const std::string&); u16 find(const std::string&); @@ -53,3 +56,5 @@ public: const auto& get_this_file() const {return this_file;} const auto& get_lib_path() const {return lib_path;} }; + +} diff --git a/src/nasal_lexer.cpp b/src/nasal_lexer.cpp index 6874475..9b63ab8 100644 --- a/src/nasal_lexer.cpp +++ b/src/nasal_lexer.cpp @@ -7,6 +7,8 @@ #include "nasal_lexer.h" #include "repl.h" +namespace nasal { + bool lexer::skip(char c) { return c==' ' || c=='\n' || c=='\t' || c=='\r' || c==0; } @@ -372,3 +374,5 @@ const error& lexer::scan(const std::string& file) { res = ""; return err; } + +} diff --git a/src/nasal_lexer.h b/src/nasal_lexer.h index 5317a06..2862a57 100644 --- a/src/nasal_lexer.h +++ b/src/nasal_lexer.h @@ -19,6 +19,8 @@ #define S_ISREG(m) (((m)&0xF000)==0x8000) #endif +namespace nasal { + enum class tok:u32 { null=0, // null token (default token type) num, // number literal @@ -182,3 +184,5 @@ public: const error& scan(const std::string&); const std::vector& result() const {return toks;} }; + +} diff --git a/src/nasal_parse.cpp b/src/nasal_parse.cpp index e1aa64b..82257e6 100644 --- a/src/nasal_parse.cpp +++ b/src/nasal_parse.cpp @@ -1,6 +1,8 @@ #include "nasal_ast.h" #include "nasal_parse.h" +namespace nasal { + const error& parse::compile(const lexer& lexer) { toks=lexer.result().data(); ptr=in_func=in_loop=0; @@ -1057,3 +1059,5 @@ return_expr* parse::return_expression() { update_location(node); return node; } + +} diff --git a/src/nasal_parse.h b/src/nasal_parse.h index 9ee59bb..2d9f6dd 100644 --- a/src/nasal_parse.h +++ b/src/nasal_parse.h @@ -7,6 +7,8 @@ #include "nasal_lexer.h" #include "nasal_err.h" +namespace nasal { + class parse { #define thisspan (toks[ptr].loc) @@ -155,4 +157,6 @@ public: } const error& compile(const lexer&); static void easter_egg(); -}; \ No newline at end of file +}; + +} diff --git a/src/nasal_vm.cpp b/src/nasal_vm.cpp index caebcda..4ac5050 100644 --- a/src/nasal_vm.cpp +++ b/src/nasal_vm.cpp @@ -1,5 +1,7 @@ #include "nasal_vm.h" +namespace nasal { + void vm::init( const std::vector& strs, const std::vector& nums, @@ -442,3 +444,5 @@ mcallh: exec_nodie(o_mcallh); // -0 ret: exec_nodie(o_ret ); // -2 #endif } + +} diff --git a/src/nasal_vm.h b/src/nasal_vm.h index 26e10d4..af86bf6 100644 --- a/src/nasal_vm.h +++ b/src/nasal_vm.h @@ -13,6 +13,8 @@ #pragma warning (disable:4102) #endif +namespace nasal { + class vm { protected: @@ -954,4 +956,6 @@ inline void vm::o_ret() { if (!ctx.pc) { ngc.ctxreserve(); } -} \ No newline at end of file +} + +} diff --git a/src/optimizer.cpp b/src/optimizer.cpp index ed5a0fe..3b785f4 100644 --- a/src/optimizer.cpp +++ b/src/optimizer.cpp @@ -1,5 +1,7 @@ #include "optimizer.h" +namespace nasal { + void optimizer::const_string( binary_operator* node, string_literal* left_node, @@ -129,4 +131,6 @@ bool optimizer::visit_unary_operator(unary_operator* node) { void optimizer::do_optimization(code_block* root) { root->accept(this); -} \ No newline at end of file +} + +} diff --git a/src/optimizer.h b/src/optimizer.h index dc6ba7a..3c33453 100644 --- a/src/optimizer.h +++ b/src/optimizer.h @@ -5,6 +5,8 @@ #include "nasal_ast.h" #include "ast_visitor.h" +namespace nasal { + class optimizer:public ast_visitor { private: void const_string(binary_operator*, string_literal*, string_literal*); @@ -18,3 +20,5 @@ public: public: void do_optimization(code_block*); }; + +} diff --git a/src/repl.cpp b/src/repl.cpp index 8982547..a9f3ae1 100644 --- a/src/repl.cpp +++ b/src/repl.cpp @@ -6,6 +6,7 @@ #include "nasal_codegen.h" #include "nasal_vm.h" +namespace nasal { namespace repl { std::string repl::readline(std::string prompt = ">>> ") { @@ -142,4 +143,5 @@ void repl::execute() { } } -} \ No newline at end of file +} +} diff --git a/src/repl.h b/src/repl.h index f1c9b9c..ffa0d6e 100644 --- a/src/repl.h +++ b/src/repl.h @@ -8,6 +8,7 @@ #include #include +namespace nasal { namespace repl { struct info { @@ -37,4 +38,5 @@ public: void execute(); }; -} \ No newline at end of file +} +} diff --git a/src/symbol_finder.cpp b/src/symbol_finder.cpp index 7f34a55..c5105ae 100644 --- a/src/symbol_finder.cpp +++ b/src/symbol_finder.cpp @@ -1,5 +1,7 @@ #include "symbol_finder.h" +namespace nasal { + bool symbol_finder::visit_definition_expr(definition_expr* node) { if (node->get_variable_name()) { symbols.push_back({ @@ -40,4 +42,6 @@ const std::vector& symbol_finder::do_find(code_block symbols.clear(); root->accept(this); return symbols; -} \ No newline at end of file +} + +} diff --git a/src/symbol_finder.h b/src/symbol_finder.h index 545e94e..3114179 100644 --- a/src/symbol_finder.h +++ b/src/symbol_finder.h @@ -7,6 +7,8 @@ #include #include +namespace nasal { + class symbol_finder:public ast_visitor { public: struct symbol_info { @@ -22,4 +24,6 @@ public: bool visit_function(function*) override; bool visit_iter_expr(iter_expr*) override; const std::vector& do_find(code_block*); -}; \ No newline at end of file +}; + +}