c/lua:coroutine

This commit is contained in:
luoliwoshang
2024-07-28 20:15:11 +08:00
parent 35ba69a175
commit 072f606784
3 changed files with 66 additions and 5 deletions

View File

@@ -0,0 +1,42 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/lua"
)
func coroutineFunc(L *lua.State) c.Int {
c.Printf(c.Str("Coroutine started\n"))
L.Yield(0) // Pause the coroutine
c.Printf(c.Str("Coroutine resumed\n"))
return 0
}
func main() {
L := lua.Newstate()
defer L.Close()
L.Openlibs()
co := L.Newthread()
L.Pushcfunction(coroutineFunc)
L.Xmove(co, 1)
var nres c.Int
c.Printf(c.Str("Resuming coroutine for the first time\n"))
result := co.Resume(nil, 0, &nres)
if result == lua.YIELD {
c.Printf(c.Str("Coroutine yielded\n"))
result = co.Resume(nil, 0, &nres)
if result == 0 {
c.Printf(c.Str("Coroutine finished\n"))
}
}
}
/* Expected output:
Resuming coroutine for the first time
Coroutine started
Coroutine yielded
Coroutine finished
*/