DisposableStack.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2022, David Tuin <davidot@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibJS/Runtime/AbstractOperations.h>
  8. #include <LibJS/Runtime/Object.h>
  9. namespace JS {
  10. class DisposableStack final : public Object {
  11. JS_OBJECT(DisposableStack, Object);
  12. public:
  13. virtual ~DisposableStack() override = default;
  14. enum class DisposableState {
  15. Pending,
  16. Disposed
  17. };
  18. [[nodiscard]] DisposableState disposable_state() const { return m_state; }
  19. [[nodiscard]] Vector<DisposableResource> const& disposable_resource_stack() const { return m_disposable_resource_stack; }
  20. [[nodiscard]] Vector<DisposableResource>& disposable_resource_stack() { return m_disposable_resource_stack; }
  21. void set_disposed() { m_state = DisposableState::Disposed; }
  22. private:
  23. DisposableStack(Vector<DisposableResource> stack, Object& prototype);
  24. virtual void visit_edges(Visitor& visitor) override;
  25. Vector<DisposableResource> m_disposable_resource_stack;
  26. DisposableState m_state { DisposableState::Pending };
  27. };
  28. }