Files
llgo/c/neco/_demo/gen/gen.go

38 lines
855 B
Go
Raw Normal View History

2024-07-15 21:52:45 +08:00
package main
import (
"unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/neco"
)
2024-07-18 00:54:31 +08:00
func coroutine(argc c.Int, argv *c.Pointer) {
// Yield each int to the caller, one at a time.
for i := 0; i < 10; i++ {
neco.GenYield(unsafe.Pointer(&i))
}
2024-07-15 21:52:45 +08:00
}
2024-07-18 00:54:31 +08:00
func necoMain(argc c.Int, argv *c.Pointer) {
2024-07-15 21:52:45 +08:00
// Create a new generator coroutine that is used to send ints.
2024-07-18 00:54:31 +08:00
var gen *neco.Gen
neco.GenStart(&gen, unsafe.Sizeof(0), coroutine, 0)
2024-07-15 21:52:45 +08:00
// Iterate over each int until the generator is closed.
2024-07-18 00:54:31 +08:00
var i int
for neco.GenNext(gen, unsafe.Pointer(&i)) != neco.CLOSED {
c.Printf(c.Str("%d\n"), i)
2024-07-15 21:52:45 +08:00
}
2024-07-17 22:41:35 +08:00
neco.GenRelease(gen)
2024-07-18 00:54:31 +08:00
neco.ExitProg(0)
2024-07-15 21:52:45 +08:00
}
2024-07-18 00:54:31 +08:00
func main() {
neco.EnvSetpaniconerror(true)
neco.EnvSetcanceltype(neco.CANCEL_ASYNC)
var ret = neco.Start(necoMain, 0)
c.Fprintf(c.Stderr, c.Str("neco_start: %s (code %d)\n"), neco.Strerror(ret), ret)
2024-07-15 21:52:45 +08:00
}