mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-05-02 19:00:47 +08:00
⚡ optimize codes: store upvalue on stack & debugger now can output information of registers
This commit is contained in:
@@ -2,16 +2,11 @@
|
||||
# 2022/5/19
|
||||
var fib=func(){
|
||||
var (a,b)=(1,1);
|
||||
if(coroutine.running()){
|
||||
coroutine.yield(a);
|
||||
coroutine.yield(b);
|
||||
}
|
||||
coroutine.yield(a);
|
||||
coroutine.yield(b);
|
||||
while(1){
|
||||
(a,b)=(b,a+b);
|
||||
if(coroutine.running())
|
||||
coroutine.yield(b);
|
||||
else
|
||||
break;
|
||||
coroutine.yield(b);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -22,4 +17,34 @@ for(var i=0;i<45;i+=1){
|
||||
println('coroutine[0]:',res[0]==nil?nil:res[0][0],'\ncoroutine[1]:',res[1]==nil?nil:res[1][0]);
|
||||
}
|
||||
|
||||
fib();
|
||||
var productor=func(){
|
||||
for(var i=0;;i+=1)
|
||||
coroutine.yield(i);
|
||||
}
|
||||
var counter=0;
|
||||
var consumer=func(){
|
||||
counter+=1;
|
||||
print('[',counter,']: ');
|
||||
for(var i=0;i<5;i+=1){
|
||||
print('[',i,']',coroutine.resume(co)[0],' ');
|
||||
}
|
||||
print('\n');
|
||||
}
|
||||
|
||||
var co=coroutine.create(productor);
|
||||
var tm=maketimestamp();
|
||||
tm.stamp();
|
||||
while(tm.elapsedMSec()<1000)
|
||||
consumer();
|
||||
|
||||
func(){
|
||||
var x=1;
|
||||
var co=coroutine.create(func(){
|
||||
for(var j=0;j<1024;j+=1){
|
||||
coroutine.yield(x,i,j);
|
||||
x+=1;
|
||||
}
|
||||
});
|
||||
for(var i=0;i<256;i+=1)
|
||||
println(coroutine.resume(co));
|
||||
}();
|
||||
Reference in New Issue
Block a user