diff --git a/nasal_ast.h b/nasal_ast.h index d9bcba9..ddaeaf5 100644 --- a/nasal_ast.h +++ b/nasal_ast.h @@ -122,8 +122,7 @@ const char* ast_name[]= "multi-assign", "continue", "break", - "return", - nullptr + "return" }; class nasal_ast diff --git a/nasal_builtin.h b/nasal_builtin.h index e0c5a55..05a8061 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -774,17 +774,15 @@ nas_ref builtin_read(nas_ref* local,nasal_gc& gc) nas_ref len=local[3]; if(!fd.objchk(nas_obj::file)) return builtin_err("read","not a valid filehandle"); - if(buf.type!=vm_str) - return builtin_err("read","\"buf\" must be string"); - if(buf.val.gcobj->unmut) - return builtin_err("read","\"buf\" is not a mutable string"); + if(buf.type!=vm_str || buf.val.gcobj->unmut) + return builtin_err("read","\"buf\" must be mutable string"); if(len.type!=vm_num) return builtin_err("read","\"len\" must be number"); if(len.num()<=0 || len.num()>=(1<<30)) return builtin_err("read","\"len\" less than 1 or too large"); char* buff=new char[(usize)len.num()+1]; if(!buff) - return builtin_err("read","memory allocation error"); + return builtin_err("read","malloc failed"); f64 res=fread(buff,1,len.num(),(FILE*)fd.obj().ptr); buf.str()=buff; delete []buff; @@ -1120,6 +1118,8 @@ nas_ref builtin_dlopen(nas_ref* local,nasal_gc& gc) return builtin_err("dlopen","\"libname\" must be string"); #ifdef _WIN32 wchar_t* str=new wchar_t[dlname.str().size()+1]; + if(!str) + return builtin_err("dlopen","malloc failed"); memset(str,0,sizeof(wchar_t)*dlname.str().size()+1); mbstowcs(str,dlname.str().c_str(),dlname.str().size()+1); void* ptr=LoadLibraryW(str); @@ -1201,17 +1201,17 @@ string tohex(u32 num) } return str; } -string md5(const string& source) +string md5(const string& src) { std::vector buff; - u32 num=((source.length()+8)>>6)+1; - u32 buffsize=num<<4; + usize num=((src.length()+8)>>6)+1; + usize buffsize=num<<4; buff.resize(buffsize,0); - for(u32 i=0;i>2]|=((unsigned char)source[i])<<((i&0x3)<<3); - buff[source.length()>>2]|=0x80<<(((source.length()%4))<<3); - buff[buffsize-2]=(source.length()<<3)&0xffffffff; - buff[buffsize-1]=((source.length()<<3)>>32)&0xffffffff; + for(usize i=0;i>2]|=((u8)src[i])<<((i&0x3)<<3); + buff[src.length()>>2]|=0x80<<(((src.length()%4))<<3); + buff[buffsize-2]=(src.length()<<3)&0xffffffff; + buff[buffsize-1]=((src.length()<<3)>>32)&0xffffffff; // u32(abs(sin(i+1))*(2pow32)) const u32 k[]={ diff --git a/nasal_codegen.h b/nasal_codegen.h index d10fea4..c4fe46f 100644 --- a/nasal_codegen.h +++ b/nasal_codegen.h @@ -80,87 +80,83 @@ enum op_code:u8 op_ret // return }; -struct +const char* code_table[]= { - u8 type; - const char* name; -}code_table[]= -{ - {op_exit, "exit "}, - {op_intg, "intg "}, - {op_intl, "intl "}, - {op_loadg, "loadg "}, - {op_loadl, "loadl "}, - {op_loadu, "loadu "}, - {op_pnum, "pnum "}, - {op_pnil, "pnil "}, - {op_pstr, "pstr "}, - {op_newv, "newv "}, - {op_newh, "newh "}, - {op_newf, "newf "}, - {op_happ, "happ "}, - {op_para, "para "}, - {op_deft, "def "}, - {op_dyn, "dyn "}, - {op_unot, "not "}, - {op_usub, "usub "}, - {op_add, "add "}, - {op_sub, "sub "}, - {op_mul, "mult "}, - {op_div, "div "}, - {op_lnk, "lnk "}, - {op_addc, "addc "}, - {op_subc, "subc "}, - {op_mulc, "multc "}, - {op_divc, "divc "}, - {op_lnkc, "lnkc "}, - {op_addeq, "addeq "}, - {op_subeq, "subeq "}, - {op_muleq, "muleq "}, - {op_diveq, "diveq "}, - {op_lnkeq, "lnkeq "}, - {op_addeqc,"addeqc"}, - {op_subeqc,"subeqc"}, - {op_muleqc,"muleqc"}, - {op_diveqc,"diveqc"}, - {op_lnkeqc,"lnkeqc"}, - {op_meq, "meq "}, - {op_eq, "eq "}, - {op_neq, "neq "}, - {op_less, "less "}, - {op_leq, "leq "}, - {op_grt, "grt "}, - {op_geq, "geq "}, - {op_lessc, "lessc "}, - {op_leqc, "leqc "}, - {op_grtc, "grtc "}, - {op_geqc, "geqc "}, - {op_pop, "pop "}, - {op_jmp, "jmp "}, - {op_jt, "jt "}, - {op_jf, "jf "}, - {op_cnt, "cnt "}, - {op_findex,"findx "}, - {op_feach, "feach "}, - {op_callg, "callg "}, - {op_calll, "calll "}, - {op_upval, "upval "}, - {op_callv, "callv "}, - {op_callvi,"callvi"}, - {op_callh, "callh "}, - {op_callfv,"callfv"}, - {op_callfh,"callfh"}, - {op_callb, "callb "}, - {op_slcbeg,"slcbeg"}, - {op_slcend,"slcend"}, - {op_slc, "slc "}, - {op_slc2, "slc2 "}, - {op_mcallg,"mcallg"}, - {op_mcalll,"mcalll"}, - {op_mupval,"mupval"}, - {op_mcallv,"mcallv"}, - {op_mcallh,"mcallh"}, - {op_ret, "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 @@ -198,7 +194,7 @@ void opcode::print(const char* header, <>16)&0xff)<<" " <>8)&0xff)<<" " <