fn call(
closure: *Group.AsyncClosure,
contexts: *const Io.fiber.Switch,
) callconv(.withStackAlign(.c, @alignOf(Group.AsyncClosure))) noreturn closure: *Group.AsyncClosurecontexts: *const Io.fiber.Switch1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792 fn call(
closure: *Group.AsyncClosure,
contexts: *const Io.fiber.Switch,
) callconv(.withStackAlign(.c, @alignOf(Group.AsyncClosure))) noreturn {
const message: *const SwitchMessage = @fieldParentPtr("contexts", contexts);
const ev = closure.evented;
const fiber = closure.fiber;
message.handle(ev);
assert(fiber.status.queue_next == null);
closure.start(closure.contextPointer());
ev.yield(closure.group.removeFiber(ev, fiber), .destroy);
unreachable; // switched to dead fiber
}