diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/algo/coroutine.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/stc/algo/coroutine.h b/include/stc/algo/coroutine.h index 6d502988..59e4cfca 100644 --- a/include/stc/algo/coroutine.h +++ b/include/stc/algo/coroutine.h @@ -86,8 +86,10 @@ enum { #define cco_yield_3(corocall, ctx, retval) \ do { \ *_state = __LINE__; \ - c_PASTE(cco, __LINE__): corocall; if (cco_alive(ctx)) return retval; \ - case __LINE__: if ((ctx)->cco_state >= cco_state_final) goto c_PASTE(cco, __LINE__); \ + do { \ + corocall; if (cco_alive(ctx)) return retval; \ + case __LINE__:; \ + } while ((ctx)->cco_state >= cco_state_final); \ } while (0) #define cco_final \ |
