summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2023-02-25 13:22:03 +0100
committerTyge Løvset <[email protected]>2023-02-25 13:22:03 +0100
commit00313bfa4f448253ac95640ed962130ec3d14b19 (patch)
treea2a61bf87a4a7fab0773be10b3849141cd3d5d66
parent40f184e52b2903b7ff1caed5c104b9d84e2f0d52 (diff)
downloadSTC-modified-00313bfa4f448253ac95640ed962130ec3d14b19.tar.gz
STC-modified-00313bfa4f448253ac95640ed962130ec3d14b19.zip
Finish fixes in coroutine.h.
-rw-r--r--include/stc/algo/coroutine.h7
-rw-r--r--misc/examples/coroutines.c2
2 files changed, 3 insertions, 6 deletions
diff --git a/include/stc/algo/coroutine.h b/include/stc/algo/coroutine.h
index 2ac17744..4ba39e63 100644
--- a/include/stc/algo/coroutine.h
+++ b/include/stc/algo/coroutine.h
@@ -78,14 +78,13 @@ int main(void) {
#define cco_yield_coroutine(c, corocall, retval) \
do { \
- *_state = __LINE__; cco_reset(c); \
+ *_state = __LINE__; \
c_PASTE(cco, __LINE__): corocall; return retval; \
case __LINE__:; if (cco_alive(c)) goto c_PASTE(cco, __LINE__); \
} while (0)
#define cco_final case -1
-#define cco_stop(c) ((c)->cco_state = (c)->cco_state > 0 ? -1 : -2, c)
-#define cco_alive(c) ((c)->cco_state >= 0)
-#define cco_reset(c) ((c)->cco_state = 0)
+#define cco_alive(c) ((c)->cco_state > 0)
+#define cco_stop(c) ((c)->cco_state = cco_alive(c) ? -1 : -2, c)
#endif
diff --git a/misc/examples/coroutines.c b/misc/examples/coroutines.c
index d3295102..120f11b8 100644
--- a/misc/examples/coroutines.c
+++ b/misc/examples/coroutines.c
@@ -62,6 +62,4 @@ int main(void) {
while (iterate(&iter, &fib))
printf("%d %d. Fib: %lld\n", iter.x, iter.y, fib.a);
-
- puts("");
}