diff --git a/Userland/Libraries/LibJS/Runtime/StringConstructor.cpp b/Userland/Libraries/LibJS/Runtime/StringConstructor.cpp index a633074abe..5391e1c552 100644 --- a/Userland/Libraries/LibJS/Runtime/StringConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/StringConstructor.cpp @@ -63,7 +63,7 @@ ThrowCompletionOr> StringConstructor::construct(FunctionObj else primitive_string = TRY(vm.argument(0).to_primitive_string(vm)); auto* prototype = TRY(get_prototype_from_constructor(vm, new_target, &Intrinsics::string_prototype)); - return StringObject::create(realm, *primitive_string, *prototype); + return MUST_OR_THROW_OOM(StringObject::create(realm, *primitive_string, *prototype)); } // 22.1.2.4 String.raw ( template, ...substitutions ), https://tc39.es/ecma262/#sec-string.raw diff --git a/Userland/Libraries/LibJS/Runtime/StringObject.cpp b/Userland/Libraries/LibJS/Runtime/StringObject.cpp index 9205d6b679..e6e12a1a85 100644 --- a/Userland/Libraries/LibJS/Runtime/StringObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/StringObject.cpp @@ -15,9 +15,9 @@ namespace JS { // 10.4.3.4 StringCreate ( value, prototype ), https://tc39.es/ecma262/#sec-stringcreate -NonnullGCPtr StringObject::create(Realm& realm, PrimitiveString& primitive_string, Object& prototype) +ThrowCompletionOr> StringObject::create(Realm& realm, PrimitiveString& primitive_string, Object& prototype) { - return realm.heap().allocate(realm, primitive_string, prototype).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, primitive_string, prototype)); } StringObject::StringObject(PrimitiveString& string, Object& prototype) @@ -31,8 +31,7 @@ ThrowCompletionOr StringObject::initialize(Realm& realm) auto& vm = this->vm(); MUST_OR_THROW_OOM(Base::initialize(realm)); - // FIXME: Propagate this error. - define_direct_property(vm.names.length, Value(MUST(m_string.utf16_string_view()).length_in_code_units()), 0); + define_direct_property(vm.names.length, Value(MUST_OR_THROW_OOM(m_string.utf16_string_view()).length_in_code_units()), 0); return {}; } diff --git a/Userland/Libraries/LibJS/Runtime/StringObject.h b/Userland/Libraries/LibJS/Runtime/StringObject.h index 8c65cc61e1..a31e629ff4 100644 --- a/Userland/Libraries/LibJS/Runtime/StringObject.h +++ b/Userland/Libraries/LibJS/Runtime/StringObject.h @@ -14,7 +14,7 @@ class StringObject : public Object { JS_OBJECT(StringObject, Object); public: - static NonnullGCPtr create(Realm&, PrimitiveString&, Object& prototype); + static ThrowCompletionOr> create(Realm&, PrimitiveString&, Object& prototype); virtual ThrowCompletionOr initialize(Realm&) override; virtual ~StringObject() override = default; diff --git a/Userland/Libraries/LibJS/Runtime/Value.cpp b/Userland/Libraries/LibJS/Runtime/Value.cpp index bd8ec378c4..2ded93f26a 100644 --- a/Userland/Libraries/LibJS/Runtime/Value.cpp +++ b/Userland/Libraries/LibJS/Runtime/Value.cpp @@ -566,7 +566,7 @@ ThrowCompletionOr Value::to_object(VM& vm) const // String case STRING_TAG: // Return a new String object whose [[StringData]] internal slot is set to argument. See 22.1 for a description of String objects. - return StringObject::create(realm, const_cast(as_string()), *realm.intrinsics().string_prototype()).ptr(); + return MUST_OR_THROW_OOM(StringObject::create(realm, const_cast(as_string()), *realm.intrinsics().string_prototype())).ptr(); // Symbol case SYMBOL_TAG: // Return a new Symbol object whose [[SymbolData]] internal slot is set to argument. See 20.4 for a description of Symbol objects.