/* * Copyright (c) 2020, Matthew Olsson * Copyright (c) 2020, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS { class Accessor final : public Cell { JS_CELL(Accessor, Cell); public: static NonnullGCPtr create(VM& vm, FunctionObject* getter, FunctionObject* setter) { return *vm.heap().allocate_without_realm(getter, setter); } FunctionObject* getter() const { return m_getter; } void set_getter(FunctionObject* getter) { m_getter = getter; } FunctionObject* setter() const { return m_setter; } void set_setter(FunctionObject* setter) { m_setter = setter; } void visit_edges(Cell::Visitor& visitor) override { visitor.visit(m_getter); visitor.visit(m_setter); } private: Accessor(FunctionObject* getter, FunctionObject* setter) : m_getter(getter) , m_setter(setter) { } FunctionObject* m_getter { nullptr }; FunctionObject* m_setter { nullptr }; }; }