summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/stc/algo/coroutine.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/include/stc/algo/coroutine.h b/include/stc/algo/coroutine.h
index 395a19cb..89ac9a35 100644
--- a/include/stc/algo/coroutine.h
+++ b/include/stc/algo/coroutine.h
@@ -79,18 +79,19 @@ enum {
} \
return retval
-#define cco_yield(retval) \
+#define cco_return \
do { \
- *_state = __LINE__; return retval; \
- case __LINE__:; \
+ *_state = cco_state_final; goto cco_finish; \
} while (0)
-#define cco_return \
+#define cco_yield(...) c_MACRO_OVERLOAD(cco_yield, __VA_ARGS__)
+#define cco_yield_1(retval) \
do { \
- *_state = cco_state_final; goto cco_finish; \
+ *_state = __LINE__; return retval; \
+ case __LINE__:; \
} while (0)
-#define cco_coroutine(corocall, ctx, retval) \
+#define cco_yield_3(corocall, ctx, retval) \
do { \
*_state = __LINE__; \
c_PASTE(cco, __LINE__): corocall; if (cco_alive(ctx)) return retval; \