📝 update test/module_test.nas

This commit is contained in:
ValKmjolnir 2022-05-17 21:48:08 +08:00
parent f8692f1e4e
commit d567f5abf8
3 changed files with 44 additions and 6 deletions

View File

@ -56,7 +56,7 @@ extern "C" nasal_ref nas_init(std::vector<nasal_ref>& args,nasal_gc& gc){
tcflush(0,TCIOFLUSH);
tcgetattr(0,&init_termios);
new_termios=init_termios;
new_termios.c_lflag&=~(ICANON|ECHO|ECHONL);
new_termios.c_lflag&=~(ICANON|ECHO|ECHONL|ECHOE);
// vmin=0 is nonblock input, but in wsl there is a bug that will block input
// so we use fcntl to write the nonblock input
new_termios.c_cc[VMIN]=1;

View File

@ -4,7 +4,6 @@
# this provides safe usage of dylib
# when dylib is closed,
# all the invalid functions cannot be called
import("lib.nas");
var module_call_func=func(fptr,args){
return __builtin_dlcall;

View File

@ -1,5 +1,44 @@
import("./module/libfib.nas");
var libfib=func(){
var (dd,fib,qfib)=(nil,nil,nil);
return {
open:func(){
if(dd==nil){
dd=dylib.dlopen("./module/libfib.so");
fib=dylib.dlsym(dd,"fib");
qfib=dylib.dlsym(dd,"quick_fib");
}else{
println("[info ] already loaded.");
}
},
close:func(){
if(dd==nil){
println("[error ] already closed.");
return;
}
dylib.dlclose(dd);
(dd,fib,qfib)=(nil,nil,nil);
},
fib:func(x){
if(fib!=nil)
return dylib.dlcall(fib,x);
println("[error ] cannot call fib.");
return nil;
},
qfib:func(x){
if(qfib!=nil)
return dylib.dlcall(qfib,x);
println("[error ] cannot call qfib.");
return nil;
}
}
}();
println(libfib);
println(libfib.fib(29));
println(libfib.qfib(29));
println("[keys ] ",keys(libfib));
libfib.open();
libfib.open();
println("[result] ",libfib.fib(40));
println("[result] ",libfib.qfib(40));
libfib.close();
println("[result] ",libfib.fib(40));
println("[result] ",libfib.qfib(40));
libfib.close();