]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/JSPromise.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / runtime / JSPromise.h
index d1d1854d936c17c39944be92ee3f52455af57f81..89fd8a69ca51482ef9666088150d09031c535440 100644 (file)
 
 #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&, JSGlobalObject*);
     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();
-    }
-
-    void reject(VM&, JSValue);
-    void resolve(VM&, JSValue);
-
-    void appendResolveReaction(VM&, JSPromiseReaction*);
-    void appendRejectReaction(VM&, JSPromiseReaction*);
+    Status status(VM&) const;
+    JSValue result(VM&) const;
 
 private:
     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