mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-17 16:42: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
|
// 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();
|
auto& global_object = this->global_object();
|
||||||
|
|
||||||
|
@ -283,14 +283,14 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
||||||
VERIFY(level == IntegrityLevel::Sealed || level == IntegrityLevel::Frozen);
|
VERIFY(level == IntegrityLevel::Sealed || level == IntegrityLevel::Frozen);
|
||||||
|
|
||||||
// 3. Let status be ? O.[[PreventExtensions]]().
|
// 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.
|
// 4. If status is false, return false.
|
||||||
if (!status)
|
if (!status)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 5. Let keys be ? O.[[OwnPropertyKeys]]().
|
// 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
|
// 6. If level is sealed, then
|
||||||
if (level == IntegrityLevel::Sealed) {
|
if (level == IntegrityLevel::Sealed) {
|
||||||
|
@ -299,7 +299,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
||||||
auto property_name = PropertyName::from_value(global_object, key);
|
auto property_name = PropertyName::from_value(global_object, key);
|
||||||
|
|
||||||
// i. Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
|
// 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,
|
// 7. Else,
|
||||||
|
@ -311,7 +311,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
||||||
auto property_name = PropertyName::from_value(global_object, key);
|
auto property_name = PropertyName::from_value(global_object, key);
|
||||||
|
|
||||||
// i. Let currentDesc be ? O.[[GetOwnProperty]](k).
|
// 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
|
// ii. If currentDesc is not undefined, then
|
||||||
if (!current_descriptor.has_value())
|
if (!current_descriptor.has_value())
|
||||||
|
@ -331,7 +331,7 @@ bool Object::set_integrity_level(IntegrityLevel level)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Perform ? DefinePropertyOrThrow(O, k, desc).
|
// 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> delete_property_or_throw(PropertyName const&);
|
||||||
ThrowCompletionOr<bool> has_property(PropertyName const&) const;
|
ThrowCompletionOr<bool> has_property(PropertyName const&) const;
|
||||||
ThrowCompletionOr<bool> has_own_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;
|
bool test_integrity_level(IntegrityLevel) const;
|
||||||
MarkedValueList enumerable_own_property_names(PropertyKind kind) 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);
|
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);
|
auto argument = vm.argument(0);
|
||||||
if (!argument.is_object())
|
if (!argument.is_object())
|
||||||
return argument;
|
return argument;
|
||||||
auto status = argument.as_object().set_integrity_level(Object::IntegrityLevel::Frozen);
|
auto status = TRY_OR_DISCARD(argument.as_object().set_integrity_level(Object::IntegrityLevel::Frozen));
|
||||||
if (vm.exception())
|
|
||||||
return {};
|
|
||||||
if (!status) {
|
if (!status) {
|
||||||
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectFreezeFailed);
|
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectFreezeFailed);
|
||||||
return {};
|
return {};
|
||||||
|
@ -272,9 +270,7 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectConstructor::seal)
|
||||||
auto argument = vm.argument(0);
|
auto argument = vm.argument(0);
|
||||||
if (!argument.is_object())
|
if (!argument.is_object())
|
||||||
return argument;
|
return argument;
|
||||||
auto status = argument.as_object().set_integrity_level(Object::IntegrityLevel::Sealed);
|
auto status = TRY_OR_DISCARD(argument.as_object().set_integrity_level(Object::IntegrityLevel::Sealed));
|
||||||
if (vm.exception())
|
|
||||||
return {};
|
|
||||||
if (!status) {
|
if (!status) {
|
||||||
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectSealFailed);
|
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectSealFailed);
|
||||||
return {};
|
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)
|
void WebAssemblyInstanceObject::visit_edges(Visitor& visitor)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue