add notes of some native functions in lib.nas

This commit is contained in:
ValKmjolnir 2022-01-26 23:51:25 +08:00
parent b92eb4b089
commit 05ab4640da
2 changed files with 159 additions and 27 deletions

184
lib.nas
View File

@ -1,29 +1,161 @@
var import= func(filename){return __builtin_import(filename);} # lib.nas
var print= func(elems...){return __builtin_print(elems);}
var append= func(vec,elems...){return __builtin_append(vec,elems);} # import is used to link another file, this lib function will do nothing.
var setsize= func(vec,size){return __builtin_setsize(vec,size);} # because nasal_import will recognize this and link files before generating bytecode.
var system= func(str){return __builtin_system(str);} var import=func(filename){
var input= func(){return __builtin_input();} return __builtin_import(filename);
var split= func(deli,str){return __builtin_split(deli,str);} }
var rand= func(seed=nil){return __builtin_rand(seed);}
var id= func(object){return __builtin_id(object);} # print is used to print all things in nasal, try and see how it works.
var int= func(val){return __builtin_int(val);} # this function uses std::cout/printf to output logs.
var num= func(val){return __builtin_num(val);} var print=func(elems...){
var pop= func(vec){return __builtin_pop(vec);} return __builtin_print(elems);
var str= func(num){return __builtin_str(num);} }
var size= func(object){return __builtin_size(object);}
var contains= func(hash,key){return __builtin_contains(hash,key);} # append is used to add values into a vector.
var delete= func(hash,key){return __builtin_delete(hash,key);} var append=func(vec,elems...){
var keys= func(hash){return __builtin_keys(hash);} return __builtin_append(vec,elems);
var time= func(begin){return __builtin_time(begin);} }
var die= func(str){return __builtin_die(str);}
var typeof= func(object){return __builtin_type(object);} # setsize is used to change the size of vector.
var substr= func(str,begin,len){return __builtin_substr(str,begin,len);} # if the size is larger than before,
var streq= func(a,b){return __builtin_streq(a,b);} # this function will fill vm_nil into uninitialized space.
var left= func(str,len){return __builtin_left(str,len);} var setsize=func(vec,size){
var right= func(str,len){return __builtin_right(str,len);} return __builtin_setsize(vec,size);
var cmp= func(a,b){return __builtin_cmp(a,b);} }
var chr= func(code){return __builtin_chr(code);}
# system has the same use in C.
var system=func(str){
return __builtin_system(str);
}
# input uses std::cin and returns what we input.
var input=func(){
return __builtin_input();
}
# split a string by delimiter for example:
# split("ll","hello world") -> ["he","o world"]
# this function will return a vector.
var split=func(deli,str){
return __builtin_split(deli,str);
}
# rand has the same function as the rand in C
# if seed is nil, it will return the random number.
# if seed is not nil, it will be initialized by this seed.
var rand=func(seed=nil){
return __builtin_rand(seed);
}
# id will return the pointer of an gc-object.
# if this object is not managed by gc, it will return 0.
var id=func(object){
return __builtin_id(object);
}
# int will get the integer of input number.
# but carefully use it, because int has range between -2147483648~2147483647
var int=func(val){
return __builtin_int(val);
}
# num will change all the other types into number.
# mostly used to change a numerable string.
var num=func(val){
return __builtin_num(val);
}
# pop used to pop the last element in a vector.
# this function will return the value that poped if vector has element(s).
# if the vector is empty, it will return nil.
var pop=func(vec){
return __builtin_pop(vec);
}
# str is used to change number into string.
var str=func(num){
return __builtin_str(num);
}
# size can get the size of a string/vector/hashmap.
# in fact it can also get the size of number, and the result is the number itself.
# so don't do useless things, though it really works.
var size=func(object){
return __builtin_size(object);
}
# contains is used to check if a key exists in a hashmap/dict.
var contains=func(hash,key){
return __builtin_contains(hash,key);
}
# delete is used to delete a pair in a hashmap/dict by key.
var delete=func(hash,key){
return __builtin_delete(hash,key);
}
# keys is used to get all keys in a hashmap/dict.
# this function will return a vector.
var keys=func(hash){
return __builtin_keys(hash);
}
# time has the same function in C.
var time=func(begin){
return __builtin_time(begin);
}
# die is a special native function.
# use it at where you want the program to crash immediately.
var die=func(str){
return __builtin_die(str);
}
# typeof is used to get the type of an object.
# this function returns a string.
var typeof=func(object){
return __builtin_type(object);
}
# substr will get the sub-string.
# it gets the string, the begin index and sub-string's length as arguments.
var substr=func(str,begin,len){
return __builtin_substr(str,begin,len);
}
# streq is used to compare if two strings are the same.
var streq=func(a,b){
return __builtin_streq(a,b);
}
# left is used to get the sub-string like substr.
# but the begin index is 0.
var left=func(str,len){
return __builtin_left(str,len);
}
# right i used to get the sub-string like substr.
# but the begin index is strlen-len.
var right=func(str,len){
return __builtin_right(str,len);
}
# cmp is used to compare two strings.
# normal string will not be correctly compared by operators < > <= >=
# because these operators will turn strings into numbers then compare.
var cmp=func(a,b){
return __builtin_cmp(a,b);
}
# chr is used to get the character by ascii-number.
# for example chr(65) -> 'A'
var chr=func(code){
return __builtin_chr(code);
}
# println has the same function as print.
# but it will output a '\n' after using print.
var println=func(elems...){ var println=func(elems...){
__builtin_print(elems); __builtin_print(elems);
elems=['\n']; elems=['\n'];

View File

@ -567,7 +567,7 @@ nasal_ref builtin_import(std::vector<nasal_ref>& local,nasal_gc& gc)
{ {
// this function is used in preprocessing. // this function is used in preprocessing.
// this function will return nothing when running. // this function will return nothing when running.
return builtin_err("import","must use this function in global scope"); return builtin_err("import","this function is used to link files together");
} }
nasal_ref builtin_die(std::vector<nasal_ref>& local,nasal_gc& gc) nasal_ref builtin_die(std::vector<nasal_ref>& local,nasal_gc& gc)
{ {