I'm trying to understand it at a compiler level - the docs seem to indicate that almost all of this is implemented by a library, but it seems like at some point the compiler must get involved when crossing from non-suspended code to suspended coroutines.