/* * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace JS { ThrowableStringBuilder::ThrowableStringBuilder(VM& vm) : m_vm(vm) { } ThrowCompletionOr ThrowableStringBuilder::append(char ch) { if (try_append(ch).is_error()) return m_vm.throw_completion(ErrorType::NotEnoughMemoryToAllocate, length() + 1); return {}; } ThrowCompletionOr ThrowableStringBuilder::append(StringView string) { if (try_append(string).is_error()) return m_vm.throw_completion(ErrorType::NotEnoughMemoryToAllocate, length() + string.length()); return {}; } ThrowCompletionOr ThrowableStringBuilder::append(Utf16View const& string) { if (try_append(string).is_error()) return m_vm.throw_completion(ErrorType::NotEnoughMemoryToAllocate, length() + (string.length_in_code_units() * 2)); return {}; } ThrowCompletionOr ThrowableStringBuilder::append_code_point(u32 value) { if (auto result = try_append_code_point(value); result.is_error()) return m_vm.throw_completion(ErrorType::NotEnoughMemoryToAllocate, length() + sizeof(value)); return {}; } ThrowCompletionOr ThrowableStringBuilder::to_string() const { auto result = StringBuilder::to_string(); if (result.is_error()) return m_vm.throw_completion(ErrorType::NotEnoughMemoryToAllocate, length()); return result.release_value(); } }