🐛 fix `builtin_err` in module to `nas_err`
This commit is contained in:
parent
e51878266a
commit
feea8f8d66
|
@ -522,7 +522,7 @@ nas_ref builtin_print(nas_ref* local,nasal_gc& gc)
|
|||
nas_ref vec=local[1];
|
||||
// main process
|
||||
// also check number of arguments and type here
|
||||
// if get an error,use builtin_err
|
||||
// if get an error,use nas_err
|
||||
for(auto& i:vec.vec().elems)
|
||||
switch(i.type)
|
||||
{
|
||||
|
@ -596,7 +596,7 @@ nas_ref builtin_keys(nas_ref* local,nasal_gc& gc)
|
|||
{
|
||||
nas_ref hash=local[1];
|
||||
if(hash.type!=vm_hash)
|
||||
return builtin_err("keys","\"hash\" must be hash");
|
||||
return nas_err("keys","\"hash\" must be hash");
|
||||
// avoid being sweeped
|
||||
nas_ref res=gc.temp=gc.alloc(vm_vec);
|
||||
auto& vec=res.vec().elems;
|
||||
|
@ -648,10 +648,10 @@ extern "C" nas_ref fib(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
// get values from the vector that must be used here
|
||||
nas_ref num=args[0];
|
||||
// if you want your function safer, try this
|
||||
// builtin_err will print the error info on screen
|
||||
// nas_err will print the error info on screen
|
||||
// and return vm_null for runtime to interrupt
|
||||
if(num.type!=vm_num)
|
||||
return builtin_err("extern_fib","\"num\" must be number");
|
||||
return nas_err("extern_fib","\"num\" must be number");
|
||||
// ok, you must know that vm_num now is not managed by gc
|
||||
// if want to return a gc object, use gc.alloc(type)
|
||||
// usage of gc is the same as adding a native function
|
||||
|
|
|
@ -563,7 +563,7 @@ nas_ref builtin_keys(nas_ref* local,nasal_gc& gc)
|
|||
{
|
||||
nas_ref hash=local[1];
|
||||
if(hash.type!=vm_hash)
|
||||
return builtin_err("keys","\"hash\" must be hash");
|
||||
return nas_err("keys","\"hash\" must be hash");
|
||||
// 使用gc.temp来存储gc管理的变量,防止错误的回收
|
||||
nas_ref res=gc.temp=gc.alloc(vm_vec);
|
||||
auto& vec=res.vec().elems;
|
||||
|
@ -612,7 +612,7 @@ extern "C" nas_ref fib(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
// 如果你想让这个函数有更强的稳定性,那么一定要进行合法性检查
|
||||
// builtin_err会输出错误信息并返回错误类型让虚拟机终止执行
|
||||
if(num.type!=vm_num)
|
||||
return builtin_err("extern_fib","\"num\" must be number");
|
||||
return nas_err("extern_fib","\"num\" must be number");
|
||||
// vm_num作为普通的数字类型,不是内存管理的对象,所以无需申请
|
||||
// 如果需要返回内存管理的对象,请使用gc.alloc(type)
|
||||
return {vm_num,fibonaci(num.tonum())};
|
||||
|
|
|
@ -9,19 +9,19 @@ double fibonaci(double x){
|
|||
extern "C" nas_ref fib(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
std::cout<<"[mod] this is the first test module of nasal\n";
|
||||
if(!args.size())
|
||||
return builtin_err("fib","lack arguments");
|
||||
return nas_err("fib","lack arguments");
|
||||
nas_ref num=args[0];
|
||||
if(num.type!=vm_num)
|
||||
return builtin_err("extern_fib","\"num\" must be number");
|
||||
return nas_err("extern_fib","\"num\" must be number");
|
||||
return {vm_num,fibonaci(num.tonum())};
|
||||
}
|
||||
extern "C" nas_ref quick_fib(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
std::cout<<"[mod] this is the first test module of nasal\n";
|
||||
if(!args.size())
|
||||
return builtin_err("fib","lack arguments");
|
||||
return nas_err("fib","lack arguments");
|
||||
nas_ref num=args[0];
|
||||
if(num.type!=vm_num)
|
||||
return builtin_err("extern_quick_fib","\"num\" must be number");
|
||||
return nas_err("extern_quick_fib","\"num\" must be number");
|
||||
if(num.num()<2)
|
||||
return num;
|
||||
double a=1,b=1,res=0;
|
||||
|
|
|
@ -26,14 +26,14 @@ static WSAmanager win;
|
|||
|
||||
extern "C" nas_ref nas_socket(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num || args[1].type!=vm_num || args[2].type!=vm_num)
|
||||
return builtin_err("socket","\"af\", \"type\", \"protocol\" should be number");
|
||||
return nas_err("socket","\"af\", \"type\", \"protocol\" should be number");
|
||||
int sd=socket(args[0].num(),args[1].num(),args[2].num());
|
||||
return {vm_num,(double)sd};
|
||||
}
|
||||
|
||||
extern "C" nas_ref nas_closesocket(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("closesocket","\"\" should be number");
|
||||
return nas_err("closesocket","\"\" should be number");
|
||||
#ifdef _WIN32
|
||||
return {vm_num,(double)closesocket(args[0].num())};
|
||||
#else
|
||||
|
@ -43,19 +43,19 @@ extern "C" nas_ref nas_closesocket(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_shutdown(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("shutdown","\"sd\" must be a number");
|
||||
return nas_err("shutdown","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_num)
|
||||
return builtin_err("shutdown","\"how\" must be a number");
|
||||
return nas_err("shutdown","\"how\" must be a number");
|
||||
return {vm_num,(double)shutdown(args[0].num(),args[1].num())};
|
||||
}
|
||||
|
||||
extern "C" nas_ref nas_bind(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("bind","\"sd\" muse be a number");
|
||||
return nas_err("bind","\"sd\" muse be a number");
|
||||
if(args[1].type!=vm_str)
|
||||
return builtin_err("bind","\"ip\" should be a string including an ip with correct format");
|
||||
return nas_err("bind","\"ip\" should be a string including an ip with correct format");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("bind","\"port\" must be a number");
|
||||
return nas_err("bind","\"port\" must be a number");
|
||||
sockaddr_in server;
|
||||
memset(&server,0,sizeof(sockaddr_in));
|
||||
server.sin_family=AF_INET;
|
||||
|
@ -66,19 +66,19 @@ extern "C" nas_ref nas_bind(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_listen(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("listen","\"sd\" must be a number");
|
||||
return nas_err("listen","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_num)
|
||||
return builtin_err("listen","\"backlog\" must be a number");
|
||||
return nas_err("listen","\"backlog\" must be a number");
|
||||
return{vm_num,(double)listen(args[0].num(),args[1].num())};
|
||||
}
|
||||
|
||||
extern "C" nas_ref nas_connect(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("connect","\"sd\" must be a number");
|
||||
return nas_err("connect","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_str)
|
||||
return builtin_err("connect","\"hostname\" must be a string");
|
||||
return nas_err("connect","\"hostname\" must be a string");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("connect","\"port\" must be a number");
|
||||
return nas_err("connect","\"port\" must be a number");
|
||||
sockaddr_in addr;
|
||||
memset(&addr,0,sizeof(sockaddr_in));
|
||||
addr.sin_family=AF_INET;
|
||||
|
@ -90,7 +90,7 @@ extern "C" nas_ref nas_connect(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_accept(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("accept","\"sd\" must be a number");
|
||||
return nas_err("accept","\"sd\" must be a number");
|
||||
sockaddr_in client;
|
||||
int socklen=sizeof(sockaddr_in);
|
||||
#ifdef _WIN32
|
||||
|
@ -108,25 +108,25 @@ extern "C" nas_ref nas_accept(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_send(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("send","\"sd\" must be a number");
|
||||
return nas_err("send","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_str)
|
||||
return builtin_err("send","\"buff\" must be a string");
|
||||
return nas_err("send","\"buff\" must be a string");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("send","\"flags\" muse be a number");
|
||||
return nas_err("send","\"flags\" muse be a number");
|
||||
return {vm_num,(double)send(args[0].num(),args[1].str().c_str(),args[1].str().length(),args[2].num())};
|
||||
}
|
||||
|
||||
extern "C" nas_ref nas_sendto(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("sendto","\"sd\" must be a number");
|
||||
return nas_err("sendto","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_str)
|
||||
return builtin_err("sendto","\"hostname\" must be a string");
|
||||
return nas_err("sendto","\"hostname\" must be a string");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("sendto","\"port\" must be a number");
|
||||
return nas_err("sendto","\"port\" must be a number");
|
||||
if(args[3].type!=vm_str)
|
||||
return builtin_err("sendto","\"buff\" must be a string");
|
||||
return nas_err("sendto","\"buff\" must be a string");
|
||||
if(args[4].type!=vm_num)
|
||||
return builtin_err("sendto","\"flags\" must be a number");
|
||||
return nas_err("sendto","\"flags\" must be a number");
|
||||
sockaddr_in addr;
|
||||
memset(&addr,0,sizeof(sockaddr_in));
|
||||
addr.sin_family=AF_INET;
|
||||
|
@ -138,13 +138,13 @@ extern "C" nas_ref nas_sendto(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_recv(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("recv","\"sd\" must be a number");
|
||||
return nas_err("recv","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_num)
|
||||
return builtin_err("recv","\"len\" must be a number");
|
||||
return nas_err("recv","\"len\" must be a number");
|
||||
if(args[1].num()<=0 || args[1].num()>16*1024*1024)
|
||||
return builtin_err("recv","\"len\" out of range");
|
||||
return nas_err("recv","\"len\" out of range");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("recv","\"flags\" muse be a number");
|
||||
return nas_err("recv","\"flags\" muse be a number");
|
||||
nas_ref res=gc.temp=gc.alloc(vm_hash);
|
||||
auto& hash=res.hash().elems;
|
||||
char* buf=new char[(int)args[1].num()];
|
||||
|
@ -157,13 +157,13 @@ extern "C" nas_ref nas_recv(std::vector<nas_ref>& args,nasal_gc& gc){
|
|||
|
||||
extern "C" nas_ref nas_recvfrom(std::vector<nas_ref>& args,nasal_gc& gc){
|
||||
if(args[0].type!=vm_num)
|
||||
return builtin_err("recvfrom","\"sd\" must be a number");
|
||||
return nas_err("recvfrom","\"sd\" must be a number");
|
||||
if(args[1].type!=vm_num)
|
||||
return builtin_err("recvfrom","\"len\" must be a number");
|
||||
return nas_err("recvfrom","\"len\" must be a number");
|
||||
if(args[1].num()<=0 || args[1].num()>16*1024*1024)
|
||||
return builtin_err("recvfrom","\"len\" out of range");
|
||||
return nas_err("recvfrom","\"len\" out of range");
|
||||
if(args[2].type!=vm_num)
|
||||
return builtin_err("recvfrom","\"flags\" muse be a number");
|
||||
return nas_err("recvfrom","\"flags\" muse be a number");
|
||||
sockaddr_in addr;
|
||||
int socklen=sizeof(sockaddr_in);
|
||||
nas_ref res=gc.temp=gc.alloc(vm_hash);
|
||||
|
|
Loading…
Reference in New Issue