diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSPromise.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSPromise.h | 68 |
1 files changed, 17 insertions, 51 deletions
diff --git a/Source/JavaScriptCore/runtime/JSPromise.h b/Source/JavaScriptCore/runtime/JSPromise.h index d1d1854d9..639f650bc 100644 --- a/Source/JavaScriptCore/runtime/JSPromise.h +++ b/Source/JavaScriptCore/runtime/JSPromise.h @@ -23,71 +23,37 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef JSPromise_h -#define JSPromise_h +#pragma once -#if ENABLE(PROMISES) - -#include "JSDestructibleObject.h" +#include "JSObject.h" namespace JSC { -class JSPromiseReaction; -class JSPromiseConstructor; - -class JSPromise : public JSDestructibleObject { +class JSPromise : public JSNonFinalObject { public: - typedef JSDestructibleObject Base; + typedef JSNonFinalObject Base; - static JSPromise* create(VM&, JSGlobalObject*, JSPromiseConstructor*); + static JSPromise* create(VM&, Structure*); static Structure* createStructure(VM&, JSGlobalObject*, JSValue); - DECLARE_INFO; + DECLARE_EXPORT_INFO; - enum class Status { - Unresolved, - HasResolution, - HasRejection + enum class Status : unsigned { + Pending = 1, + Fulfilled, + Rejected }; - Status status() const - { - return m_status; - } - - JSValue result() const - { - ASSERT(m_status != Status::Unresolved); - return m_result.get(); - } - - JSPromiseConstructor* constructor() const - { - return m_constructor.get(); - } + Status status(VM&) const; + JSValue result(VM&) const; - void reject(VM&, JSValue); - void resolve(VM&, JSValue); + // Initialize the promise with the executor. + // This may raise a JS exception. + void initialize(ExecState*, JSGlobalObject*, JSValue executor); - void appendResolveReaction(VM&, JSPromiseReaction*); - void appendRejectReaction(VM&, JSPromiseReaction*); - -private: +protected: JSPromise(VM&, Structure*); - void finishCreation(VM&, JSPromiseConstructor*); - static const unsigned StructureFlags = OverridesVisitChildren | JSObject::StructureFlags; - static void destroy(JSCell*); - static void visitChildren(JSCell*, SlotVisitor&); - - Status m_status; - WriteBarrier<Unknown> m_result; - WriteBarrier<JSPromiseConstructor> m_constructor; - Vector<WriteBarrier<JSPromiseReaction>> m_resolveReactions; - Vector<WriteBarrier<JSPromiseReaction>> m_rejectReactions; + void finishCreation(VM&); }; } // namespace JSC - -#endif // ENABLE(PROMISES) - -#endif // JSPromise_h |