🚀 optimize stl/stack.nas, test/calc.nas & io.fin now returns empty string when cannot open file

This commit is contained in:
ValKmjolnir 2022-08-07 00:35:55 +08:00
parent 2937c10c77
commit 7ddb8593ad
3 changed files with 13 additions and 17 deletions

View File

@ -91,14 +91,11 @@ nas_ref builtin_fin(nas_ref* local,nasal_gc& gc)
nas_ref val=local[1]; nas_ref val=local[1];
if(val.type!=vm_str) if(val.type!=vm_str)
return nas_err("io.fin","\"filename\" must be string"); return nas_err("io.fin","\"filename\" must be string");
std::ifstream fin(val.str()); std::ifstream fin(val.str(),std::ios::binary);
std::stringstream rd;
if(!fin.fail()) if(!fin.fail())
{
std::stringstream rd;
rd<<fin.rdbuf(); rd<<fin.rdbuf();
return gc.newstr(rd.str()); return gc.newstr(rd.str());
}
return nas_err("io.fin","cannot open <"+val.str()+">");
} }
nas_ref builtin_fout(nas_ref* local,nasal_gc& gc) nas_ref builtin_fout(nas_ref* local,nasal_gc& gc)
{ {

View File

@ -1,24 +1,23 @@
# stack.nas # stack.nas
# valkmjolnir 2021/3/31 # valkmjolnir 2021/3/31
var stack=func(){ var stack=func(){
var next=nil; var vec=[];
return{ return{
push:func(elem){ push:func(elem){
next={elem:elem,next:next}; append(vec,elem);
}, },
pop:func(){ pop:func(){
if(next!=nil) return pop(vec);
next=next.next;
}, },
top:func(){ top:func(){
if(next!=nil) if(size(vec)!=0)
return next.elem; return vec[-1];
}, },
clear:func(){ clear:func(){
next=nil; vec=[];
}, },
empty:func(){ empty:func(){
return next==nil; return size(vec)==0;
} }
}; };
} }

View File

@ -89,9 +89,9 @@ var getname=func(s){
} }
var count=func(s,c){ var count=func(s,c){
var (cnt,len,ch)=(0,size(s),c[0]); var cnt=0;
for(var i=0;i<len;i+=1) foreach(var i;split(c,s))
cnt+=(s[i]==ch); cnt+=(size(i)!=0 and i!="\r")
return cnt; return cnt;
} }