MarkedValueList.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Heap/Heap.h>
  7. #include <LibJS/Heap/MarkedVector.h>
  8. namespace JS {
  9. MarkedValueList::MarkedValueList(Heap& heap)
  10. : m_heap(&heap)
  11. {
  12. m_heap->did_create_marked_value_list({}, *this);
  13. }
  14. MarkedValueList::MarkedValueList(MarkedValueList const& other)
  15. : Vector<Value, 32>(other)
  16. , m_heap(other.m_heap)
  17. {
  18. m_heap->did_create_marked_value_list({}, *this);
  19. }
  20. MarkedValueList::MarkedValueList(MarkedValueList&& other)
  21. : Vector<Value, 32>(move(static_cast<Vector<Value, 32>&>(other)))
  22. , m_heap(other.m_heap)
  23. {
  24. m_heap->did_create_marked_value_list({}, *this);
  25. }
  26. MarkedValueList::~MarkedValueList()
  27. {
  28. m_heap->did_destroy_marked_value_list({}, *this);
  29. }
  30. MarkedValueList& MarkedValueList::operator=(JS::MarkedValueList const& other)
  31. {
  32. Vector<Value, 32>::operator=(other);
  33. if (m_heap != other.m_heap) {
  34. m_heap = other.m_heap;
  35. // NOTE: IntrusiveList will remove this MarkedValueList from the old heap it was part of.
  36. m_heap->did_create_marked_value_list({}, *this);
  37. }
  38. return *this;
  39. }
  40. }