summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/stc/algo/coroutine.h4
-rw-r--r--misc/examples/coread.c1
2 files changed, 3 insertions, 2 deletions
diff --git a/include/stc/algo/coroutine.h b/include/stc/algo/coroutine.h
index b7ed895f..2ac17744 100644
--- a/include/stc/algo/coroutine.h
+++ b/include/stc/algo/coroutine.h
@@ -66,9 +66,9 @@ int main(void) {
case 0:
#define cco_end() \
- break; \
+ *_state = 0; break; \
default: assert(!"missing cco_final: or illegal state"); \
- } *_state = -2
+ } *_state *= -1
#define cco_yield(retval) \
do { \
diff --git a/misc/examples/coread.c b/misc/examples/coread.c
index a9381db8..89e06b71 100644
--- a/misc/examples/coread.c
+++ b/misc/examples/coread.c
@@ -37,4 +37,5 @@ int main(void) {
// stop after 15 lines:
if (n == 15) cco_stop(&z);
}
+ printf("state %d\n", z.cco_state);
}