add unix.fork&unix.pipe(do not work on windows platform)

This commit is contained in:
ValKmjolnir 2022-03-09 19:03:12 +08:00
parent 61666d275d
commit d8156e839b
4 changed files with 51 additions and 6 deletions

View File

@ -273,8 +273,8 @@ var math=
var unix=
{
pipe: func(){die("not supported yet");},
fork: func(){die("not supported yet");},
pipe: func(){return __builtin_pipe;},
fork: func(){return __builtin_fork;},
dup2: func(fd0,fd1){die("not supported yet");},
exec: func(filename,argv,envp){die("not supported yet");},
waitpid: func(pid,nohang=0){die("not supported yet");},

View File

@ -79,6 +79,8 @@ nas_native(builtin_sfld);
nas_native(builtin_setfld);
nas_native(builtin_buf);
nas_native(builtin_sleep);
nas_native(builtin_pipe);
nas_native(builtin_fork);
nas_native(builtin_opendir);
nas_native(builtin_readdir);
nas_native(builtin_closedir);
@ -163,6 +165,8 @@ struct
{"__builtin_setfld", builtin_setfld },
{"__builtin_buf", builtin_buf },
{"__builtin_sleep", builtin_sleep },
{"__builtin_pipe", builtin_pipe },
{"__builtin_fork", builtin_fork },
{"__builtin_opendir", builtin_opendir },
{"__builtin_readdir", builtin_readdir },
{"__builtin_closedir",builtin_closedir},
@ -955,6 +959,26 @@ nasal_ref builtin_sleep(nasal_ref* local,nasal_gc& gc)
usleep((useconds_t)(val.num()*1e6));
return nil;
}
nasal_ref builtin_pipe(nasal_ref* local,nasal_gc& gc)
{
int fd[2];
nasal_ref res=gc.alloc(vm_vec);
#ifndef _WIN32
if(pipe(fd)==-1)
return builtin_err("pipe","failed to create pipe");
res.vec()->elems.push_back({vm_num,(double)fd[0]});
res.vec()->elems.push_back({vm_num,(double)fd[1]});
return res;
#endif
return builtin_err("pipe","not supported yet");
}
nasal_ref builtin_fork(nasal_ref* local,nasal_gc& gc)
{
#ifndef _WIN32
return {vm_num,(double)fork()};
#endif
return builtin_err("fork","not supported yet");
}
nasal_ref builtin_opendir(nasal_ref* local,nasal_gc& gc)
{
nasal_ref path=local[1];

View File

@ -273,8 +273,8 @@ var math=
var unix=
{
pipe: func(){die("not supported yet");},
fork: func(){die("not supported yet");},
pipe: func(){return __builtin_pipe;},
fork: func(){return __builtin_fork;},
dup2: func(fd0,fd1){die("not supported yet");},
exec: func(filename,argv,envp){die("not supported yet");},
waitpid: func(pid,nohang=0){die("not supported yet");},

View File

@ -1,7 +1,28 @@
import("lib.nas");
var geodinfo=func(lat,lon){}
var maketimer=func(t,f){}
var geodinfo=func(lat,lon){
return {};
}
var maketimer=func(interval,function){
return {
isRunning:0,
start:func(){
me.isRunning=1;
while(1){
unix.sleep(interval);
function();
}
},
stop:func(){
me.isRunning=0;
},
restart:func(interval){
},
singleShot:0,
simulatedTime:0
};
}
var props=
{