🐛 fix codegen for binary not on some ast nodes
This commit is contained in:
parent
368b057a91
commit
068184f451
158
makefile
158
makefile
|
@ -1,80 +1,80 @@
|
||||||
.PHONY:test clean
|
.PHONY:test clean
|
||||||
|
|
||||||
SRC=\
|
SRC=\
|
||||||
main.cpp\
|
main.cpp\
|
||||||
nasal_ast.h\
|
nasal_ast.h\
|
||||||
nasal_err.h\
|
nasal_err.h\
|
||||||
nasal_builtin.h\
|
nasal_builtin.h\
|
||||||
nasal_opt.h\
|
nasal_opt.h\
|
||||||
nasal_codegen.h\
|
nasal_codegen.h\
|
||||||
nasal_gc.h\
|
nasal_gc.h\
|
||||||
nasal_import.h\
|
nasal_import.h\
|
||||||
nasal_lexer.h\
|
nasal_lexer.h\
|
||||||
nasal_parse.h\
|
nasal_parse.h\
|
||||||
nasal_vm.h\
|
nasal_vm.h\
|
||||||
nasal_dbg.h\
|
nasal_dbg.h\
|
||||||
nasal.h
|
nasal.h
|
||||||
|
|
||||||
STD=c++14
|
STD=c++14
|
||||||
|
|
||||||
nasal:$(SRC)
|
nasal:$(SRC)
|
||||||
$(CXX) -std=$(STD) -O3 main.cpp -o nasal -fno-exceptions -ldl -Wshadow -Wall
|
$(CXX) -std=$(STD) -O3 main.cpp -o nasal -fno-exceptions -ldl -Wshadow -Wall
|
||||||
nasal.exe:$(SRC)
|
nasal.exe:$(SRC)
|
||||||
$(CXX) -std=$(STD) -O3 main.cpp -o nasal.exe -fno-exceptions -Wshadow -Wall -static
|
$(CXX) -std=$(STD) -O3 main.cpp -o nasal.exe -fno-exceptions -Wshadow -Wall -static
|
||||||
|
|
||||||
stable-release:$(SRC)
|
stable-release:$(SRC)
|
||||||
$(CXX) -std=$(STD) -O2 main.cpp -o nasal -fno-exceptions -ldl -Wshadow -Wall
|
$(CXX) -std=$(STD) -O2 main.cpp -o nasal -fno-exceptions -ldl -Wshadow -Wall
|
||||||
stable-release-mingw:$(SRC)
|
stable-release-mingw:$(SRC)
|
||||||
$(CXX) -std=$(STD) -O2 main.cpp -o nasal.exe -fno-exceptions -Wshadow -Wall -static
|
$(CXX) -std=$(STD) -O2 main.cpp -o nasal.exe -fno-exceptions -Wshadow -Wall -static
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@ echo "[clean] nasal" && if [ -e nasal ]; then rm nasal; fi
|
@ echo "[clean] nasal" && if [ -e nasal ]; then rm nasal; fi
|
||||||
@ echo "[clean] nasal.exe" && if [ -e nasal.exe ]; then rm nasal.exe; fi
|
@ echo "[clean] nasal.exe" && if [ -e nasal.exe ]; then rm nasal.exe; fi
|
||||||
|
|
||||||
test:nasal
|
test:nasal
|
||||||
@ ./nasal -e test/ascii-art.nas
|
@ ./nasal -e test/ascii-art.nas
|
||||||
@ ./nasal -c test/auto_crash.nas
|
@ ./nasal -c test/auto_crash.nas
|
||||||
@ ./nasal -a -c test/bf.nas
|
@ ./nasal -a -c test/bf.nas
|
||||||
@ ./nasal -a -c test/bfconvertor.nas
|
@ ./nasal -a -c test/bfconvertor.nas
|
||||||
@ ./nasal -d test/bfs.nas
|
@ ./nasal -d test/bfs.nas
|
||||||
@ ./nasal -t test/bigloop.nas
|
@ ./nasal -t test/bigloop.nas
|
||||||
@ ./nasal -t test/bp.nas
|
@ ./nasal -t test/bp.nas
|
||||||
@ ./nasal -d test/calc.nas
|
@ ./nasal -d test/calc.nas
|
||||||
@ ./nasal -e test/choice.nas
|
@ ./nasal -e test/choice.nas
|
||||||
@ ./nasal -e test/class.nas
|
@ ./nasal -e test/class.nas
|
||||||
@ ./nasal -t -d test/console3D.nas 25
|
@ ./nasal -t -d test/console3D.nas 25
|
||||||
@ ./nasal -e test/coroutine.nas
|
@ ./nasal -e test/coroutine.nas
|
||||||
@ ./nasal -t -d test/datalog.nas
|
@ ./nasal -t -d test/datalog.nas
|
||||||
@ ./nasal -e test/diff.nas
|
@ ./nasal -e test/diff.nas
|
||||||
@ ./nasal -e test/donuts.nas 100
|
@ ./nasal -e test/donuts.nas 50
|
||||||
-@ ./nasal -d test/exception.nas
|
-@ ./nasal -d test/exception.nas
|
||||||
@ ./nasal -t -d test/fib.nas
|
@ ./nasal -t -d test/fib.nas
|
||||||
@ ./nasal -e test/filesystem.nas
|
@ ./nasal -e test/filesystem.nas
|
||||||
@ ./nasal -d test/hexdump.nas
|
@ ./nasal -d test/hexdump.nas
|
||||||
@ ./nasal -c test/httptest.nas
|
@ ./nasal -c test/httptest.nas
|
||||||
@ ./nasal -e test/json.nas
|
@ ./nasal -e test/json.nas
|
||||||
@ ./nasal -e test/leetcode1319.nas
|
@ ./nasal -e test/leetcode1319.nas
|
||||||
@ ./nasal -d test/lexer.nas
|
@ ./nasal -d test/lexer.nas
|
||||||
@ ./nasal -d test/life.nas
|
@ ./nasal -d test/life.nas
|
||||||
@ ./nasal -t test/loop.nas
|
@ ./nasal -t test/loop.nas
|
||||||
@ ./nasal -t -d test/mandel.nas
|
@ ./nasal -t -d test/mandel.nas
|
||||||
@ ./nasal -t test/mandelbrot.nas
|
@ ./nasal -t test/mandelbrot.nas
|
||||||
@ ./nasal -t test/md5.nas
|
@ ./nasal -t test/md5.nas
|
||||||
@ ./nasal -t -d test/md5compare.nas
|
@ ./nasal -t -d test/md5compare.nas
|
||||||
-@ ./nasal -d test/module_test.nas
|
-@ ./nasal -d test/module_test.nas
|
||||||
@ ./nasal -e test/nasal_test.nas
|
@ ./nasal -e test/nasal_test.nas
|
||||||
@ ./nasal test/occupation.nas 5
|
@ ./nasal test/occupation.nas 5
|
||||||
@ ./nasal -t -d test/pi.nas
|
@ ./nasal -t -d test/pi.nas
|
||||||
@ ./nasal -c test/ppmgen.nas
|
@ ./nasal -c test/ppmgen.nas
|
||||||
@ ./nasal -t -d test/prime.nas
|
@ ./nasal -t -d test/prime.nas
|
||||||
@ ./nasal -c test/push.nas
|
@ ./nasal -c test/push.nas
|
||||||
@ ./nasal -e test/qrcode.nas
|
@ ./nasal -e test/qrcode.nas
|
||||||
@ ./nasal -t -d test/quick_sort.nas
|
@ ./nasal -t -d test/quick_sort.nas
|
||||||
@ ./nasal -e test/scalar.nas hello world
|
@ ./nasal -e test/scalar.nas hello world
|
||||||
-@ ./nasal -t test/snake.nas --skip
|
-@ ./nasal -t test/snake.nas --skip
|
||||||
@ ./nasal -e test/trait.nas
|
@ ./nasal -e test/trait.nas
|
||||||
-@ ./nasal -t test/tetris.nas --skip
|
-@ ./nasal -t test/tetris.nas --skip
|
||||||
@ ./nasal -t -d test/turingmachine.nas
|
@ ./nasal -t -d test/turingmachine.nas
|
||||||
@ ./nasal -d test/wavecollapse.nas
|
@ ./nasal -d test/wavecollapse.nas
|
||||||
@ ./nasal test/word_collector.nas test/md5compare.nas
|
@ ./nasal test/word_collector.nas test/md5compare.nas
|
||||||
@ ./nasal -t -d test/ycombinator.nas
|
@ ./nasal -t -d test/ycombinator.nas
|
|
@ -47,8 +47,8 @@ enum ast_node:u32 {
|
||||||
ast_div, // /
|
ast_div, // /
|
||||||
ast_link, // ~
|
ast_link, // ~
|
||||||
ast_neg, // unary -
|
ast_neg, // unary -
|
||||||
ast_not, // unary !
|
ast_lnot, // unary !
|
||||||
ast_negate, // unary ~
|
ast_bnot, // unary ~
|
||||||
ast_trino, // ?:
|
ast_trino, // ?:
|
||||||
ast_for, // for keyword
|
ast_for, // for keyword
|
||||||
ast_forindex, // forindex keyword
|
ast_forindex, // forindex keyword
|
||||||
|
|
|
@ -810,7 +810,7 @@ void codegen::for_gen(const ast& node) {
|
||||||
case ast_nil:case ast_num:case ast_str:case ast_bool:break;
|
case ast_nil:case ast_num:case ast_str:case ast_bool:break;
|
||||||
case ast_vec:case ast_hash:case ast_func:
|
case ast_vec:case ast_hash:case ast_func:
|
||||||
case ast_call:
|
case ast_call:
|
||||||
case ast_neg:case ast_not:
|
case ast_neg:case ast_lnot:case ast_bnot:
|
||||||
case ast_add:case ast_sub:
|
case ast_add:case ast_sub:
|
||||||
case ast_mult:case ast_div:
|
case ast_mult:case ast_div:
|
||||||
case ast_link:
|
case ast_link:
|
||||||
|
@ -876,7 +876,7 @@ void codegen::for_gen(const ast& node) {
|
||||||
case ast_nil:case ast_num:case ast_str:case ast_bool:break;
|
case ast_nil:case ast_num:case ast_str:case ast_bool:break;
|
||||||
case ast_vec:case ast_hash:case ast_func:
|
case ast_vec:case ast_hash:case ast_func:
|
||||||
case ast_call:
|
case ast_call:
|
||||||
case ast_neg:case ast_not:
|
case ast_neg:case ast_lnot:case ast_bnot:
|
||||||
case ast_add:case ast_sub:case ast_mult:
|
case ast_add:case ast_sub:case ast_mult:
|
||||||
case ast_div:case ast_link:
|
case ast_div:case ast_link:
|
||||||
case ast_cmpeq:case ast_neq:case ast_leq:
|
case ast_cmpeq:case ast_neq:case ast_leq:
|
||||||
|
@ -1112,11 +1112,11 @@ void codegen::calc_gen(const ast& node) {
|
||||||
calc_gen(node[0]);
|
calc_gen(node[0]);
|
||||||
gen(op_usub,0,node.line());
|
gen(op_usub,0,node.line());
|
||||||
break;
|
break;
|
||||||
case ast_not:
|
case ast_lnot:
|
||||||
calc_gen(node[0]);
|
calc_gen(node[0]);
|
||||||
gen(op_lnot,0,node.line());
|
gen(op_lnot,0,node.line());
|
||||||
break;
|
break;
|
||||||
case ast_negate:
|
case ast_bnot:
|
||||||
calc_gen(node[0]);
|
calc_gen(node[0]);
|
||||||
gen(op_bnot,0,node.line());
|
gen(op_bnot,0,node.line());
|
||||||
break;
|
break;
|
||||||
|
@ -1189,7 +1189,8 @@ void codegen::block_gen(const ast& node) {
|
||||||
case ast_func:
|
case ast_func:
|
||||||
case ast_call:
|
case ast_call:
|
||||||
case ast_neg:
|
case ast_neg:
|
||||||
case ast_not:
|
case ast_lnot:
|
||||||
|
case ast_bnot:
|
||||||
case ast_add:
|
case ast_add:
|
||||||
case ast_sub:
|
case ast_sub:
|
||||||
case ast_mult:
|
case ast_mult:
|
||||||
|
|
|
@ -620,8 +620,8 @@ ast parse::unary() {
|
||||||
ast node(toks[ptr].tk_end_line,toks[ptr].tk_end_column,ast_null,toks[ptr].file);
|
ast node(toks[ptr].tk_end_line,toks[ptr].tk_end_column,ast_null,toks[ptr].file);
|
||||||
switch(toks[ptr].type) {
|
switch(toks[ptr].type) {
|
||||||
case tok::sub: node.set_type(ast_neg);match(tok::sub);break;
|
case tok::sub: node.set_type(ast_neg);match(tok::sub);break;
|
||||||
case tok::opnot: node.set_type(ast_not);match(tok::opnot);break;
|
case tok::opnot: node.set_type(ast_lnot);match(tok::opnot);break;
|
||||||
case tok::floater: node.set_type(ast_negate);match(tok::floater);break;
|
case tok::floater: node.set_type(ast_bnot);match(tok::floater);break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
node.add((lookahead(tok::sub) || lookahead(tok::opnot) || lookahead(tok::floater))?unary():scalar());
|
node.add((lookahead(tok::sub) || lookahead(tok::opnot) || lookahead(tok::floater))?unary():scalar());
|
||||||
|
|
|
@ -94,7 +94,7 @@ for(var t=0;t<10;t+=1){
|
||||||
coroutine.yield(i);
|
coroutine.yield(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var total=1000; # ms
|
|
||||||
var co=coroutine.create(productor);
|
var co=coroutine.create(productor);
|
||||||
var tm=maketimestamp();
|
var tm=maketimestamp();
|
||||||
|
|
||||||
|
@ -104,14 +104,14 @@ for(var t=0;t<10;t+=1){
|
||||||
counter+=1;
|
counter+=1;
|
||||||
for(var i=0;i<t+1;i+=1)
|
for(var i=0;i<t+1;i+=1)
|
||||||
coroutine.resume(co);
|
coroutine.resume(co);
|
||||||
if(counter-int(counter/1000)*1000==0){
|
if(counter-int(counter/5000)*5000==0){
|
||||||
var rate=counter/4e5;
|
var rate=counter/2e5;
|
||||||
print(" ",bar.bar(rate)," ",leftpad(str(int(rate*100)),3),"% | ",str(1e3*int(counter/tm.elapsedMSec()))," tasks/s \r");
|
print(" ",bar.bar(rate)," ",leftpad(str(int(rate*100)),3),"% | ",str(1e3*int(counter/tm.elapsedMSec()))," tasks/s \r");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tm.stamp();
|
tm.stamp();
|
||||||
for(var i=0;i<4e5;i+=1)
|
for(var i=0;i<2e5;i+=1)
|
||||||
consumer();
|
consumer();
|
||||||
println(" ",bar.bar(1)," 100% | ",str(int(1e3*counter/tm.elapsedMSec()))," tasks/s ");
|
println(" ",bar.bar(1)," 100% | ",str(int(1e3*counter/tm.elapsedMSec()))," tasks/s ");
|
||||||
}
|
}
|
Loading…
Reference in New Issue