mirror of
https://github.com/janet-lang/janet
synced 2024-12-25 07:50:27 +00:00
Allow yielding by transfering to nil
This commit is contained in:
parent
957a513fd6
commit
171c0ce49e
@ -359,6 +359,9 @@ int gst_continue(Gst *vm) {
|
||||
v1 = stack[pc[3]]; /* The value to pass in */
|
||||
if (temp.type != GST_THREAD && temp.type != GST_NIL)
|
||||
gst_error(vm, "expected thread");
|
||||
if (temp.type == GST_NIL && vm->thread->parent) {
|
||||
temp = gst_wrap_thread(vm->thread->parent);
|
||||
}
|
||||
if (temp.type == GST_THREAD) {
|
||||
if (temp.data.thread->status == GST_THREAD_DEAD ||
|
||||
temp.data.thread->status == GST_THREAD_ERROR)
|
||||
|
@ -80,6 +80,15 @@
|
||||
(assert (= athread-result "hello, world!") "thread error result")
|
||||
(assert (= (status athread) "error") "thread error status")
|
||||
|
||||
"yield tests"
|
||||
|
||||
(def t (thread (fn [] (tran nil 1) (tran nil 2) 3)))
|
||||
|
||||
(assert (= 1 (tran t)) "initial transfer to new thread")
|
||||
(assert (= 2 (tran t)) "second transfer to thread")
|
||||
(assert (= 3 (tran t)) "return from thread")
|
||||
(assert (= (status t) "dead") "finished thread is dead")
|
||||
|
||||
"report"
|
||||
|
||||
(print num-tests-passed "of" num-tests-run "tests passed")
|
||||
|
Loading…
Reference in New Issue
Block a user