mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-17 08:32:54 +00:00
LibJS: Convert set_integrity_level() to ThrowCompletionOr
This commit is contained in:
parent
3be26f56db
commit
ed5a9aa038
Notes:
sideshowbarker
2024-07-18 03:07:03 +09:00
Author: https://github.com/linusg
Commit: ed5a9aa038
Pull-request: https://github.com/SerenityOS/serenity/pull/10327
Reviewed-by: https://github.com/IdanHo ✅
4 changed files with 10 additions and 14 deletions
|
@ -273,7 +273,7 @@ ThrowCompletionOr<bool> Object::has_own_property(PropertyName const& property_na
|
|||
}
|
||||
|
||||
// 7.3.15 SetIntegrityLevel ( O, level ), https://tc39.es/ecma262/#sec-setintegritylevel
|
||||
bool Object::set_integrity_level(IntegrityLevel level)
|
||||
ThrowCompletionOr<bool> Object::set_integrity_level(IntegrityLevel level)
|
||||
{
|
||||
auto& global_object = this->global_object();
|
||||
|
||||
|
@ -283,14 +283,14 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
|||
VERIFY(level == IntegrityLevel::Sealed || level == IntegrityLevel::Frozen);
|
||||
|
||||
// 3. Let status be ? O.[[PreventExtensions]]().
|
||||
auto status = TRY_OR_DISCARD(internal_prevent_extensions());
|
||||
auto status = TRY(internal_prevent_extensions());
|
||||
|
||||
// 4. If status is false, return false.
|
||||
if (!status)
|
||||
return false;
|
||||
|
||||
// 5. Let keys be ? O.[[OwnPropertyKeys]]().
|
||||
auto keys = TRY_OR_DISCARD(internal_own_property_keys());
|
||||
auto keys = TRY(internal_own_property_keys());
|
||||
|
||||
// 6. If level is sealed, then
|
||||
if (level == IntegrityLevel::Sealed) {
|
||||
|
@ -299,7 +299,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
|||
auto property_name = PropertyName::from_value(global_object, key);
|
||||
|
||||
// i. Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
|
||||
TRY_OR_DISCARD(define_property_or_throw(property_name, { .configurable = false }));
|
||||
TRY(define_property_or_throw(property_name, { .configurable = false }));
|
||||
}
|
||||
}
|
||||
// 7. Else,
|
||||
|
@ -311,7 +311,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
|||
auto property_name = PropertyName::from_value(global_object, key);
|
||||
|
||||
// i. Let currentDesc be ? O.[[GetOwnProperty]](k).
|
||||
auto current_descriptor = TRY_OR_DISCARD(internal_get_own_property(property_name));
|
||||
auto current_descriptor = TRY(internal_get_own_property(property_name));
|
||||
|
||||
// ii. If currentDesc is not undefined, then
|
||||
if (!current_descriptor.has_value())
|
||||
|
@ -331,7 +331,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
|||
}
|
||||
|
||||
// 3. Perform ? DefinePropertyOrThrow(O, k, desc).
|
||||
TRY_OR_DISCARD(define_property_or_throw(property_name, descriptor));
|
||||
TRY(define_property_or_throw(property_name, descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ public:
|
|||
ThrowCompletionOr<bool> delete_property_or_throw(PropertyName const&);
|
||||
ThrowCompletionOr<bool> has_property(PropertyName const&) const;
|
||||
ThrowCompletionOr<bool> has_own_property(PropertyName const&) const;
|
||||
bool set_integrity_level(IntegrityLevel);
|
||||
ThrowCompletionOr<bool> set_integrity_level(IntegrityLevel);
|
||||
bool test_integrity_level(IntegrityLevel) const;
|
||||
MarkedValueList enumerable_own_property_names(PropertyKind kind) const;
|
||||
ThrowCompletionOr<Object*> copy_data_properties(Value source, HashTable<PropertyName, PropertyNameTraits> const& seen_names, GlobalObject& global_object);
|
||||
|
|
|
@ -221,9 +221,7 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectConstructor::freeze)
|
|||
auto argument = vm.argument(0);
|
||||
if (!argument.is_object())
|
||||
return argument;
|
||||
auto status = argument.as_object().set_integrity_level(Object::IntegrityLevel::Frozen);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto status = TRY_OR_DISCARD(argument.as_object().set_integrity_level(Object::IntegrityLevel::Frozen));
|
||||
if (!status) {
|
||||
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectFreezeFailed);
|
||||
return {};
|
||||
|
@ -272,9 +270,7 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectConstructor::seal)
|
|||
auto argument = vm.argument(0);
|
||||
if (!argument.is_object())
|
||||
return argument;
|
||||
auto status = argument.as_object().set_integrity_level(Object::IntegrityLevel::Sealed);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto status = TRY_OR_DISCARD(argument.as_object().set_integrity_level(Object::IntegrityLevel::Sealed));
|
||||
if (!status) {
|
||||
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectSealFailed);
|
||||
return {};
|
||||
|
|
|
@ -54,7 +54,7 @@ void WebAssemblyInstanceObject::initialize(JS::GlobalObject& global_object)
|
|||
});
|
||||
}
|
||||
|
||||
m_exports_object->set_integrity_level(IntegrityLevel::Frozen);
|
||||
MUST(m_exports_object->set_integrity_level(IntegrityLevel::Frozen));
|
||||
}
|
||||
|
||||
void WebAssemblyInstanceObject::visit_edges(Visitor& visitor)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue