From 8e38764df0a68eea1e4ed0160269b0f199ff775d Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Sun, 12 May 2024 19:34:05 +0800 Subject: [PATCH] :memo: change span data from u32 to u64 --- README.md | 1 - doc/README_zh.md | 1 - module/fib.cpp | 6 ++++++ src/ast_dumper.h | 3 +-- src/nasal_ast.h | 10 +++++----- src/nasal_dbg.cpp | 2 +- src/nasal_err.cpp | 22 +++++++++++----------- src/nasal_err.h | 16 ++++++++++------ src/nasal_lexer.cpp | 26 +++++++++++++------------- src/nasal_lexer.h | 6 +++--- src/nasal_opcode.h | 2 +- src/nasal_parse.cpp | 4 ++-- src/nasal_parse.h | 6 +++--- src/nasal_vm.cpp | 4 ++-- src/natives/nasal_builtin.cpp | 10 +++++++--- src/natives/nasal_builtin.h | 2 ++ tools/pack.py | 2 -- 17 files changed, 67 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index a90f40c..f5a72e8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ -![GitHub code size](https://img.shields.io/github/languages/code-size/ValKmjolnir/Nasal-Interpreter?style=flat-square&logo=github) ![GitHub release(latest by date)](https://img.shields.io/github/v/release/ValKmjolnir/Nasal-Interpreter?style=flat-square&logo=github) [![license](https://img.shields.io/badge/license-GPLv2-green?style=flat-square&logo=github)](./LICENSE) ![downloads](https://img.shields.io/github/downloads/ValKmjolnir/Nasal-Interpreter/total.svg?style=flat-square&logo=github) diff --git a/doc/README_zh.md b/doc/README_zh.md index 1e2a96b..2f655e9 100644 --- a/doc/README_zh.md +++ b/doc/README_zh.md @@ -2,7 +2,6 @@ -![GitHub code size](https://img.shields.io/github/languages/code-size/ValKmjolnir/Nasal-Interpreter?style=flat-square&logo=github) ![GitHub release(latest by date)](https://img.shields.io/github/v/release/ValKmjolnir/Nasal-Interpreter?style=flat-square&logo=github) [![license](https://img.shields.io/badge/license-GPLv2-green?style=flat-square&logo=github)](../LICENSE) ![downloads](https://img.shields.io/github/downloads/ValKmjolnir/Nasal-Interpreter/total.svg?style=flat-square&logo=github) diff --git a/module/fib.cpp b/module/fib.cpp index 68e7264..d618a37 100644 --- a/module/fib.cpp +++ b/module/fib.cpp @@ -53,7 +53,9 @@ struct ghost_obj { void ghost_for_test_destructor(void* ptr) { std::cout << "ghost_for_test::destructor (0x"; std::cout << std::hex << reinterpret_cast(ptr) << std::dec << ") {\n"; + delete static_cast(ptr); + std::cout << " delete 0x" << std::hex; std::cout << reinterpret_cast(ptr) << std::dec << ";\n"; std::cout << "}\n"; @@ -62,7 +64,9 @@ void ghost_for_test_destructor(void* ptr) { void ghost_for_test_gc_marker(void* ptr, std::vector* bfs_queue) { std::cout << "ghost_for_test::mark (0x"; std::cout << std::hex << reinterpret_cast(ptr) << std::dec << ") {\n"; + bfs_queue->push_back(static_cast(ptr)->test_string); + std::cout << " mark 0x" << std::hex; std::cout << reinterpret_cast(ptr) << std::dec << "->test_string;\n"; std::cout << "}\n"; @@ -86,8 +90,10 @@ var set_new_ghost(var* args, usize size, gc* ngc) { return nil; } f64 num = args[1].num(); + reinterpret_cast(res.ghost().pointer)->number = static_cast(num); std::cout << "set_new_ghost: successfully set ghost.number = " << num << "\n"; + reinterpret_cast(res.ghost().pointer)->test_string = ngc->newstr("just for test"); std::cout << "set_new_ghost: successfully set ghost.test_string = just for test\n"; return nil; diff --git a/src/ast_dumper.h b/src/ast_dumper.h index e20f5c4..2049044 100644 --- a/src/ast_dumper.h +++ b/src/ast_dumper.h @@ -35,8 +35,7 @@ private: std::string format_location(const span& location) { std::stringstream ss; ss << " -> "; - ss << location.file << ":"; - ss << location.begin_line << ":" << location.begin_column + 1; + location.dump_begin(ss); ss << "\n"; return ss.str(); } diff --git a/src/nasal_ast.h b/src/nasal_ast.h index 2d2a88c..3913ff9 100644 --- a/src/nasal_ast.h +++ b/src/nasal_ast.h @@ -8,7 +8,7 @@ namespace nasal { -enum class expr_type: u32 { +enum class expr_type { ast_null = 0, // null node ast_use, // use statement ast_block, // code block @@ -65,13 +65,13 @@ public: expr(const span& location, expr_type node_type): nd_loc(location), nd_type(node_type) {} virtual ~expr() = default; - void set_begin(u32 line, u32 column) { + void set_begin(u64 line, u64 column) { nd_loc.begin_line = line; nd_loc.begin_column = column; } - const span& get_location() const {return nd_loc;} - const u32 get_line() const {return nd_loc.begin_line;} - expr_type get_type() const {return nd_type;} + const auto& get_location() const { return nd_loc; } + const auto get_line() const { return nd_loc.begin_line; } + auto get_type() const { return nd_type; } void update_location(const span& location) { nd_loc.end_line = location.end_line; nd_loc.end_column = location.end_column; diff --git a/src/nasal_dbg.cpp b/src/nasal_dbg.cpp index 38c9e39..0975d3b 100644 --- a/src/nasal_dbg.cpp +++ b/src/nasal_dbg.cpp @@ -260,7 +260,7 @@ void dbg::run( std::vector code; std::vector code_file_index; std::vector code_line; - for(auto& i : gen.codes()) { + for(const auto& i : gen.codes()) { code.push_back(i.op); code_file_index.push_back(i.fidx); code_line.push_back(i.line); diff --git a/src/nasal_err.cpp b/src/nasal_err.cpp index 4f201ac..42a71d3 100644 --- a/src/nasal_err.cpp +++ b/src/nasal_err.cpp @@ -127,15 +127,15 @@ void error::err( ++cnt; - std::cerr - << red << stage << ": " << white << info << reset << "\n" << cyan << " --> " - << red << loc.file << ":" << loc.begin_line << ":" << loc.begin_column+1 - << reset << "\n"; + std::cerr << red << stage << ": " << white << info << reset << "\n"; + std::cerr << cyan << " --> " << red; + loc.dump_begin(std::cerr); + std::cerr << reset << "\n"; const usize maxlen = std::to_string(loc.end_line).length(); const std::string iden = identation(maxlen); - for(u32 line = loc.begin_line; line<=loc.end_line; ++line) { + for(u64 line = loc.begin_line; line<=loc.end_line; ++line) { // skip line 0 if (!line) { continue; @@ -164,25 +164,25 @@ void error::err( // output underline std::cerr << cyan << iden << " | " << reset; if (loc.begin_line==loc.end_line) { - for(u32 i = 0; i toks; - const std::unordered_map typetbl { + const std::unordered_map token_mapper = { {"use" ,tok::use }, {"true" ,tok::tktrue }, {"false" ,tok::tkfalse }, diff --git a/src/nasal_opcode.h b/src/nasal_opcode.h index 687a32c..9a3b835 100644 --- a/src/nasal_opcode.h +++ b/src/nasal_opcode.h @@ -101,7 +101,7 @@ struct opcode { u8 op; // opcode u16 fidx; // source code file index u32 num; // immediate num - u32 line; // location line of source code + u64 line; // location line of source code opcode() = default; opcode(const opcode&) = default; opcode& operator=(const opcode&) = default; diff --git a/src/nasal_parse.cpp b/src/nasal_parse.cpp index 06e40a1..dc3b1a2 100644 --- a/src/nasal_parse.cpp +++ b/src/nasal_parse.cpp @@ -105,7 +105,7 @@ bool parse::check_comma(const tok* panic_set) { } bool parse::check_tuple() { - u32 check_ptr=ptr, curve=1, bracket=0, brace=0; + u64 check_ptr = ptr, curve = 1, bracket = 0, brace = 0; while(toks[++check_ptr].type!=tok::eof && curve) { switch(toks[check_ptr].type) { case tok::lcurve: ++curve; break; @@ -157,7 +157,7 @@ bool parse::check_in_curve_multi_definition() { bool parse::check_special_call() { // special call means like this: function_name(a:1,b:2,c:3); - u32 check_ptr = ptr, curve = 1, bracket = 0, brace = 0; + u64 check_ptr = ptr, curve = 1, bracket = 0, brace = 0; while(toks[++check_ptr].type!=tok::eof && curve) { switch(toks[check_ptr].type) { case tok::lcurve: ++curve; break; diff --git a/src/nasal_parse.h b/src/nasal_parse.h index f662770..2d8ff27 100644 --- a/src/nasal_parse.h +++ b/src/nasal_parse.h @@ -15,9 +15,9 @@ class parse { #define prevspan (ptr!=0? toks[ptr-1].loc:toks[ptr].loc) private: - u32 ptr; - u32 in_func; // count function block - u32 in_loop; // count loop block + u64 ptr; + u64 in_func; // count function block + u64 in_loop; // count loop block const token* toks; code_block* root; error err; diff --git a/src/nasal_vm.cpp b/src/nasal_vm.cpp index 68f8031..496155f 100644 --- a/src/nasal_vm.cpp +++ b/src/nasal_vm.cpp @@ -451,7 +451,7 @@ void vm::run( &&mcallv, &&mcallh, &&ret }; std::vector code; - for(auto& i : gen.codes()) { + for(const auto& i : gen.codes()) { code.push_back(oprs[i.op]); imm.push_back(i.num); } @@ -506,7 +506,7 @@ void vm::run( &vm::o_ret }; std::vector code; - for(auto& i : gen.codes()) { + for(const auto& i : gen.codes()) { code.push_back(oprs[i.op]); imm.push_back(i.num); } diff --git a/src/natives/nasal_builtin.cpp b/src/natives/nasal_builtin.cpp index 04e695b..15af44a 100644 --- a/src/natives/nasal_builtin.cpp +++ b/src/natives/nasal_builtin.cpp @@ -339,6 +339,7 @@ var builtin_left(context* ctx, gc* ngc) { auto local = ctx->localr; var str = local[1]; var len = local[2]; + if (!str.is_str()) { return nas_err("left", "\"string\" must be string"); } @@ -355,20 +356,23 @@ var builtin_right(context* ctx, gc* ngc) { auto local = ctx->localr; var str = local[1]; var len = local[2]; + if (!str.is_str()) { return nas_err("right", "\"string\" must be string"); } if (!len.is_num()) { return nas_err("right", "\"length\" must be number"); } + i32 length = static_cast(len.num()); - i32 srclen = str.str().length(); + i32 srclen = static_cast(str.str().length()); if (length>srclen) { length = srclen; } if (length<0) { length = 0; } + return ngc->newstr(str.str().substr(srclen-length, srclen)); } @@ -566,12 +570,12 @@ public: } f64 elapsed_milliseconds() { - auto duration = std::chrono::high_resolution_clock::now() - stamp; + const auto duration = std::chrono::high_resolution_clock::now() - stamp; return std::chrono::duration_cast(duration).count(); } f64 elapsed_microseconds() { - auto duration = std::chrono::high_resolution_clock::now() - stamp; + const auto duration = std::chrono::high_resolution_clock::now() - stamp; return std::chrono::duration_cast(duration).count(); } }; diff --git a/src/natives/nasal_builtin.h b/src/natives/nasal_builtin.h index 9ca7503..28674cd 100644 --- a/src/natives/nasal_builtin.h +++ b/src/natives/nasal_builtin.h @@ -66,10 +66,12 @@ var builtin_values(context*, gc*); var builtin_sleep(context*, gc*); var builtin_platform(context*, gc*); var builtin_arch(context*, gc*); + // md5 related functions std::string tohex(u32); std::string md5(const std::string&); var builtin_md5(context*, gc*); + var builtin_maketimestamp(context*, gc*); var builtin_time_stamp(context*, gc*); var builtin_elapsed_millisecond(context*, gc*); diff --git a/tools/pack.py b/tools/pack.py index 63aa477..3be7d00 100644 --- a/tools/pack.py +++ b/tools/pack.py @@ -4,8 +4,6 @@ import os import platform import shutil -nasal_version = "11.2" - build_directory = pathlib.Path("build") if not os.path.exists(build_directory): print("pack binaries failed: build directory not found")