diff --git a/nasal_ast.h b/nasal_ast.h index ddaeaf5..00c42d4 100644 --- a/nasal_ast.h +++ b/nasal_ast.h @@ -76,7 +76,7 @@ const char* ast_name[]= "func", "hash", "vec", - "hashmember", + "pair", "call", "callh", "callv", diff --git a/nasal_builtin.h b/nasal_builtin.h index 05a8061..72f4150 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -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&,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) { diff --git a/nasal_codegen.h b/nasal_codegen.h index c4fe46f..4f146b6 100644 --- a/nasal_codegen.h +++ b/nasal_codegen.h @@ -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