On Mon, Mar 14, 2022 at 10:32:01AM +0100, Paolo Bonzini wrote: > +// ------------------------ > + > +// CoroutineFn does not even need anything more than what > +// BaseCoroutine provides, so it's just a type alias. The magic > +// is all in ValuePromise<T>. > +// > +// Suspended CoroutineFns are chained between themselves. Whenever a > +// coroutine is suspended, all those that have done a co_await are > +// also suspended, and whenever a coroutine finishes, it has to > +// check if its parent can now be resumed. > +// > +// The two auxiliary classes Awaiter and ResumeAndFinish take > +// care of the two sides of this. Awaiter's await_suspend() stores > +// the parent coroutine into ValuePromise; ResumeAndFinish's runs > +// after a coroutine returns, and resumes the parent coroutine. > + > +template<typename T> struct ValuePromise; > +template<typename T> > +using CoroutineFn = BaseCoroutine<ValuePromise<T>>; > + > +typedef CoroutineFn<void> CoroutineFunc(void *);
CoroutineFunc looks like a coroutine entry point function. If that's correct then I suggest naming it CoroutineEntryFunc to avoid confusion between CoroutineFn vs CoroutineFunc (their names are too similar). Also, where is CoroutineFunc used? > +// The actu promises, respectively for non-void and void types. s/actu/actual/?
signature.asc
Description: PGP signature