aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSNextTickQueue.h
blob: c3bd228cc3080fa39a319c7b8af7076e3387fc0e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "root.h"
#include "headers-handwritten.h"

#include "JavaScriptCore/JSCInlines.h"
#include "BunClientData.h"
#include <JavaScriptCore/JSInternalFieldObjectImpl.h>

namespace Bun {
using namespace JSC;

class JSNextTickQueue : public JSC::JSInternalFieldObjectImpl<3> {
public:
    static constexpr unsigned numberOfInternalFields = 3;
    using Base = JSC::JSInternalFieldObjectImpl<3>;

    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm);

    JS_EXPORT_PRIVATE static JSNextTickQueue* create(VM&, Structure*);
    static JSNextTickQueue* create(JSC::JSGlobalObject* globalObject);
    static JSNextTickQueue* createWithInitialValues(VM&, Structure*);
    static Structure* createStructure(VM&, JSGlobalObject*, JSValue);

    static std::array<JSValue, numberOfInternalFields> initialValues()
    {
        return { {
            jsNumber(-1),
            jsUndefined(),
            jsUndefined(),
        } };
    }

    DECLARE_EXPORT_INFO;
    DECLARE_VISIT_CHILDREN;

    JSNextTickQueue(JSC::VM&, JSC::Structure*);
    void finishCreation(JSC::VM&);

    bool isEmpty();
    void drain(JSC::VM& vm, JSC::JSGlobalObject* globalObject);
};
}