/src/serenity/Userland/Libraries/LibJS/Runtime/JobCallback.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2021-2022, Linus Groh <linusg@serenityos.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <AK/OwnPtr.h> |
10 | | #include <LibJS/Heap/Handle.h> |
11 | | #include <LibJS/Runtime/Completion.h> |
12 | | #include <LibJS/Runtime/FunctionObject.h> |
13 | | #include <LibJS/Runtime/VM.h> |
14 | | |
15 | | namespace JS { |
16 | | |
17 | | // 9.5.1 JobCallback Records, https://tc39.es/ecma262/#sec-jobcallback-records |
18 | | class JobCallback : public JS::Cell { |
19 | | JS_CELL(JobCallback, JS::Cell); |
20 | | JS_DECLARE_ALLOCATOR(JobCallback); |
21 | | |
22 | | public: |
23 | | struct CustomData { |
24 | 0 | virtual ~CustomData() = default; |
25 | | }; |
26 | | |
27 | | [[nodiscard]] static JS::NonnullGCPtr<JobCallback> create(JS::VM& vm, FunctionObject& callback, OwnPtr<CustomData> custom_data); |
28 | | |
29 | | JobCallback(FunctionObject& callback, OwnPtr<CustomData> custom_data) |
30 | 0 | : m_callback(callback) |
31 | 0 | , m_custom_data(move(custom_data)) |
32 | 0 | { |
33 | 0 | } |
34 | | |
35 | | void visit_edges(Visitor& visitor) override; |
36 | | |
37 | 0 | FunctionObject& callback() { return m_callback; } |
38 | 0 | CustomData* custom_data() { return m_custom_data; } |
39 | | |
40 | | private: |
41 | | JS::NonnullGCPtr<FunctionObject> m_callback; |
42 | | OwnPtr<CustomData> m_custom_data { nullptr }; |
43 | | }; |
44 | | |
45 | | JS::NonnullGCPtr<JobCallback> make_job_callback(FunctionObject& callback); |
46 | | ThrowCompletionOr<Value> call_job_callback(VM&, JS::NonnullGCPtr<JobCallback>, Value this_value, ReadonlySpan<Value> arguments_list); |
47 | | |
48 | | } |