1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 15:17:36 +00:00

LibJS+Everywhere: Allow Cell::initialize overrides to throw OOM errors

Note that as of this commit, there aren't any such throwers, and the
call site in Heap::allocate will drop exceptions on the floor. This
commit only serves to change the declaration of the overrides, make sure
they return an empty value, and to propagate OOM errors frm their base
initialize invocations.
This commit is contained in:
Timothy Flynn 2023-01-28 12:33:35 -05:00 committed by Linus Groh
parent 1c1b902a6a
commit 2692db8699
694 changed files with 1774 additions and 1065 deletions

View file

@ -24,9 +24,9 @@ $262Object::$262Object(Realm& realm)
{
}
void $262Object::initialize(Realm& realm)
ThrowCompletionOr<void> $262Object::initialize(Realm& realm)
{
Base::initialize(realm);
MUST_OR_THROW_OOM(Base::initialize(realm));
m_agent = vm().heap().allocate<AgentObject>(realm, realm);
m_is_htmldda = vm().heap().allocate<IsHTMLDDA>(realm, realm);
@ -41,6 +41,8 @@ void $262Object::initialize(Realm& realm)
define_direct_property("gc", realm.global_object().get_without_side_effects("gc"), attr);
define_direct_property("global", &realm.global_object(), attr);
define_direct_property("IsHTMLDDA", m_is_htmldda, attr);
return {};
}
void $262Object::visit_edges(Cell::Visitor& visitor)

View file

@ -17,7 +17,7 @@ class $262Object final : public Object {
JS_OBJECT($262Object, Object);
public:
virtual void initialize(JS::Realm&) override;
virtual ThrowCompletionOr<void> initialize(Realm&) override;
virtual ~$262Object() override = default;
private:

View file

@ -17,9 +17,9 @@ AgentObject::AgentObject(Realm& realm)
{
}
void AgentObject::initialize(JS::Realm& realm)
JS::ThrowCompletionOr<void> AgentObject::initialize(JS::Realm& realm)
{
Base::initialize(realm);
MUST_OR_THROW_OOM(Base::initialize(realm));
u8 attr = Attribute::Writable | Attribute::Configurable;
define_native_function(realm, "monotonicNow", monotonic_now, 0, attr);
@ -27,6 +27,8 @@ void AgentObject::initialize(JS::Realm& realm)
// TODO: broadcast
// TODO: getReport
// TODO: start
return {};
}
JS_DEFINE_NATIVE_FUNCTION(AgentObject::monotonic_now)

View file

@ -15,7 +15,7 @@ class AgentObject final : public Object {
JS_OBJECT(AgentObject, Object);
public:
virtual void initialize(JS::Realm&) override;
virtual JS::ThrowCompletionOr<void> initialize(Realm&) override;
virtual ~AgentObject() override = default;
private:

View file

@ -14,9 +14,9 @@
namespace JS::Test262 {
void GlobalObject::initialize(Realm& realm)
ThrowCompletionOr<void> GlobalObject::initialize(Realm& realm)
{
Base::initialize(realm);
MUST_OR_THROW_OOM(Base::initialize(realm));
m_$262 = vm().heap().allocate<$262Object>(realm, realm);
@ -24,6 +24,8 @@ void GlobalObject::initialize(Realm& realm)
u8 attr = Attribute::Writable | Attribute::Configurable;
define_native_function(realm, "print", print, 1, attr);
define_direct_property("$262", m_$262, attr);
return {};
}
void GlobalObject::visit_edges(Cell::Visitor& visitor)

View file

@ -15,7 +15,7 @@ class GlobalObject final : public JS::GlobalObject {
JS_OBJECT(GlobalObject, JS::GlobalObject);
public:
virtual void initialize(Realm&) override;
virtual ThrowCompletionOr<void> initialize(Realm&) override;
virtual ~GlobalObject() override = default;
$262Object* $262() const { return m_$262; }