add native function: srand, values, find.
This commit is contained in:
parent
399b2f0ce9
commit
e846e51175
22
lib.nas
22
lib.nas
|
@ -66,7 +66,7 @@ var floor=func(val){
|
||||||
return __builtin_floor(val);
|
return __builtin_floor(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
# abs gets absolute number
|
# abs gets absolute number.
|
||||||
var abs=func(n){
|
var abs=func(n){
|
||||||
return n>0?n:-n;
|
return n>0?n:-n;
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,11 @@ var die=func(str){
|
||||||
return __builtin_die(str);
|
return __builtin_die(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# find will give the first position of the needle in haystack
|
||||||
|
var find=func(needle,haystack){
|
||||||
|
return __builtin_find(needle,haystack);
|
||||||
|
}
|
||||||
|
|
||||||
# typeof is used to get the type of an object.
|
# typeof is used to get the type of an object.
|
||||||
# this function returns a string.
|
# this function returns a string.
|
||||||
var typeof=func(object){
|
var typeof=func(object){
|
||||||
|
@ -175,11 +180,20 @@ var chr=func(code){
|
||||||
|
|
||||||
# mut is used to change unmutable strings to mutable.
|
# mut is used to change unmutable strings to mutable.
|
||||||
var mut=func(str){
|
var mut=func(str){
|
||||||
if(typeof(str)!="str")
|
|
||||||
die("mut: \"str\" must be string.");
|
|
||||||
return str~"";
|
return str~"";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# srand wraps up rand, using time(0) as the seed.
|
||||||
|
var srand=func(){
|
||||||
|
rand(time(0));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# values() gets all values in a hash.
|
||||||
|
var values=func(hash){
|
||||||
|
return __builtin_values(hash);
|
||||||
|
}
|
||||||
|
|
||||||
# println has the same function as print.
|
# println has the same function as print.
|
||||||
# but it will output a '\n' after using print.
|
# but it will output a '\n' after using print.
|
||||||
var println=func(elems...){
|
var println=func(elems...){
|
||||||
|
@ -193,7 +207,7 @@ var isfunc=func(f){
|
||||||
}
|
}
|
||||||
|
|
||||||
var isghost=func(g){
|
var isghost=func(g){
|
||||||
die("this runtime have no ghost object");
|
die("this runtime has no ghost object");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ nas_native(builtin_delete);
|
||||||
nas_native(builtin_keys);
|
nas_native(builtin_keys);
|
||||||
nas_native(builtin_import);
|
nas_native(builtin_import);
|
||||||
nas_native(builtin_die);
|
nas_native(builtin_die);
|
||||||
|
nas_native(builtin_find);
|
||||||
nas_native(builtin_type);
|
nas_native(builtin_type);
|
||||||
nas_native(builtin_substr);
|
nas_native(builtin_substr);
|
||||||
nas_native(builtin_streq);
|
nas_native(builtin_streq);
|
||||||
|
@ -53,6 +54,7 @@ nas_native(builtin_left);
|
||||||
nas_native(builtin_right);
|
nas_native(builtin_right);
|
||||||
nas_native(builtin_cmp);
|
nas_native(builtin_cmp);
|
||||||
nas_native(builtin_chr);
|
nas_native(builtin_chr);
|
||||||
|
nas_native(builtin_values);
|
||||||
nas_native(builtin_open);
|
nas_native(builtin_open);
|
||||||
nas_native(builtin_close);
|
nas_native(builtin_close);
|
||||||
nas_native(builtin_read);
|
nas_native(builtin_read);
|
||||||
|
@ -135,6 +137,7 @@ struct
|
||||||
{"__builtin_keys", builtin_keys },
|
{"__builtin_keys", builtin_keys },
|
||||||
{"__builtin_import", builtin_import },
|
{"__builtin_import", builtin_import },
|
||||||
{"__builtin_die", builtin_die },
|
{"__builtin_die", builtin_die },
|
||||||
|
{"__builtin_find", builtin_find },
|
||||||
{"__builtin_type", builtin_type },
|
{"__builtin_type", builtin_type },
|
||||||
{"__builtin_substr", builtin_substr },
|
{"__builtin_substr", builtin_substr },
|
||||||
{"__builtin_streq", builtin_streq },
|
{"__builtin_streq", builtin_streq },
|
||||||
|
@ -142,6 +145,7 @@ struct
|
||||||
{"__builtin_right", builtin_right },
|
{"__builtin_right", builtin_right },
|
||||||
{"__builtin_cmp", builtin_cmp },
|
{"__builtin_cmp", builtin_cmp },
|
||||||
{"__builtin_chr", builtin_chr },
|
{"__builtin_chr", builtin_chr },
|
||||||
|
{"__builtin_values", builtin_values },
|
||||||
{"__builtin_open", builtin_open },
|
{"__builtin_open", builtin_open },
|
||||||
{"__builtin_close", builtin_close },
|
{"__builtin_close", builtin_close },
|
||||||
{"__builtin_read", builtin_read },
|
{"__builtin_read", builtin_read },
|
||||||
|
@ -617,6 +621,19 @@ nasal_ref builtin_die(nasal_ref* local,nasal_gc& gc)
|
||||||
std::cerr<<"[vm] error: "<<str.str()<<'\n';
|
std::cerr<<"[vm] error: "<<str.str()<<'\n';
|
||||||
return nasal_ref(vm_none);
|
return nasal_ref(vm_none);
|
||||||
}
|
}
|
||||||
|
nasal_ref builtin_find(nasal_ref* local,nasal_gc& gc)
|
||||||
|
{
|
||||||
|
nasal_ref needle=local[1];
|
||||||
|
nasal_ref haystack=local[2];
|
||||||
|
if(needle.type!=vm_str)
|
||||||
|
return builtin_err("find","\"needle\" must be string");
|
||||||
|
if(haystack.type!=vm_str)
|
||||||
|
return builtin_err("find","\"haystack\" must be string");
|
||||||
|
size_t pos=haystack.str().find(needle.str());
|
||||||
|
if(pos==std::string::npos)
|
||||||
|
return {vm_num,(double)-1};
|
||||||
|
return {vm_num,(double)pos};
|
||||||
|
}
|
||||||
nasal_ref builtin_type(nasal_ref* local,nasal_gc& gc)
|
nasal_ref builtin_type(nasal_ref* local,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
nasal_ref val=local[1];
|
nasal_ref val=local[1];
|
||||||
|
@ -737,6 +754,17 @@ nasal_ref builtin_chr(nasal_ref* local,nasal_gc& gc)
|
||||||
ret.str()=" ";
|
ret.str()=" ";
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
nasal_ref builtin_values(nasal_ref* local,nasal_gc& gc)
|
||||||
|
{
|
||||||
|
nasal_ref hash=local[1];
|
||||||
|
if(hash.type!=vm_hash)
|
||||||
|
return builtin_err("values","\"hash\" must be a hashmap");
|
||||||
|
nasal_ref vec=gc.alloc(vm_vec);
|
||||||
|
auto& v=vec.vec().elems;
|
||||||
|
for(auto& i:hash.hash().elems)
|
||||||
|
v.push_back(i.second);
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
void obj_file_destructor(void* ptr)
|
void obj_file_destructor(void* ptr)
|
||||||
{
|
{
|
||||||
fclose((FILE*)ptr);
|
fclose((FILE*)ptr);
|
||||||
|
|
22
stl/lib.nas
22
stl/lib.nas
|
@ -66,7 +66,7 @@ var floor=func(val){
|
||||||
return __builtin_floor(val);
|
return __builtin_floor(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
# abs gets absolute number
|
# abs gets absolute number.
|
||||||
var abs=func(n){
|
var abs=func(n){
|
||||||
return n>0?n:-n;
|
return n>0?n:-n;
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,11 @@ var die=func(str){
|
||||||
return __builtin_die(str);
|
return __builtin_die(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# find will give the first position of the needle in haystack
|
||||||
|
var find=func(needle,haystack){
|
||||||
|
return __builtin_find(needle,haystack);
|
||||||
|
}
|
||||||
|
|
||||||
# typeof is used to get the type of an object.
|
# typeof is used to get the type of an object.
|
||||||
# this function returns a string.
|
# this function returns a string.
|
||||||
var typeof=func(object){
|
var typeof=func(object){
|
||||||
|
@ -175,11 +180,20 @@ var chr=func(code){
|
||||||
|
|
||||||
# mut is used to change unmutable strings to mutable.
|
# mut is used to change unmutable strings to mutable.
|
||||||
var mut=func(str){
|
var mut=func(str){
|
||||||
if(typeof(str)!="str")
|
|
||||||
die("mut: \"str\" must be string.");
|
|
||||||
return str~"";
|
return str~"";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# srand wraps up rand, using time(0) as the seed.
|
||||||
|
var srand=func(){
|
||||||
|
rand(time(0));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# values() gets all values in a hash.
|
||||||
|
var values=func(hash){
|
||||||
|
return __builtin_values(hash);
|
||||||
|
}
|
||||||
|
|
||||||
# println has the same function as print.
|
# println has the same function as print.
|
||||||
# but it will output a '\n' after using print.
|
# but it will output a '\n' after using print.
|
||||||
var println=func(elems...){
|
var println=func(elems...){
|
||||||
|
@ -193,7 +207,7 @@ var isfunc=func(f){
|
||||||
}
|
}
|
||||||
|
|
||||||
var isghost=func(g){
|
var isghost=func(g){
|
||||||
die("this runtime have no ghost object");
|
die("this runtime has no ghost object");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -166,4 +166,13 @@ print(
|
||||||
isvec([]),' ',isvec("[]"),'\n',
|
isvec([]),' ',isvec("[]"),'\n',
|
||||||
vecindex([0,1,2,3,4],1),'\n',
|
vecindex([0,1,2,3,4],1),'\n',
|
||||||
vecindex(["apple","banana"],"apple")!=nil,'\n'
|
vecindex(["apple","banana"],"apple")!=nil,'\n'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
println(values({
|
||||||
|
a:1,
|
||||||
|
b:2,
|
||||||
|
c:3
|
||||||
|
}));
|
||||||
|
println(find("cd", "abcdef")); # prints 2
|
||||||
|
println(find("x", "abcdef")); # prints -1
|
||||||
|
println(find("cd", "abcdef")); # prints 2
|
Loading…
Reference in New Issue