add unix.isdir and unix.isfile
This commit is contained in:
parent
6a35c58df4
commit
52b49edbcf
2
lib.nas
2
lib.nas
|
@ -100,6 +100,8 @@ var unix=
|
||||||
dup2: func(fd0,fd1){die("not supported yet");},
|
dup2: func(fd0,fd1){die("not supported yet");},
|
||||||
exec: func(filename,argv,envp){die("not supported yet");},
|
exec: func(filename,argv,envp){die("not supported yet");},
|
||||||
waitpid: func(pid,nohang=0){die("not supported yet");},
|
waitpid: func(pid,nohang=0){die("not supported yet");},
|
||||||
|
isdir: func(path){return bits.bitand(io.stat(path)[2],0x4000);}, # S_IFDIR 0x4000
|
||||||
|
isfile: func(path){return bits.bitand(io.stat(path)[2],0x8000);}, # S_IFREG 0x8000
|
||||||
opendir: func(path){return __builtin_opendir;},
|
opendir: func(path){return __builtin_opendir;},
|
||||||
readdir: func(handle){return __builtin_readdir;},
|
readdir: func(handle){return __builtin_readdir;},
|
||||||
closedir: func(handle){return __builtin_closedir;},
|
closedir: func(handle){return __builtin_closedir;},
|
||||||
|
|
|
@ -1231,7 +1231,7 @@ void nasal_codegen::print_op(uint32_t index)
|
||||||
case op_addeqc:case op_subeqc: case op_muleqc:case op_diveqc:
|
case op_addeqc:case op_subeqc: case op_muleqc:case op_diveqc:
|
||||||
case op_lessc: case op_leqc: case op_grtc: case op_geqc:
|
case op_lessc: case op_leqc: case op_grtc: case op_geqc:
|
||||||
case op_pnum:
|
case op_pnum:
|
||||||
printf("0x%x (%lf)\n",c.num,num_res[c.num]);break;
|
printf("0x%x (",c.num);std::cout<<num_res[c.num]<<")\n";break;
|
||||||
case op_callvi:case op_newv: case op_callfv:
|
case op_callvi:case op_newv: case op_callfv:
|
||||||
case op_intg: case op_intl:
|
case op_intg: case op_intl:
|
||||||
case op_newf: case op_jmp: case op_jt: case op_jf:
|
case op_newf: case op_jmp: case op_jt: case op_jf:
|
||||||
|
|
|
@ -307,7 +307,7 @@ inline nasal_hash* nasal_ref::hash(){return value.gcobj->ptr.hash;}
|
||||||
inline nasal_func* nasal_ref::func(){return value.gcobj->ptr.func;}
|
inline nasal_func* nasal_ref::func(){return value.gcobj->ptr.func;}
|
||||||
inline nasal_obj* nasal_ref::obj (){return value.gcobj->ptr.obj; }
|
inline nasal_obj* nasal_ref::obj (){return value.gcobj->ptr.obj; }
|
||||||
|
|
||||||
constexpr uint32_t STACK_MAX_DEPTH=2047;
|
constexpr uint32_t STACK_MAX_DEPTH=4095;
|
||||||
struct nasal_gc
|
struct nasal_gc
|
||||||
{
|
{
|
||||||
nasal_ref zero;
|
nasal_ref zero;
|
||||||
|
|
|
@ -188,7 +188,7 @@ void nasal_vm::traceback()
|
||||||
if(same)
|
if(same)
|
||||||
printf("\t0x%.8x: %d same call(s) ...\n",last,same);
|
printf("\t0x%.8x: %d same call(s) ...\n",last,same);
|
||||||
}
|
}
|
||||||
void nasal_vm::stackinfo(const uint32_t limit=10)
|
void nasal_vm::stackinfo(const uint32_t limit=20)
|
||||||
{
|
{
|
||||||
printf("vm stack(limit %d):\n",limit);
|
printf("vm stack(limit %d):\n",limit);
|
||||||
uint32_t same=0,global_size=bytecode[0].num;
|
uint32_t same=0,global_size=bytecode[0].num;
|
||||||
|
@ -327,7 +327,7 @@ inline void nasal_vm::opr_pzero()
|
||||||
}
|
}
|
||||||
inline void nasal_vm::opr_pnil()
|
inline void nasal_vm::opr_pnil()
|
||||||
{
|
{
|
||||||
(++gc.top)[0].type=vm_nil;
|
(++gc.top)[0]={vm_nil,(double)0};
|
||||||
}
|
}
|
||||||
inline void nasal_vm::opr_pstr()
|
inline void nasal_vm::opr_pstr()
|
||||||
{
|
{
|
||||||
|
@ -394,7 +394,7 @@ inline void nasal_vm::opr_unot()
|
||||||
{
|
{
|
||||||
double num=str2num(val.str()->c_str());
|
double num=str2num(val.str()->c_str());
|
||||||
if(std::isnan(num))
|
if(std::isnan(num))
|
||||||
gc.top[0]=val.str()->empty()?gc.one:gc.zero;
|
gc.top[0]={vm_num,(double)val.str()->empty()};
|
||||||
else
|
else
|
||||||
gc.top[0]=num?gc.zero:gc.one;
|
gc.top[0]=num?gc.zero:gc.one;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,8 @@ var unix=
|
||||||
dup2: func(fd0,fd1){die("not supported yet");},
|
dup2: func(fd0,fd1){die("not supported yet");},
|
||||||
exec: func(filename,argv,envp){die("not supported yet");},
|
exec: func(filename,argv,envp){die("not supported yet");},
|
||||||
waitpid: func(pid,nohang=0){die("not supported yet");},
|
waitpid: func(pid,nohang=0){die("not supported yet");},
|
||||||
|
isdir: func(path){return bits.bitand(io.stat(path)[2],0x4000);}, # S_IFDIR 0x4000
|
||||||
|
isfile: func(path){return bits.bitand(io.stat(path)[2],0x8000);}, # S_IFREG 0x8000
|
||||||
opendir: func(path){return __builtin_opendir;},
|
opendir: func(path){return __builtin_opendir;},
|
||||||
readdir: func(handle){return __builtin_readdir;},
|
readdir: func(handle){return __builtin_readdir;},
|
||||||
closedir: func(handle){return __builtin_closedir;},
|
closedir: func(handle){return __builtin_closedir;},
|
||||||
|
|
|
@ -7,6 +7,30 @@ io.close(fd);
|
||||||
println(io.stat("test/filesystem.nas"));
|
println(io.stat("test/filesystem.nas"));
|
||||||
|
|
||||||
var dd=unix.opendir("test");
|
var dd=unix.opendir("test");
|
||||||
while((var name=unix.readdir(dd))!=nil)
|
while(var name=unix.readdir(dd))
|
||||||
println(name);
|
println(name);
|
||||||
unix.closedir(dd);
|
unix.closedir(dd);
|
||||||
|
|
||||||
|
var files=func(dir){
|
||||||
|
var dd=unix.opendir(dir);
|
||||||
|
var res=[];
|
||||||
|
while(var n=unix.readdir(dd))
|
||||||
|
append(res,n);
|
||||||
|
unix.closedir(dd);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
var prt=func(s,path){
|
||||||
|
foreach(var i;files(path)){
|
||||||
|
print(s,i);
|
||||||
|
if(unix.isdir(path~'/'~i)){
|
||||||
|
print(' <dir>\n');
|
||||||
|
if(i!='.' and i!='..')
|
||||||
|
prt(s~' |',path~'/'~i);
|
||||||
|
}
|
||||||
|
elsif(unix.isfile(path~'/'~i))
|
||||||
|
print(" <file>\n");
|
||||||
|
else
|
||||||
|
print(' <unknown>\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prt('',".");
|
Loading…
Reference in New Issue