#ifndef vm_AsyncFunction_h
#define vm_AsyncFunction_h
#include "builtin/Promise.h"
#include "js/Class.h"
#include "vm/GeneratorObject.h"
#include "vm/JSContext.h"
#include "vm/JSObject.h"
namespace js {
class AsyncFunctionGeneratorObject;
MOZ_MUST_USE bool AsyncFunctionAwaitedFulfilled(
JSContext* cx, Handle<AsyncFunctionGeneratorObject*> generator,
HandleValue value);
MOZ_MUST_USE bool AsyncFunctionAwaitedRejected(
JSContext* cx, Handle<AsyncFunctionGeneratorObject*> generator,
HandleValue reason);
enum class AsyncFunctionResolveKind { Fulfill, Reject };
JSObject* AsyncFunctionResolve(JSContext* cx,
Handle<AsyncFunctionGeneratorObject*> generator,
HandleValue valueOrReason,
AsyncFunctionResolveKind resolveKind);
class AsyncFunctionGeneratorObject : public AbstractGeneratorObject {
public:
enum {
PROMISE_SLOT = AbstractGeneratorObject::RESERVED_SLOTS,
RESERVED_SLOTS
};
static const Class class_;
static AsyncFunctionGeneratorObject* create(JSContext* cx,
HandleFunction asyncGen);
PromiseObject* promise() {
return &getFixedSlot(PROMISE_SLOT).toObject().as<PromiseObject>();
}
};
}
#endif