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

70
lib.nas
View File

@ -8,6 +8,12 @@ var print=func(elements...)
nasal_call_builtin_std_cout(elements);
return nil;
};
var println=func(elements...)
{
nasal_call_builtin_std_cout(elements);
print('\n');
return nil;
}
var append=func(vector,elements...)
{
nasal_call_builtin_push_back(vector,elements);
@ -110,58 +116,22 @@ var io=
var bits=
{
bitxor:func(a,b)
{
return nasal_call_builtin_xor(a,b);
},
bitand:func(a,b)
{
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);
}
bitxor: func(a,b){return nasal_call_builtin_xor(a,b); },
bitand: func(a,b){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=
{
e:2.7182818284590452354,
pi:3.14159265358979323846264338327950288,
sin:func(x)
{
return nasal_call_builtin_sin(x);
},
cos:func(x)
{
return nasal_call_builtin_cos(x);
},
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);
},
e: 2.7182818284590452354,
pi: 3.14159265358979323846264338327950288,
sin: func(x) {return nasal_call_builtin_sin(x); },
cos: func(x) {return nasal_call_builtin_cos(x); },
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); }
};

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
// this table must and with {"",NULL}
// this table must end with {"",NULL}
struct FUNC_TABLE
{
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;
}
}
std::cout<<"\n";
// generate return value
nasal_val* ret_addr=gc.gc_alloc(vm_nil);
return ret_addr;
return gc.gc_alloc(vm_nil);
}
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);
ref_vector.add_elem(value_address);
}
nasal_val* ret_addr=gc.gc_alloc(vm_nil);
return ret_addr;
return gc.gc_alloc(vm_nil);
}
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)
{
nasal_val* str_addr=gc.gc_alloc(vm_str);
str_addr->set_string(tmp);
ref_vec.add_elem(str_addr);
tmp="";
if(tmp.length())
{
nasal_val* str_addr=gc.gc_alloc(vm_str);
str_addr->set_string(tmp);
ref_vec.add_elem(str_addr);
tmp="";
}
i+=delimeter_len-1;
}
else
@ -763,7 +763,7 @@ nasal_val* builtin_substr(nasal_val* local_scope_addr,nasal_gc& gc)
std::string str=str_addr->get_string();
int begin=(int)begin_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");
return NULL;