ThrowableStringBuilder.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/Utf16View.h>
  7. #include <LibJS/Runtime/ThrowableStringBuilder.h>
  8. namespace JS {
  9. ThrowableStringBuilder::ThrowableStringBuilder(VM& vm)
  10. : m_vm(vm)
  11. {
  12. }
  13. ThrowCompletionOr<void> ThrowableStringBuilder::append(char ch)
  14. {
  15. if (try_append(ch).is_error())
  16. return m_vm.throw_completion<InternalError>(ErrorType::NotEnoughMemoryToAllocate, length() + 1);
  17. return {};
  18. }
  19. ThrowCompletionOr<void> ThrowableStringBuilder::append(StringView string)
  20. {
  21. if (try_append(string).is_error())
  22. return m_vm.throw_completion<InternalError>(ErrorType::NotEnoughMemoryToAllocate, length() + string.length());
  23. return {};
  24. }
  25. ThrowCompletionOr<void> ThrowableStringBuilder::append(Utf16View const& string)
  26. {
  27. if (try_append(string).is_error())
  28. return m_vm.throw_completion<InternalError>(ErrorType::NotEnoughMemoryToAllocate, length() + (string.length_in_code_units() * 2));
  29. return {};
  30. }
  31. ThrowCompletionOr<void> ThrowableStringBuilder::append_code_point(u32 value)
  32. {
  33. if (auto result = try_append_code_point(value); result.is_error())
  34. return m_vm.throw_completion<InternalError>(ErrorType::NotEnoughMemoryToAllocate, length() + sizeof(value));
  35. return {};
  36. }
  37. }