📝 optimize codes

This commit is contained in:
ValKmjolnir 2022-08-01 22:51:19 +08:00
parent 04a45064c8
commit 44bfd74ca9
3 changed files with 28 additions and 92 deletions

View File

@ -76,7 +76,7 @@ const char* ast_name[]=
"func",
"hash",
"vec",
"hashmember",
"pair",
"call",
"callh",
"callv",

View File

@ -827,7 +827,6 @@ nas_ref builtin_readln(nas_ref* local,nasal_gc& gc)
if(!fd.objchk(nas_obj::file))
return builtin_err("readln","not a valid filehandle");
nas_ref str=gc.alloc(vm_str);
auto& s=str.str();
char c;
while((c=fgetc((FILE*)fd.obj().ptr))!=EOF)
{
@ -835,9 +834,9 @@ nas_ref builtin_readln(nas_ref* local,nasal_gc& gc)
continue;
if(c=='\n')
return str;
s+=c;
str.str()+=c;
}
if(s.length())
if(str.str().length())
return str;
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)
return builtin_err("waitpid","pid and nohang must be number");
#ifndef _WIN32
i32 ret_pid;
i32 status;
i32 ret_pid,status;
ret_pid=waitpid(pid.num(),&status,nohang.num()==0?0:WNOHANG);
nas_ref vec=gc.alloc(vm_vec);
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)
{
char** env=environ;
nas_ref res=gc.temp=gc.alloc(vm_vec);
auto& vec=res.vec().elems;
while(*env)
{
for(char** env=environ;*env;++env)
vec.push_back(gc.newstr(*env));
++env;
}
gc.temp=nil;
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 funcptr=local[1];
nas_ref fp=local[1];
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");
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);
}
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)
{
if(gc.cort)
return one;
return zero;
return gc.cort?one:zero;
}
nas_ref builtin_millisec(nas_ref* local,nasal_gc& gc)
{

View File

@ -82,81 +82,25 @@ enum op_code:u8
const char* code_table[]=
{
"exit ",
"intg ",
"intl ",
"loadg ",
"loadl ",
"loadu ",
"pnum ",
"pnil ",
"pstr ",
"newv ",
"newh ",
"newf ",
"happ ",
"para ",
"def ",
"dyn ",
"not ",
"usub ",
"add ",
"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 "
"exit ","intg ","intl ","loadg ",
"loadl ","loadu ","pnum ","pnil ",
"pstr ","newv ","newh ","newf ",
"happ ","para ","def ","dyn ",
"not ","usub ","add ","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