rob_w has joined #picolisp
<
tankf33der>
morning all
<
tankf33der>
taleon: did you solve your openbsd issue ?
msavoritias has joined #picolisp
rob_w has quit [Remote host closed the connection]
<
tankf33der>
abu[7]: alarma
<
tankf33der>
I've created another coroutine monster; pil21 is hanging.
<
abu[7]>
Good! I'm out. Will look later.
msavoritias has quit [Ping timeout: 268 seconds]
<
tankf33der>
freebsd - hang, linux - coredump
<
abu[7]>
Must watch football :)
<
abu[7]>
(catch '("") (co 'a (co 'b (throw (yield)))))
<
abu[7]>
cause (yield (throw is never yielded
<
abu[7]>
then (co 'b T)
<
abu[7]>
Will debug later
msavoritias has joined #picolisp
msavoritias has quit [Remote host closed the connection]
<
abu[7]>
While watching soccer, I thought about it :) I know what goes wrong, an there should be an error message. Must find out why not.
<
tankf33der>
lucky me
<
abu[7]>
2:0 for DE
<
abu[7]>
Too tired today. The problem is that if you call (catch T (co 'a (co 'b (throw (yield)))))
<
abu[7]>
then 'a' is finished
<
abu[7]>
because 'b' yielded back to 'a' and 'a' falls off the end
<
abu[7]>
When then (co 'b T) is called, 'b' continues after the 'yield' and thus 'throw's
<
abu[7]>
So here we should see "NIL -- Tag not found""NIL -- Tag not found"
<
abu[7]>
But instead it crashes
<
abu[7]>
'yield' did not properly maintain the stacks
<
abu[7]>
Btw, (catch T (co 'a (co 'b (throw (yield))))) and then (co 'b T) is the wrong call
<
abu[7]>
Correct would be (co 'a (co 'b (throw (yield)))) and then (catch T (co 'b T))
<
abu[7]>
because the throw happens now
<
abu[7]>
But as the wrong call should behave well too (tag error), I'll try to fix tomorrow
<
tankf33der>
Ok. Good