ArrayBuffer.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2020, Linus Groh <linusg@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/ArrayBuffer.h>
  7. #include <LibJS/Runtime/GlobalObject.h>
  8. namespace JS {
  9. ArrayBuffer* ArrayBuffer::create(GlobalObject& global_object, size_t byte_size)
  10. {
  11. auto buffer = ByteBuffer::create_zeroed(byte_size);
  12. if (!buffer.has_value()) {
  13. global_object.vm().throw_exception<RangeError>(global_object, ErrorType::NotEnoughMemoryToAllocate, byte_size);
  14. return nullptr;
  15. }
  16. return global_object.heap().allocate<ArrayBuffer>(global_object, buffer.release_value(), *global_object.array_buffer_prototype());
  17. }
  18. ArrayBuffer* ArrayBuffer::create(GlobalObject& global_object, ByteBuffer* buffer)
  19. {
  20. return global_object.heap().allocate<ArrayBuffer>(global_object, buffer, *global_object.array_buffer_prototype());
  21. }
  22. ArrayBuffer::ArrayBuffer(ByteBuffer buffer, Object& prototype)
  23. : Object(prototype)
  24. , m_buffer(move(buffer))
  25. , m_detach_key(js_undefined())
  26. {
  27. }
  28. ArrayBuffer::ArrayBuffer(ByteBuffer* buffer, Object& prototype)
  29. : Object(prototype)
  30. , m_buffer(buffer)
  31. , m_detach_key(js_undefined())
  32. {
  33. }
  34. ArrayBuffer::~ArrayBuffer()
  35. {
  36. }
  37. void ArrayBuffer::visit_edges(Cell::Visitor& visitor)
  38. {
  39. Base::visit_edges(visitor);
  40. visitor.visit(m_detach_key);
  41. }
  42. }