📝 optimize codes
This commit is contained in:
parent
04a45064c8
commit
44bfd74ca9
|
@ -76,7 +76,7 @@ const char* ast_name[]=
|
||||||
"func",
|
"func",
|
||||||
"hash",
|
"hash",
|
||||||
"vec",
|
"vec",
|
||||||
"hashmember",
|
"pair",
|
||||||
"call",
|
"call",
|
||||||
"callh",
|
"callh",
|
||||||
"callv",
|
"callv",
|
||||||
|
|
|
@ -827,7 +827,6 @@ nas_ref builtin_readln(nas_ref* local,nasal_gc& gc)
|
||||||
if(!fd.objchk(nas_obj::file))
|
if(!fd.objchk(nas_obj::file))
|
||||||
return builtin_err("readln","not a valid filehandle");
|
return builtin_err("readln","not a valid filehandle");
|
||||||
nas_ref str=gc.alloc(vm_str);
|
nas_ref str=gc.alloc(vm_str);
|
||||||
auto& s=str.str();
|
|
||||||
char c;
|
char c;
|
||||||
while((c=fgetc((FILE*)fd.obj().ptr))!=EOF)
|
while((c=fgetc((FILE*)fd.obj().ptr))!=EOF)
|
||||||
{
|
{
|
||||||
|
@ -835,9 +834,9 @@ nas_ref builtin_readln(nas_ref* local,nasal_gc& gc)
|
||||||
continue;
|
continue;
|
||||||
if(c=='\n')
|
if(c=='\n')
|
||||||
return str;
|
return str;
|
||||||
s+=c;
|
str.str()+=c;
|
||||||
}
|
}
|
||||||
if(s.length())
|
if(str.str().length())
|
||||||
return str;
|
return str;
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
@ -998,8 +997,7 @@ nas_ref builtin_waitpid(nas_ref* local,nasal_gc& gc)
|
||||||
if(pid.type!=vm_num || nohang.type!=vm_num)
|
if(pid.type!=vm_num || nohang.type!=vm_num)
|
||||||
return builtin_err("waitpid","pid and nohang must be number");
|
return builtin_err("waitpid","pid and nohang must be number");
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
i32 ret_pid;
|
i32 ret_pid,status;
|
||||||
i32 status;
|
|
||||||
ret_pid=waitpid(pid.num(),&status,nohang.num()==0?0:WNOHANG);
|
ret_pid=waitpid(pid.num(),&status,nohang.num()==0?0:WNOHANG);
|
||||||
nas_ref vec=gc.alloc(vm_vec);
|
nas_ref vec=gc.alloc(vm_vec);
|
||||||
vec.vec().elems.push_back({vm_num,(f64)ret_pid});
|
vec.vec().elems.push_back({vm_num,(f64)ret_pid});
|
||||||
|
@ -1075,14 +1073,10 @@ nas_ref builtin_chdir(nas_ref* local,nasal_gc& gc)
|
||||||
}
|
}
|
||||||
nas_ref builtin_environ(nas_ref* local,nasal_gc& gc)
|
nas_ref builtin_environ(nas_ref* local,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
char** env=environ;
|
|
||||||
nas_ref res=gc.temp=gc.alloc(vm_vec);
|
nas_ref res=gc.temp=gc.alloc(vm_vec);
|
||||||
auto& vec=res.vec().elems;
|
auto& vec=res.vec().elems;
|
||||||
while(*env)
|
for(char** env=environ;*env;++env)
|
||||||
{
|
|
||||||
vec.push_back(gc.newstr(*env));
|
vec.push_back(gc.newstr(*env));
|
||||||
++env;
|
|
||||||
}
|
|
||||||
gc.temp=nil;
|
gc.temp=nil;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -1167,12 +1161,12 @@ nas_ref builtin_dlclose(nas_ref* local,nasal_gc& gc)
|
||||||
}
|
}
|
||||||
nas_ref builtin_dlcall(nas_ref* local,nasal_gc& gc)
|
nas_ref builtin_dlcall(nas_ref* local,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
nas_ref funcptr=local[1];
|
nas_ref fp=local[1];
|
||||||
nas_ref args=local[2];
|
nas_ref args=local[2];
|
||||||
if(!funcptr.objchk(nas_obj::faddr))
|
if(!fp.objchk(nas_obj::faddr))
|
||||||
return builtin_err("dlcall","\"funcptr\" is not a valid function pointer");
|
return builtin_err("dlcall","\"funcptr\" is not a valid function pointer");
|
||||||
typedef nas_ref (*externs)(std::vector<nas_ref>&,nasal_gc&);
|
typedef nas_ref (*externs)(std::vector<nas_ref>&,nasal_gc&);
|
||||||
externs func=(externs)funcptr.obj().ptr;
|
externs func=(externs)fp.obj().ptr;
|
||||||
return func(args.vec().elems,gc);
|
return func(args.vec().elems,gc);
|
||||||
}
|
}
|
||||||
nas_ref builtin_platform(nas_ref* local,nasal_gc& gc)
|
nas_ref builtin_platform(nas_ref* local,nasal_gc& gc)
|
||||||
|
@ -1353,9 +1347,7 @@ nas_ref builtin_costatus(nas_ref* local,nasal_gc& gc)
|
||||||
}
|
}
|
||||||
nas_ref builtin_corun(nas_ref* local,nasal_gc& gc)
|
nas_ref builtin_corun(nas_ref* local,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
if(gc.cort)
|
return gc.cort?one:zero;
|
||||||
return one;
|
|
||||||
return zero;
|
|
||||||
}
|
}
|
||||||
nas_ref builtin_millisec(nas_ref* local,nasal_gc& gc)
|
nas_ref builtin_millisec(nas_ref* local,nasal_gc& gc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,81 +82,25 @@ enum op_code:u8
|
||||||
|
|
||||||
const char* code_table[]=
|
const char* code_table[]=
|
||||||
{
|
{
|
||||||
"exit ",
|
"exit ","intg ","intl ","loadg ",
|
||||||
"intg ",
|
"loadl ","loadu ","pnum ","pnil ",
|
||||||
"intl ",
|
"pstr ","newv ","newh ","newf ",
|
||||||
"loadg ",
|
"happ ","para ","def ","dyn ",
|
||||||
"loadl ",
|
"not ","usub ","add ","sub ",
|
||||||
"loadu ",
|
"mult ","div ","lnk ","addc ",
|
||||||
"pnum ",
|
"subc ","multc ","divc ","lnkc ",
|
||||||
"pnil ",
|
"addeq ","subeq ","muleq ","diveq ",
|
||||||
"pstr ",
|
"lnkeq ","addeqc","subeqc","muleqc",
|
||||||
"newv ",
|
"diveqc","lnkeqc","meq ","eq ",
|
||||||
"newh ",
|
"neq ","less ","leq ","grt ",
|
||||||
"newf ",
|
"geq ","lessc ","leqc ","grtc ",
|
||||||
"happ ",
|
"geqc ","pop ","jmp ","jt ",
|
||||||
"para ",
|
"jf ","cnt ","findx ","feach ",
|
||||||
"def ",
|
"callg ","calll ","upval ","callv ",
|
||||||
"dyn ",
|
"callvi","callh ","callfv","callfh",
|
||||||
"not ",
|
"callb ","slcbeg","slcend","slc ",
|
||||||
"usub ",
|
"slc2 ","mcallg","mcalll","mupval",
|
||||||
"add ",
|
"mcallv","mcallh","ret "
|
||||||
"sub ",
|
|
||||||
"mult ",
|
|
||||||
"div ",
|
|
||||||
"lnk ",
|
|
||||||
"addc ",
|
|
||||||
"subc ",
|
|
||||||
"multc ",
|
|
||||||
"divc ",
|
|
||||||
"lnkc ",
|
|
||||||
"addeq ",
|
|
||||||
"subeq ",
|
|
||||||
"muleq ",
|
|
||||||
"diveq ",
|
|
||||||
"lnkeq ",
|
|
||||||
"addeqc",
|
|
||||||
"subeqc",
|
|
||||||
"muleqc",
|
|
||||||
"diveqc",
|
|
||||||
"lnkeqc",
|
|
||||||
"meq ",
|
|
||||||
"eq ",
|
|
||||||
"neq ",
|
|
||||||
"less ",
|
|
||||||
"leq ",
|
|
||||||
"grt ",
|
|
||||||
"geq ",
|
|
||||||
"lessc ",
|
|
||||||
"leqc ",
|
|
||||||
"grtc ",
|
|
||||||
"geqc ",
|
|
||||||
"pop ",
|
|
||||||
"jmp ",
|
|
||||||
"jt ",
|
|
||||||
"jf ",
|
|
||||||
"cnt ",
|
|
||||||
"findx ",
|
|
||||||
"feach ",
|
|
||||||
"callg ",
|
|
||||||
"calll ",
|
|
||||||
"upval ",
|
|
||||||
"callv ",
|
|
||||||
"callvi",
|
|
||||||
"callh ",
|
|
||||||
"callfv",
|
|
||||||
"callfh",
|
|
||||||
"callb ",
|
|
||||||
"slcbeg",
|
|
||||||
"slcend",
|
|
||||||
"slc ",
|
|
||||||
"slc2 ",
|
|
||||||
"mcallg",
|
|
||||||
"mcalll",
|
|
||||||
"mupval",
|
|
||||||
"mcallv",
|
|
||||||
"mcallh",
|
|
||||||
"ret "
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct opcode
|
struct opcode
|
||||||
|
|
Loading…
Reference in New Issue