🚀 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];
if(val.type!=vm_str)
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())
{
std::stringstream rd;
rd<<fin.rdbuf();
return gc.newstr(rd.str());
}
return nas_err("io.fin","cannot open <"+val.str()+">");
return gc.newstr(rd.str());
}
nas_ref builtin_fout(nas_ref* local,nasal_gc& gc)
{

View File

@ -1,24 +1,23 @@
# stack.nas
# valkmjolnir 2021/3/31
var stack=func(){
var next=nil;
var vec=[];
return{
push:func(elem){
next={elem:elem,next:next};
append(vec,elem);
},
pop:func(){
if(next!=nil)
next=next.next;
return pop(vec);
},
top:func(){
if(next!=nil)
return next.elem;
if(size(vec)!=0)
return vec[-1];
},
clear:func(){
next=nil;
vec=[];
},
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 (cnt,len,ch)=(0,size(s),c[0]);
for(var i=0;i<len;i+=1)
cnt+=(s[i]==ch);
var cnt=0;
foreach(var i;split(c,s))
cnt+=(size(i)!=0 and i!="\r")
return cnt;
}