📝 optimize code

This commit is contained in:
ValKmjolnir 2023-07-11 00:05:20 +08:00
parent eab84d5c0d
commit 94b6e84693
3 changed files with 34 additions and 33 deletions

View File

@ -16,7 +16,7 @@ var fib(var* args, usize size, gc* ngc) {
if (!size) { if (!size) {
return nas_err("fib","lack arguments"); return nas_err("fib","lack arguments");
} }
var num=args[0]; var num = args[0];
return var::num(fibonaci(num.tonum())); return var::num(fibonaci(num.tonum()));
} }
@ -24,15 +24,15 @@ var quick_fib(var* args, usize size, gc* ngc) {
if (!size) { if (!size) {
return nas_err("quick_fib","lack arguments"); return nas_err("quick_fib","lack arguments");
} }
double num=args[0].tonum(); double num = args[0].tonum();
if (num<2) { if (num<2) {
return var::num(num); return var::num(num);
} }
double a=1,b=1,res=0; double a = 1, b = 1, res = 0;
for(double i=1;i<num;i+=1) { for(double i = 1; i<num; ++i) {
res=a+b; res = a+b;
a=b; a = b;
b=res; b = res;
} }
return var::num(res); return var::num(res);
} }
@ -40,42 +40,43 @@ var quick_fib(var* args, usize size, gc* ngc) {
u32 ghost_for_test; u32 ghost_for_test;
void ghost_for_test_destructor(void* ptr) { void ghost_for_test_destructor(void* ptr) {
std::cout<<"ghost_for_test::destructor (0x"; std::cout << "ghost_for_test::destructor (0x";
std::cout<<std::hex<<(u64)ptr<<std::dec<<") {\n"; std::cout << std::hex << (u64)ptr << std::dec << ") {\n";
delete (u32*)ptr; delete (u32*)ptr;
std::cout<<" delete 0x"<<std::hex<<(u64)ptr<<std::dec<<";\n"; std::cout << " delete 0x" << std::hex << (u64)ptr << std::dec << ";\n";
std::cout<<"}\n"; std::cout << "}\n";
} }
var create_new_ghost(var* args, usize size, gc* ngc) { var create_new_ghost(var* args, usize size, gc* ngc) {
var res=ngc->alloc(vm_obj); var res = ngc->alloc(vm_obj);
res.obj().set(ghost_for_test, new u32, &ngc->global_ghost_type_table); res.obj().set(ghost_for_test, new u32, &ngc->global_ghost_type_table);
return res; return res;
} }
var set_new_ghost(var* args, usize size, gc* ngc) { var set_new_ghost(var* args, usize size, gc* ngc) {
var res=args[0]; var res = args[0];
if (!res.objchk(ghost_for_test)) { if (!res.objchk(ghost_for_test)) {
std::cout<<"set_new_ghost: not ghost for test type.\n"; std::cout << "set_new_ghost: not ghost for test type.\n";
return nil; return nil;
} }
f64 num=args[1].num(); f64 num = args[1].num();
*((u32*)res.obj().ptr)=static_cast<u32>(num); *((u32*)res.obj().ptr) = static_cast<u32>(num);
std::cout<<"set_new_ghost: successfully set ghost = "<<num<<"\n"; std::cout << "set_new_ghost: successfully set ghost = " << num << "\n";
return nil; return nil;
} }
var print_new_ghost(var* args, usize size, gc* ngc) { var print_new_ghost(var* args, usize size, gc* ngc) {
var res=args[0]; var res = args[0];
if (!res.objchk(ghost_for_test)) { if (!res.objchk(ghost_for_test)) {
std::cout<<"print_new_ghost: not ghost for test type.\n"; std::cout << "print_new_ghost: not ghost for test type.\n";
return nil; return nil;
} }
std::cout<<"print_new_ghost: "<<res.obj()<<" result = "<<*((u32*)res.obj().ptr)<<"\n"; std::cout << "print_new_ghost: " << res.obj() << " result = "
<< *((u32*)res.obj().ptr) << "\n";
return nil; return nil;
} }
module_func_info func_tbl[]={ module_func_info func_tbl[] = {
{"fib", fib}, {"fib", fib},
{"quick_fib", quick_fib}, {"quick_fib", quick_fib},
{"create_ghost", create_new_ghost}, {"create_ghost", create_new_ghost},
@ -88,10 +89,10 @@ module_func_info func_tbl[]={
extern "C" module_func_info* get(ghost_register_table* table) { extern "C" module_func_info* get(ghost_register_table* table) {
if (table->exists("fib_for_test")) { if (table->exists("fib_for_test")) {
nasal_fib_module::ghost_for_test=table->get_ghost_type_index("fib_for_test"); nasal_fib_module::ghost_for_test = table->get_ghost_type_index("fib_for_test");
return nasal_fib_module::func_tbl; return nasal_fib_module::func_tbl;
} }
nasal_fib_module::ghost_for_test=table->register_ghost_type( nasal_fib_module::ghost_for_test = table->register_ghost_type(
"fib_for_test", "fib_for_test",
nasal_fib_module::ghost_for_test_destructor nasal_fib_module::ghost_for_test_destructor
); );

View File

@ -32,7 +32,7 @@ using u64 = std::uint64_t;
using usize = std::size_t; using usize = std::size_t;
using f64 = double; using f64 = double;
const u32 STACK_DEPTH=4096; const u32 STACK_DEPTH = 4096;
f64 hex2f(const char*); f64 hex2f(const char*);
f64 oct2f(const char*); f64 oct2f(const char*);

View File

@ -1,17 +1,17 @@
#include "nasal_import.h" #include "nasal_import.h"
linker::linker(error& e): show_path(false), lib_loaded(false), err(e) { linker::linker(error& e):
char sep=is_windows()? ';':':'; show_path(false), lib_loaded(false), err(e) {
std::string PATH=getenv("PATH"); char sep = is_windows()? ';':':';
usize last=0; std::string PATH = getenv("PATH");
usize pos=PATH.find(sep, 0); usize last = 0, pos = PATH.find(sep, 0);
while(pos!=std::string::npos) { while(pos!=std::string::npos) {
std::string dirpath=PATH.substr(last, pos-last); std::string dirpath = PATH.substr(last, pos-last);
if (dirpath.length()) { if (dirpath.length()) {
envpath.push_back(dirpath); envpath.push_back(dirpath);
} }
last=pos+1; last = pos+1;
pos=PATH.find(sep, last); pos = PATH.find(sep, last);
} }
if (last!=PATH.length()) { if (last!=PATH.length()) {
envpath.push_back(PATH.substr(last)); envpath.push_back(PATH.substr(last));
@ -132,7 +132,7 @@ bool linker::exist(const std::string& file) {
void linker::link(code_block* new_tree_root, code_block* old_tree_root) { void linker::link(code_block* new_tree_root, code_block* old_tree_root) {
// add children of add_root to the back of root // add children of add_root to the back of root
for(auto& i:old_tree_root->get_expressions()) { for(auto& i : old_tree_root->get_expressions()) {
new_tree_root->add_expression(i); new_tree_root->add_expression(i);
} }
// clean old root // clean old root