forked from xxq250/Nasal-Interpreter
⚡ optimize test files
httptest.nas: when clicking mandel.nas link, this may cause memory overflow in new gc
This commit is contained in:
+34
-32
@@ -155,9 +155,10 @@ var color=[
|
||||
"\e[31m","\e[32m","\e[33m","\e[34m","\e[35m","\e[36m",
|
||||
"\e[90m","\e[91m","\e[92m","\e[93m","\e[94m","\e[95m","\e[96m"
|
||||
];
|
||||
func(){
|
||||
|
||||
func() {
|
||||
var cnt=0;
|
||||
forindex(var i;char){
|
||||
forindex(var i;char) {
|
||||
char[i]=color[cnt]~chr(i)~"\e[0m";
|
||||
cnt+=1;
|
||||
if(cnt>12)
|
||||
@@ -166,80 +167,81 @@ func(){
|
||||
}();
|
||||
|
||||
var funcs=[
|
||||
func{paper[ptr]+=inum[pc];},
|
||||
func{ptr+=inum[pc];},
|
||||
func{if(paper[ptr])pc=inum[pc];},
|
||||
func{if(!paper[ptr])pc=inum[pc];},
|
||||
func{paper[ptr]=input()[0];},
|
||||
func{print(char[paper[ptr]]);}
|
||||
func {paper[ptr]+=inum[pc];},
|
||||
func {ptr+=inum[pc];},
|
||||
func {if(paper[ptr])pc=inum[pc];},
|
||||
func {if(!paper[ptr])pc=inum[pc];},
|
||||
func {paper[ptr]=input()[0];},
|
||||
func {print(char[paper[ptr]]);}
|
||||
];
|
||||
|
||||
var bf=func(program){
|
||||
var bf=func(program) {
|
||||
setsize(paper,131072);
|
||||
var len=size(program);
|
||||
for(var i=0;i<len;i+=1){
|
||||
for(var i=0;i<len;i+=1) {
|
||||
var c=chr(program[i]);
|
||||
if(c=='+' or c=='-'){
|
||||
if(c=='+' or c=='-') {
|
||||
append(code,add);
|
||||
append(inum,0);
|
||||
for(;i<len;i+=1){
|
||||
if(chr(program[i])=='+')
|
||||
for(;i<len;i+=1) {
|
||||
if(chr(program[i])=='+') {
|
||||
inum[-1]+=1;
|
||||
elsif(chr(program[i])=='-')
|
||||
} elsif(chr(program[i])=='-') {
|
||||
inum[-1]-=1;
|
||||
elsif(chr(program[i])!='\n'){
|
||||
} elsif(chr(program[i])!='\n') {
|
||||
i-=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif(c=='<' or c=='>'){
|
||||
} elsif(c=='<' or c=='>') {
|
||||
append(code,mov);
|
||||
append(inum,0);
|
||||
for(;i<len;i+=1){
|
||||
if(chr(program[i])=='>')
|
||||
if(chr(program[i])=='>') {
|
||||
inum[-1]+=1;
|
||||
elsif(chr(program[i])=='<')
|
||||
} elsif(chr(program[i])=='<') {
|
||||
inum[-1]-=1;
|
||||
elsif(chr(program[i])!='\n'){
|
||||
} elsif(chr(program[i])!='\n') {
|
||||
i-=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif(c==','){
|
||||
} elsif(c==',') {
|
||||
append(code,in);
|
||||
append(inum,0);
|
||||
}
|
||||
elsif(c=='.'){
|
||||
} elsif(c=='.') {
|
||||
append(code,out);
|
||||
append(inum,0);
|
||||
}
|
||||
elsif(c=='['){
|
||||
} elsif(c=='[') {
|
||||
append(code,jf);
|
||||
append(inum,0);
|
||||
append(stack,size(code)-1);
|
||||
}
|
||||
elsif(c==']'){
|
||||
if(!size(stack))
|
||||
} elsif(c==']') {
|
||||
if(!size(stack)) {
|
||||
die("lack [");
|
||||
}
|
||||
var label=pop(stack);
|
||||
append(code,jt);
|
||||
append(inum,label-1);
|
||||
inum[label]=size(code)-2;
|
||||
}
|
||||
}
|
||||
if(size(stack)){
|
||||
|
||||
if(size(stack)) {
|
||||
die("lack ]");
|
||||
return;
|
||||
}
|
||||
|
||||
# enable ANSI escape sequence
|
||||
if(os.platform()=="windows")
|
||||
if(os.platform()=="windows") {
|
||||
system("color");
|
||||
}
|
||||
|
||||
# execute
|
||||
len=size(code);
|
||||
for(pc=0;pc<len;pc+=1)
|
||||
for(pc=0;pc<len;pc+=1) {
|
||||
funcs[code[pc]]();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user