String c_WaitableWaitHandle::getName() { switch (getKind()) { case Kind::Static: not_reached(); case Kind::AsyncFunction: return asAsyncFunction()->getName(); case Kind::AsyncGenerator: return asAsyncGenerator()->getName(); case Kind::AwaitAll: return asAwaitAll()->getName(); case Kind::Condition: return asCondition()->getName(); case Kind::Reschedule: return asReschedule()->getName(); case Kind::Sleep: return asSleep()->getName(); case Kind::ExternalThreadEvent: return asExternalThreadEvent()->getName(); } not_reached(); }
c_WaitableWaitHandle* c_WaitableWaitHandle::getChild() { assertx(!isFinished()); switch (getKind()) { case Kind::Static: not_reached(); case Kind::AsyncFunction: return asAsyncFunction()->getChild(); case Kind::AsyncGenerator: return asAsyncGenerator()->getChild(); case Kind::AwaitAll: return asAwaitAll()->getChild(); case Kind::Condition: return asCondition()->getChild(); case Kind::Reschedule: return nullptr; case Kind::Sleep: return nullptr; case Kind::ExternalThreadEvent: return nullptr; } not_reached(); }
c_WaitableWaitHandle* c_WaitableWaitHandle::getChild() { assert(!isFinished()); switch (getKind()) { case Kind::Static: not_reached(); case Kind::AsyncFunction: return asAsyncFunction()->getChild(); case Kind::AsyncGenerator: return asAsyncGenerator()->getChild(); case Kind::GenArray: return asGenArray()->getChild(); case Kind::GenMap: return asGenMap()->getChild(); case Kind::GenVector: return asGenVector()->getChild(); case Kind::Reschedule: return nullptr; case Kind::Sleep: return nullptr; case Kind::ExternalThreadEvent: return nullptr; return nullptr; } not_reached(); }
void c_WaitableWaitHandle::enterContextImpl(context_idx_t ctx_idx) { switch (getKind()) { case Kind::Static: not_reached(); case Kind::AsyncFunction: return asAsyncFunction()->enterContextImpl(ctx_idx); case Kind::AsyncGenerator: return asAsyncGenerator()->enterContextImpl(ctx_idx); case Kind::GenArray: return asGenArray()->enterContextImpl(ctx_idx); case Kind::GenMap: return asGenMap()->enterContextImpl(ctx_idx); case Kind::GenVector: return asGenVector()->enterContextImpl(ctx_idx); case Kind::Reschedule: return asReschedule()->enterContextImpl(ctx_idx); case Kind::Sleep: return asSleep()->enterContextImpl(ctx_idx); case Kind::ExternalThreadEvent: return asExternalThreadEvent()->enterContextImpl(ctx_idx); } not_reached(); }