/* * Copyright (c) 2021, Idan Horowitz * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS { class WeakRef final : public Object , public WeakContainer { JS_OBJECT(WeakRef, Object); public: static WeakRef* create(GlobalObject&, Object*); explicit WeakRef(Object*, Object& prototype); virtual ~WeakRef() override; Object* value() const { return m_value; }; void update_execution_generation() { m_last_execution_generation = vm().execution_generation(); }; virtual void remove_swept_cells(Badge, Span) override; private: virtual void visit_edges(Visitor&) override; #ifdef JS_TRACK_ZOMBIE_CELLS virtual void did_become_zombie() override { deregister(); } #endif Object* m_value { nullptr }; u32 m_last_execution_generation { 0 }; }; }