#ifndef V8_OBJECTS_JS_PROMISE_H_
#define V8_OBJECTS_JS_PROMISE_H_
#include "include/v8-promise.h"
#include "src/objects/js-objects.h"
#include "src/objects/promise.h"
#include "torque-generated/bit-fields.h"
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
#include "torque-generated/src/objects/js-promise-tq.inc"
class JSPromise
: public TorqueGeneratedJSPromise<JSPromise, JSObjectWithEmbedderSlots> {
public:
static constexpr uint32_t kInvalidAsyncTaskId = 0;
inline Tagged<Object> result() const;
inline Tagged<Object> reactions() const;
DECL_BOOLEAN_ACCESSORS(has_handler)
DECL_BOOLEAN_ACCESSORS(is_silent)
inline bool has_async_task_id() const;
inline uint32_t async_task_id() const;
inline void set_async_task_id(uint32_t id);
static inline uint32_t GetNextAsyncTaskId(uint32_t current_async_task_id);
static const char* Status(Promise::PromiseState status);
V8_EXPORT_PRIVATE Promise::PromiseState status() const;
void set_status(Promise::PromiseState status);
V8_EXPORT_PRIVATE static Handle<Object> Fulfill(
DirectHandle<JSPromise> promise, DirectHandle<Object> value);
static Handle<Object> Reject(DirectHandle<JSPromise> promise,
DirectHandle<Object> reason,
bool debug_event = true);
V8_WARN_UNUSED_RESULT static MaybeHandle<Object> Resolve(
DirectHandle<JSPromise> promise, DirectHandle<Object> resolution);
DECL_PRINTER(JSPromise)
DECL_VERIFIER(JSPromise)
static const int kSizeWithEmbedderFields =
kHeaderSize + v8::Promise::kEmbedderFieldCount * kEmbedderDataSlotSize;
DEFINE_TORQUE_GENERATED_JS_PROMISE_FLAGS()
static_assert(v8::Promise::kPending == 0);
static_assert(v8::Promise::kFulfilled == 1);
static_assert(v8::Promise::kRejected == 2);
private:
static Handle<Object> TriggerPromiseReactions(Isolate* isolate,
DirectHandle<Object> reactions,
DirectHandle<Object> argument,
PromiseReaction::Type type);
TQ_OBJECT_CONSTRUCTORS(JSPromise)
};
}
}
#include "src/objects/object-macros-undef.h"
#endif