/* * Copyright (c) 2021-2022, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace JS { // 9.5.1 JobCallback Records, https://tc39.es/ecma262/#sec-jobcallback-records class JobCallback : public JS::Cell { JS_CELL(JobCallback, JS::Cell); JS_DECLARE_ALLOCATOR(JobCallback); public: struct CustomData { virtual ~CustomData() = default; }; [[nodiscard]] static JS::NonnullGCPtr create(JS::VM& vm, FunctionObject& callback, OwnPtr custom_data); JobCallback(FunctionObject& callback, OwnPtr custom_data) : m_callback(callback) , m_custom_data(move(custom_data)) { } void visit_edges(Visitor& visitor) override; FunctionObject& callback() { return m_callback; } CustomData* custom_data() { return m_custom_data; } private: JS::NonnullGCPtr m_callback; OwnPtr m_custom_data { nullptr }; }; JS::NonnullGCPtr make_job_callback(FunctionObject& callback); ThrowCompletionOr call_job_callback(VM&, JS::NonnullGCPtr, Value this_value, ReadonlySpan arguments_list); }