- getcontext(&gen->gen);
-
- gen->gen.uc_stack.ss_sp = gen->base;
- gen->gen.uc_stack.ss_size = (char *)gen - base;
-
- if (HAVE_POINTER_SAFE_MAKECONTEXT) {
- makecontext(&gen->gen, (void *)fn, 1, ret);
- } else {
- ptrdiff_t si = ptr2int(ret);
- ptrdiff_t mask = (1UL << (sizeof(int) * 8)) - 1;
- int lo = si & mask;
- int hi = si >> (sizeof(int) * 8);
-
- makecontext(&gen->gen, (void *)fn, 2, lo, hi);
- }
+ coroutine_init(&gen->gen, fn, ret, stack);