This commit is contained in:
Valk Richard Li
2021-02-12 22:27:41 +08:00
parent 3be50116fa
commit b5514fd269
2 changed files with 31 additions and 61 deletions
+20 -50
View File
@@ -8,6 +8,12 @@ var print=func(elements...)
nasal_call_builtin_std_cout(elements); nasal_call_builtin_std_cout(elements);
return nil; return nil;
}; };
var println=func(elements...)
{
nasal_call_builtin_std_cout(elements);
print('\n');
return nil;
}
var append=func(vector,elements...) var append=func(vector,elements...)
{ {
nasal_call_builtin_push_back(vector,elements); nasal_call_builtin_push_back(vector,elements);
@@ -110,58 +116,22 @@ var io=
var bits= var bits=
{ {
bitxor:func(a,b) bitxor: func(a,b){return nasal_call_builtin_xor(a,b); },
{ bitand: func(a,b){return nasal_call_builtin_and(a,b); },
return nasal_call_builtin_xor(a,b); bitor: func(a,b){return nasal_call_builtin_or(a,b); },
}, bitnand: func(a,b){return nasal_call_builtin_nand(a,b);},
bitand:func(a,b) bitnot: func(a) {return nasal_call_builtin_not(a); }
{
return nasal_call_builtin_and(a,b);
},
bitor:func(a,b)
{
return nasal_call_builtin_or(a,b);
},
bitnand:func(a,b)
{
return nasal_call_builtin_nand(a,b);
},
bitnot:func(a)
{
return nasal_call_builtin_not(a);
}
}; };
var math= var math=
{ {
e:2.7182818284590452354, e: 2.7182818284590452354,
pi:3.14159265358979323846264338327950288, pi: 3.14159265358979323846264338327950288,
sin:func(x) sin: func(x) {return nasal_call_builtin_sin(x); },
{ cos: func(x) {return nasal_call_builtin_cos(x); },
return nasal_call_builtin_sin(x); tan: func(x) {return nasal_call_builtin_tan(x); },
}, exp: func(x) {return nasal_call_builtin_exp(x); },
cos:func(x) ln: func(x) {return nasal_call_builtin_cpp_math_ln(x); },
{ sqrt: func(x) {return nasal_call_builtin_cpp_math_sqrt(x);},
return nasal_call_builtin_cos(x); atan2: func(x,y){return nasal_call_builtin_cpp_atan2(x,y); }
},
tan:func(x)
{
return nasal_call_builtin_tan(x);
},
exp:func(x)
{
return nasal_call_builtin_exp(x);
},
ln:func(x)
{
return nasal_call_builtin_cpp_math_ln(x);
},
sqrt:func(x)
{
return nasal_call_builtin_cpp_math_sqrt(x);
},
atan2:func(x,y)
{
return nasal_call_builtin_cpp_atan2(x,y);
},
}; };
+11 -11
View File
@@ -68,7 +68,7 @@ void builtin_error_occurred(std::string func_name,std::string info)
} }
// register builtin function's name and it's address here in this table below // register builtin function's name and it's address here in this table below
// this table must and with {"",NULL} // this table must end with {"",NULL}
struct FUNC_TABLE struct FUNC_TABLE
{ {
std::string func_name; std::string func_name;
@@ -134,10 +134,8 @@ nasal_val* builtin_print(nasal_val* local_scope_addr,nasal_gc& gc)
case vm_func: std::cout<<"func(...){...}"; break; case vm_func: std::cout<<"func(...){...}"; break;
} }
} }
std::cout<<"\n";
// generate return value // generate return value
nasal_val* ret_addr=gc.gc_alloc(vm_nil); return gc.gc_alloc(vm_nil);
return ret_addr;
} }
nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc) nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc)
{ {
@@ -157,8 +155,7 @@ nasal_val* builtin_append(nasal_val* local_scope_addr,nasal_gc& gc)
gc.add_reference(value_address); gc.add_reference(value_address);
ref_vector.add_elem(value_address); ref_vector.add_elem(value_address);
} }
nasal_val* ret_addr=gc.gc_alloc(vm_nil); return gc.gc_alloc(vm_nil);
return ret_addr;
} }
nasal_val* builtin_setsize(nasal_val* local_scope_addr,nasal_gc& gc) nasal_val* builtin_setsize(nasal_val* local_scope_addr,nasal_gc& gc)
{ {
@@ -335,10 +332,13 @@ nasal_val* builtin_split(nasal_val* local_scope_addr,nasal_gc& gc)
} }
if(check_delimeter) if(check_delimeter)
{ {
nasal_val* str_addr=gc.gc_alloc(vm_str); if(tmp.length())
str_addr->set_string(tmp); {
ref_vec.add_elem(str_addr); nasal_val* str_addr=gc.gc_alloc(vm_str);
tmp=""; str_addr->set_string(tmp);
ref_vec.add_elem(str_addr);
tmp="";
}
i+=delimeter_len-1; i+=delimeter_len-1;
} }
else else
@@ -763,7 +763,7 @@ nasal_val* builtin_substr(nasal_val* local_scope_addr,nasal_gc& gc)
std::string str=str_addr->get_string(); std::string str=str_addr->get_string();
int begin=(int)begin_addr->get_number(); int begin=(int)begin_addr->get_number();
int len=(int)length_addr->get_number(); int len=(int)length_addr->get_number();
if(begin+len>=str.length()) if(begin+len>str.length())
{ {
builtin_error_occurred("susbtr","index out of range"); builtin_error_occurred("susbtr","index out of range");
return NULL; return NULL;