/* * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS { template class HeapFunction final : public JS::Cell { JS_CELL(HeapFunction, Cell); public: static NonnullGCPtr create(Heap& heap, Function function) { return heap.allocate_without_realm(move(function)); } virtual ~HeapFunction() override = default; [[nodiscard]] Function const& function() const { return m_function; } private: HeapFunction(Function function) : m_function(move(function)) { } virtual void visit_edges(Visitor& visitor) override { Base::visit_edges(visitor); visitor.visit_possible_values(m_function.raw_capture_range()); } Function m_function; }; template static NonnullGCPtr> create_heap_function(Heap& heap, Function function) { return HeapFunction::create(heap, move(function)); } }