From d8156e839b67408f396d9bffeab72a2522e9e4cf Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Wed, 9 Mar 2022 19:03:12 +0800 Subject: [PATCH] add unix.fork&unix.pipe(do not work on windows platform) --- lib.nas | 4 ++-- nasal_builtin.h | 24 ++++++++++++++++++++++++ stl/lib.nas | 4 ++-- test/props_sim.nas | 25 +++++++++++++++++++++++-- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/lib.nas b/lib.nas index c51f249..66a5080 100644 --- a/lib.nas +++ b/lib.nas @@ -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");}, diff --git a/nasal_builtin.h b/nasal_builtin.h index 3e628fb..afa2ecc 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -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]; diff --git a/stl/lib.nas b/stl/lib.nas index c51f249..66a5080 100644 --- a/stl/lib.nas +++ b/stl/lib.nas @@ -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");}, diff --git a/test/props_sim.nas b/test/props_sim.nas index 974e18c..caec6dd 100644 --- a/test/props_sim.nas +++ b/test/props_sim.nas @@ -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= {