DisposableStack.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. JS_DECLARE_ALLOCATOR(DisposableStack);
  13. public:
  14. virtual ~DisposableStack() override = default;
  15. enum class DisposableState {
  16. Pending,
  17. Disposed
  18. };
  19. [[nodiscard]] DisposableState disposable_state() const { return m_state; }
  20. [[nodiscard]] Vector<DisposableResource> const& disposable_resource_stack() const { return m_disposable_resource_stack; }
  21. [[nodiscard]] Vector<DisposableResource>& disposable_resource_stack() { return m_disposable_resource_stack; }
  22. void set_disposed() { m_state = DisposableState::Disposed; }
  23. private:
  24. DisposableStack(Vector<DisposableResource> stack, Object& prototype);
  25. virtual void visit_edges(Visitor& visitor) override;
  26. Vector<DisposableResource> m_disposable_resource_stack;
  27. DisposableState m_state { DisposableState::Pending };
  28. };
  29. }