📝 delete unnecessary code & change test file.

This commit is contained in:
ValKmjolnir 2022-07-31 19:26:13 +08:00
parent 068743aa4c
commit 04a45064c8
6 changed files with 216 additions and 256 deletions

View File

@ -122,8 +122,7 @@ const char* ast_name[]=
"multi-assign", "multi-assign",
"continue", "continue",
"break", "break",
"return", "return"
nullptr
}; };
class nasal_ast class nasal_ast

View File

@ -774,17 +774,15 @@ nas_ref builtin_read(nas_ref* local,nasal_gc& gc)
nas_ref len=local[3]; nas_ref len=local[3];
if(!fd.objchk(nas_obj::file)) if(!fd.objchk(nas_obj::file))
return builtin_err("read","not a valid filehandle"); return builtin_err("read","not a valid filehandle");
if(buf.type!=vm_str) if(buf.type!=vm_str || buf.val.gcobj->unmut)
return builtin_err("read","\"buf\" must be string"); return builtin_err("read","\"buf\" must be mutable string");
if(buf.val.gcobj->unmut)
return builtin_err("read","\"buf\" is not a mutable string");
if(len.type!=vm_num) if(len.type!=vm_num)
return builtin_err("read","\"len\" must be number"); return builtin_err("read","\"len\" must be number");
if(len.num()<=0 || len.num()>=(1<<30)) if(len.num()<=0 || len.num()>=(1<<30))
return builtin_err("read","\"len\" less than 1 or too large"); return builtin_err("read","\"len\" less than 1 or too large");
char* buff=new char[(usize)len.num()+1]; char* buff=new char[(usize)len.num()+1];
if(!buff) 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); f64 res=fread(buff,1,len.num(),(FILE*)fd.obj().ptr);
buf.str()=buff; buf.str()=buff;
delete []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"); return builtin_err("dlopen","\"libname\" must be string");
#ifdef _WIN32 #ifdef _WIN32
wchar_t* str=new wchar_t[dlname.str().size()+1]; 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); memset(str,0,sizeof(wchar_t)*dlname.str().size()+1);
mbstowcs(str,dlname.str().c_str(),dlname.str().size()+1); mbstowcs(str,dlname.str().c_str(),dlname.str().size()+1);
void* ptr=LoadLibraryW(str); void* ptr=LoadLibraryW(str);
@ -1201,17 +1201,17 @@ string tohex(u32 num)
} }
return str; return str;
} }
string md5(const string& source) string md5(const string& src)
{ {
std::vector<u32> buff; std::vector<u32> buff;
u32 num=((source.length()+8)>>6)+1; usize num=((src.length()+8)>>6)+1;
u32 buffsize=num<<4; usize buffsize=num<<4;
buff.resize(buffsize,0); buff.resize(buffsize,0);
for(u32 i=0;i<source.length();i++) for(usize i=0;i<src.length();i++)
buff[i>>2]|=((unsigned char)source[i])<<((i&0x3)<<3); buff[i>>2]|=((u8)src[i])<<((i&0x3)<<3);
buff[source.length()>>2]|=0x80<<(((source.length()%4))<<3); buff[src.length()>>2]|=0x80<<(((src.length()%4))<<3);
buff[buffsize-2]=(source.length()<<3)&0xffffffff; buff[buffsize-2]=(src.length()<<3)&0xffffffff;
buff[buffsize-1]=((source.length()<<3)>>32)&0xffffffff; buff[buffsize-1]=((src.length()<<3)>>32)&0xffffffff;
// u32(abs(sin(i+1))*(2pow32)) // u32(abs(sin(i+1))*(2pow32))
const u32 k[]={ const u32 k[]={

View File

@ -80,87 +80,83 @@ enum op_code:u8
op_ret // return op_ret // return
}; };
struct const char* code_table[]=
{ {
u8 type; "exit ",
const char* name; "intg ",
}code_table[]= "intl ",
{ "loadg ",
{op_exit, "exit "}, "loadl ",
{op_intg, "intg "}, "loadu ",
{op_intl, "intl "}, "pnum ",
{op_loadg, "loadg "}, "pnil ",
{op_loadl, "loadl "}, "pstr ",
{op_loadu, "loadu "}, "newv ",
{op_pnum, "pnum "}, "newh ",
{op_pnil, "pnil "}, "newf ",
{op_pstr, "pstr "}, "happ ",
{op_newv, "newv "}, "para ",
{op_newh, "newh "}, "def ",
{op_newf, "newf "}, "dyn ",
{op_happ, "happ "}, "not ",
{op_para, "para "}, "usub ",
{op_deft, "def "}, "add ",
{op_dyn, "dyn "}, "sub ",
{op_unot, "not "}, "mult ",
{op_usub, "usub "}, "div ",
{op_add, "add "}, "lnk ",
{op_sub, "sub "}, "addc ",
{op_mul, "mult "}, "subc ",
{op_div, "div "}, "multc ",
{op_lnk, "lnk "}, "divc ",
{op_addc, "addc "}, "lnkc ",
{op_subc, "subc "}, "addeq ",
{op_mulc, "multc "}, "subeq ",
{op_divc, "divc "}, "muleq ",
{op_lnkc, "lnkc "}, "diveq ",
{op_addeq, "addeq "}, "lnkeq ",
{op_subeq, "subeq "}, "addeqc",
{op_muleq, "muleq "}, "subeqc",
{op_diveq, "diveq "}, "muleqc",
{op_lnkeq, "lnkeq "}, "diveqc",
{op_addeqc,"addeqc"}, "lnkeqc",
{op_subeqc,"subeqc"}, "meq ",
{op_muleqc,"muleqc"}, "eq ",
{op_diveqc,"diveqc"}, "neq ",
{op_lnkeqc,"lnkeqc"}, "less ",
{op_meq, "meq "}, "leq ",
{op_eq, "eq "}, "grt ",
{op_neq, "neq "}, "geq ",
{op_less, "less "}, "lessc ",
{op_leq, "leq "}, "leqc ",
{op_grt, "grt "}, "grtc ",
{op_geq, "geq "}, "geqc ",
{op_lessc, "lessc "}, "pop ",
{op_leqc, "leqc "}, "jmp ",
{op_grtc, "grtc "}, "jt ",
{op_geqc, "geqc "}, "jf ",
{op_pop, "pop "}, "cnt ",
{op_jmp, "jmp "}, "findx ",
{op_jt, "jt "}, "feach ",
{op_jf, "jf "}, "callg ",
{op_cnt, "cnt "}, "calll ",
{op_findex,"findx "}, "upval ",
{op_feach, "feach "}, "callv ",
{op_callg, "callg "}, "callvi",
{op_calll, "calll "}, "callh ",
{op_upval, "upval "}, "callfv",
{op_callv, "callv "}, "callfh",
{op_callvi,"callvi"}, "callb ",
{op_callh, "callh "}, "slcbeg",
{op_callfv,"callfv"}, "slcend",
{op_callfh,"callfh"}, "slc ",
{op_callb, "callb "}, "slc2 ",
{op_slcbeg,"slcbeg"}, "mcallg",
{op_slcend,"slcend"}, "mcalll",
{op_slc, "slc "}, "mupval",
{op_slc2, "slc2 "}, "mcallv",
{op_mcallg,"mcallg"}, "mcallh",
{op_mcalll,"mcalll"}, "ret "
{op_mupval,"mupval"},
{op_mcallv,"mcallv"},
{op_mcallh,"mcallh"},
{op_ret, "ret "}
}; };
struct opcode struct opcode
@ -198,7 +194,7 @@ void opcode::print(const char* header,
<<std::setw(2)<<std::setfill('0')<<((num>>16)&0xff)<<" " <<std::setw(2)<<std::setfill('0')<<((num>>16)&0xff)<<" "
<<std::setw(2)<<std::setfill('0')<<((num>>8)&0xff)<<" " <<std::setw(2)<<std::setfill('0')<<((num>>8)&0xff)<<" "
<<std::setw(2)<<std::setfill('0')<<(num&0xff) <<std::setw(2)<<std::setfill('0')<<(num&0xff)
<<" "<<code_table[op].name<<" "<<std::dec; <<" "<<code_table[op]<<" "<<std::dec;
switch(op) switch(op)
{ {
case op_addeq: case op_subeq: case op_muleq: case op_diveq: case op_addeq: case op_subeq: case op_muleq: case op_diveq:

View File

@ -104,7 +104,7 @@ void nasal_dbg::opcallsort(const u64* arr)
std::clog<<"\n ..."; std::clog<<"\n ...";
break; break;
} }
std::clog<<"\n "<<code_table[i.first].name std::clog<<"\n "<<code_table[i.first]
<<" : "<<i.second<<" ("<<rate<<"%)"; <<" : "<<i.second<<" ("<<rate<<"%)";
} }
std::clog<<"\n total : "<<total<<'\n'; std::clog<<"\n total : "<<total<<'\n';

View File

@ -1,85 +1,85 @@
var source=[ var source=[
"main.cpp ", "main.cpp ",
"nasal_ast.h ", "nasal_ast.h ",
"nasal_builtin.h ", "nasal_builtin.h ",
"nasal_codegen.h ", "nasal_codegen.h ",
"nasal_dbg.h ", "nasal_dbg.h ",
"nasal_err.h ", "nasal_err.h ",
"nasal_gc.h ", "nasal_gc.h ",
"nasal_import.h ", "nasal_import.h ",
"nasal_lexer.h ", "nasal_lexer.h ",
"nasal_opt.h ", "nasal_opt.h ",
"nasal_parse.h ", "nasal_parse.h ",
"nasal_vm.h ", "nasal_vm.h ",
"nasal.h " "nasal.h "
]; ];
var lib=[ var lib=[
"stl/fg_env.nas ", "fg_env.nas ",
"stl/file.nas ", "file.nas ",
"stl/lib.nas ", "lib.nas ",
"stl/list.nas ", "list.nas ",
"stl/log.nas ", "log.nas ",
"stl/module.nas ", "module.nas ",
"stl/process_bar.nas ", "process_bar.nas ",
"stl/queue.nas ", "queue.nas ",
"stl/result.nas ", "result.nas ",
"stl/sort.nas ", "sort.nas ",
"stl/stack.nas " "stack.nas "
]; ];
var testfile=[ var testfile=[
"test/ascii-art.nas ", "ascii-art.nas ",
"test/auto_crash.nas ", "auto_crash.nas ",
"test/bf.nas ", "bf.nas ",
"test/bfcolored.nas ", "bfcolored.nas ",
"test/bfconvertor.nas ", "bfconvertor.nas ",
"test/bfs.nas ", "bfs.nas ",
"test/bigloop.nas ", "bigloop.nas ",
"test/bp.nas ", "bp.nas ",
"test/calc.nas ", "calc.nas ",
"test/choice.nas ", "choice.nas ",
"test/class.nas ", "class.nas ",
"test/coroutine.nas ", "coroutine.nas ",
"test/diff.nas ", "diff.nas ",
"test/exception.nas ", "exception.nas ",
"test/fib.nas ", "fib.nas ",
"test/filesystem.nas ", "filesystem.nas ",
"test/hexdump.nas ", "hexdump.nas ",
"test/httptest.nas ", "httptest.nas ",
"test/json.nas ", "json.nas ",
"test/leetcode1319.nas ", "leetcode1319.nas ",
"test/lexer.nas ", "lexer.nas ",
"test/life.nas ", "life.nas ",
"test/loop.nas ", "loop.nas ",
"test/mandel.nas ", "mandel.nas ",
"test/mandelbrot.nas ", "mandelbrot.nas ",
"test/md5.nas ", "md5.nas ",
"test/md5compare.nas ", "md5compare.nas ",
"test/module_test.nas ", "module_test.nas ",
"test/nasal_test.nas ", "nasal_test.nas ",
"test/occupation.nas ", "occupation.nas ",
"test/pi.nas ", "pi.nas ",
"test/prime.nas ", "prime.nas ",
"test/qrcode.nas ", "qrcode.nas ",
"test/quick_sort.nas ", "quick_sort.nas ",
"test/scalar.nas ", "scalar.nas ",
"test/snake.nas ", "snake.nas ",
"test/tetris.nas ", "tetris.nas ",
"test/trait.nas ", "trait.nas ",
"test/turingmachine.nas", "turingmachine.nas",
"test/utf8chk.nas ", "utf8chk.nas ",
"test/wavecollapse.nas ", "wavecollapse.nas ",
"test/ycombinator.nas " "ycombinator.nas "
]; ];
var module=[ var module=[
"module/fib.cpp ", "fib.cpp ",
"module/keyboard.cpp ", "keyboard.cpp ",
"module/nasocket.cpp ", "nasocket.cpp ",
"module/libfib.nas ", "libfib.nas ",
"module/libkey.nas ", "libkey.nas ",
"module/libsock.nas " "libsock.nas "
]; ];
var getname=func(s){ var getname=func(s){
@ -95,22 +95,21 @@ var count=func(s,c){
return cnt; return cnt;
} }
var calc=func(codetype,files){ var calc=func(codetype,files,path=""){
println(codetype); println(codetype);
var (bytes,line,semi,line_cnt,semi_cnt)=(0,0,0,0,0); var (bytes,line,semi,line_cnt,semi_cnt)=(0,0,0,0,0);
forindex(var i;files){ forindex(var i;files){
var s=io.fin(getname(files[i])); var s=io.fin(getname(path~files[i]));
(line_cnt,semi_cnt)=(count(s,'\n'),count(s,';')); (line_cnt,semi_cnt)=(count(s,'\n'),count(s,';'));
println(files[i],'| ',line_cnt,' \tline | ',semi_cnt,' \tsemi'); println(files[i],'| ',line_cnt,'\tline | ',semi_cnt,' \tsemi');
bytes+=size(s); bytes+=size(s);
line+=line_cnt; line+=line_cnt;
semi+=semi_cnt; semi+=semi_cnt;
} }
println('total: | ',line,' \tline | ',semi,' \tsemi'); println('total: | ',line,'\tline | ',semi,' \tsemi');
println(' | ',bytes,'\tbytes| ',int(bytes/1024),' \tkb'); println(' | ',int(bytes/1024),'\tkb');
return int(bytes/1024);
} }
calc("source code:",source); var all=calc("source code:",source)+calc("lib:",lib,"stl/")+calc("test file:",testfile,"test/")+calc("module:",module,"module/");
calc("lib:",lib); println('\ntotal: | ',all,'\tkb');
calc("test file:",testfile);
calc("module:",module);

View File

@ -9,112 +9,78 @@ var compare=func(){
"^","&","*","(",")","-","=","\\","|","[","]","{","}","`"," ","\t","?" "^","&","*","(",")","-","=","\\","|","[","]","{","}","`"," ","\t","?"
]; ];
return func(begin,end){ return func(begin,end){
var byte=0;
var total=end-begin; var total=end-begin;
var timestamp=maketimestamp();
timestamp.stamp();
var bar=process_bar.bar(front:os.platform()=="windows"?"sharp":"block",back:"point",sep:"line",length:50); var bar=process_bar.bar(front:os.platform()=="windows"?"sharp":"block",back:"point",sep:"line",length:50);
for(var i=begin;i<end;i+=1){ for(var i=begin;i<end;i+=1){
var s=""; var s="";
for(var j=0;j<i;j+=1){ for(var j=0;j<i;j+=1){
s~=ch[rand()*size(ch)]; s~=ch[rand()*size(ch)];
} }
byte+=size(s);
var res=md5(s); var res=md5(s);
if(cmp(res,_md5(s))){ if(cmp(res,_md5(s))){
die("error: "~str(i)); die("error: "~str(i));
} }
print(" ",bar.bar((i-begin+1)/total)," (",i-begin+1,"/",total,")\t",res," max byte: ",end-1," \r"); print(" ",bar.bar((i-begin+1)/total)," (",i-begin+1,"/",total,")\t",res," byte: ",byte," elapsed time: ",timestamp.elapsedMSec()," \r");
} }
print("\n"); print("\n");
}; };
}(); }();
var filechecksum=func(){ var filechecksum=func(){
var getname=func(s){
var (len,ch)=(size(s),' '[0]);
for(var i=0;i<len and s[i]!=ch;i+=1);
return substr(s,0,i);
}
var files=[ var files=[
"./stl/fg_env.nas ", "./stl/fg_env.nas", "./stl/file.nas",
"./stl/file.nas ", "./stl/lib.nas", "./stl/list.nas",
"./stl/lib.nas ", "./stl/log.nas", "./stl/module.nas",
"./stl/list.nas ", "./stl/process_bar.nas", "./stl/queue.nas",
"./stl/log.nas ", "./stl/result.nas", "./stl/sort.nas",
"./stl/module.nas ", "./stl/stack.nas", "./test/ascii-art.nas",
"./stl/process_bar.nas ", "./test/auto_crash.nas", "./test/bf.nas",
"./stl/queue.nas ", "./test/bfcolored.nas", "./test/bfconvertor.nas",
"./stl/result.nas ", "./test/bfs.nas", "./test/bigloop.nas",
"./stl/sort.nas ", "./test/bp.nas", "./test/calc.nas",
"./stl/stack.nas ", "./test/choice.nas", "./test/class.nas",
"./test/ascii-art.nas ", "./test/coroutine.nas", "./test/diff.nas",
"./test/auto_crash.nas ", "./test/exception.nas", "./test/fib.nas",
"./test/bf.nas ", "./test/filesystem.nas", "./test/hexdump.nas",
"./test/bfcolored.nas ", "./test/httptest.nas", "./test/json.nas",
"./test/bfconvertor.nas ", "./test/leetcode1319.nas", "./test/lexer.nas",
"./test/bfs.nas ", "./test/life.nas", "./test/loop.nas",
"./test/bigloop.nas ", "./test/mandel.nas", "./test/mandelbrot.nas",
"./test/bp.nas ", "./test/md5.nas", "./test/md5compare.nas",
"./test/calc.nas ", "./test/module_test.nas", "./test/nasal_test.nas",
"./test/choice.nas ", "./test/occupation.nas", "./test/pi.nas",
"./test/class.nas ", "./test/prime.nas", "./test/qrcode.nas",
"./test/coroutine.nas ", "./test/quick_sort.nas", "./test/scalar.nas",
"./test/diff.nas ", "./test/snake.nas", "./test/tetris.nas",
"./test/exception.nas ", "./test/trait.nas", "./test/turingmachine.nas",
"./test/fib.nas ", "./test/utf8chk.nas", "./test/wavecollapse.nas",
"./test/filesystem.nas ", "./test/ycombinator.nas", "LICENSE",
"./test/hexdump.nas ", "main.cpp", "makefile",
"./test/httptest.nas ", "nasal_ast.h", "nasal_builtin.h",
"./test/json.nas ", "nasal_codegen.h", "nasal_dbg.h",
"./test/leetcode1319.nas ", "nasal_err.h", "nasal_gc.h",
"./test/lexer.nas ", "nasal_import.h", "nasal_lexer.h",
"./test/life.nas ", "nasal_opt.h", "nasal_parse.h",
"./test/loop.nas ", "nasal_vm.h", "nasal.ebnf",
"./test/mandel.nas ", "nasal.h", "README.md"
"./test/mandelbrot.nas ",
"./test/md5.nas ",
"./test/md5compare.nas ",
"./test/module_test.nas ",
"./test/nasal_test.nas ",
"./test/occupation.nas ",
"./test/pi.nas ",
"./test/prime.nas ",
"./test/qrcode.nas ",
"./test/quick_sort.nas ",
"./test/scalar.nas ",
"./test/snake.nas ",
"./test/tetris.nas ",
"./test/trait.nas ",
"./test/turingmachine.nas",
"./test/utf8chk.nas ",
"./test/wavecollapse.nas ",
"./test/ycombinator.nas ",
"LICENSE ",
"main.cpp ",
"makefile ",
"nasal_ast.h ",
"nasal_builtin.h ",
"nasal_codegen.h ",
"nasal_dbg.h ",
"nasal_err.h ",
"nasal_gc.h ",
"nasal_import.h ",
"nasal_lexer.h ",
"nasal_opt.h ",
"nasal_parse.h ",
"nasal_vm.h ",
"nasal.ebnf ",
"nasal.h ",
"README.md "
]; ];
var byte=0; var byte=0;
var total=size(files); var total=size(files);
var timestamp=maketimestamp();
timestamp.stamp();
var bar=process_bar.bar(front:os.platform()=="windows"?"sharp":"block",back:"point",sep:"line",length:50); var bar=process_bar.bar(front:os.platform()=="windows"?"sharp":"block",back:"point",sep:"line",length:50);
forindex(var i;files){ forindex(var i;files){
var f=io.fin(getname(files[i])); var f=io.fin(files[i]);
var res=md5(f); var res=md5(f);
byte+=size(f); byte+=size(f);
if(cmp(res,_md5(f))){ if(cmp(res,_md5(f))){
die("error: "~files[i]); die("error: "~files[i]);
} }
print(" ",bar.bar((i+1)/total)," (",i+1,"/",total,")\t",res," byte: ",byte," \r"); print(" ",bar.bar((i+1)/total)," (",i+1,"/",total,")\t",res," byte: ",byte," elapsed time: ",timestamp.elapsedMSec()," \r");
} }
print("\n"); print("\n");
} }