mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 04:37:34 +00:00
LibJS: Make Heap::allocate<T>() infallible
Stop worrying about tiny OOMs. Work towards #20449. While going through these, I also changed the function signature in many places where returning ThrowCompletionOr<T> is no longer necessary.
This commit is contained in:
parent
980e7164fe
commit
72c9f56c66
337 changed files with 1229 additions and 1251 deletions
|
@ -28,7 +28,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Instance>> Instance::construct_impl(JS::Rea
|
|||
auto& vm = realm.vm();
|
||||
|
||||
auto index = TRY(Detail::instantiate_module(vm, module.module()));
|
||||
return MUST_OR_THROW_OOM(vm.heap().allocate<Instance>(realm, realm, index));
|
||||
return vm.heap().allocate<Instance>(realm, realm, index);
|
||||
}
|
||||
|
||||
Instance::Instance(JS::Realm& realm, size_t index)
|
||||
|
@ -62,7 +62,7 @@ void Instance::initialize(JS::Realm& realm)
|
|||
[&](Wasm::MemoryAddress const& address) {
|
||||
Optional<JS::GCPtr<Memory>> object = cache.memory_instances.get(address);
|
||||
if (!object.has_value()) {
|
||||
object = MUST(heap().allocate<Memory>(realm, realm, address));
|
||||
object = heap().allocate<Memory>(realm, realm, address);
|
||||
cache.memory_instances.set(address, *object);
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ void Instance::initialize(JS::Realm& realm)
|
|||
[&](Wasm::TableAddress const& address) {
|
||||
Optional<JS::GCPtr<Table>> object = cache.table_instances.get(address);
|
||||
if (!object.has_value()) {
|
||||
object = MUST(heap().allocate<Table>(realm, realm, address));
|
||||
object = heap().allocate<Table>(realm, realm, address);
|
||||
cache.table_instances.set(address, *object);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Memory>> Memory::construct_impl(JS::Realm&
|
|||
if (!address.has_value())
|
||||
return vm.throw_completion<JS::TypeError>("Wasm Memory allocation failed"sv);
|
||||
|
||||
auto memory_object = MUST_OR_THROW_OOM(vm.heap().allocate<Memory>(realm, realm, *address));
|
||||
auto memory_object = vm.heap().allocate<Memory>(realm, realm, *address);
|
||||
Detail::s_abstract_machine.store().get(*address)->successful_grow_hook = [memory_object] {
|
||||
MUST(memory_object->reset_the_memory_buffer());
|
||||
};
|
||||
|
|
|
@ -19,7 +19,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Module>> Module::construct_impl(JS::Realm&
|
|||
auto& vm = realm.vm();
|
||||
|
||||
auto index = TRY(Detail::parse_module(vm, bytes.cell()));
|
||||
return MUST_OR_THROW_OOM(vm.heap().allocate<Module>(realm, realm, index));
|
||||
return vm.heap().allocate<Module>(realm, realm, index);
|
||||
}
|
||||
|
||||
Module::Module(JS::Realm& realm, size_t index)
|
||||
|
|
|
@ -52,7 +52,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Table>> Table::construct_impl(JS::Realm& re
|
|||
for (auto& element : table.elements())
|
||||
element = reference;
|
||||
|
||||
return MUST_OR_THROW_OOM(vm.heap().allocate<Table>(realm, realm, *address));
|
||||
return vm.heap().allocate<Table>(realm, realm, *address);
|
||||
}
|
||||
|
||||
Table::Table(JS::Realm& realm, Wasm::TableAddress address)
|
||||
|
|
|
@ -88,7 +88,7 @@ WebIDL::ExceptionOr<JS::Value> compile(JS::VM& vm, JS::Handle<JS::Object>& bytes
|
|||
if (module.is_error()) {
|
||||
promise->reject(*module.release_error().value());
|
||||
} else {
|
||||
auto module_object = MUST_OR_THROW_OOM(vm.heap().allocate<Module>(realm, realm, module.release_value()));
|
||||
auto module_object = vm.heap().allocate<Module>(realm, realm, module.release_value());
|
||||
promise->fulfill(module_object);
|
||||
}
|
||||
|
||||
|
@ -118,8 +118,8 @@ WebIDL::ExceptionOr<JS::Value> instantiate(JS::VM& vm, JS::Handle<JS::Object>& b
|
|||
if (result.is_error()) {
|
||||
promise->reject(*result.release_error().value());
|
||||
} else {
|
||||
auto module_object = MUST_OR_THROW_OOM(vm.heap().allocate<Module>(realm, realm, Detail::s_compiled_modules.size() - 1));
|
||||
auto instance_object = MUST_OR_THROW_OOM(vm.heap().allocate<Instance>(realm, realm, result.release_value()));
|
||||
auto module_object = vm.heap().allocate<Module>(realm, realm, Detail::s_compiled_modules.size() - 1);
|
||||
auto instance_object = vm.heap().allocate<Instance>(realm, realm, result.release_value());
|
||||
|
||||
auto object = JS::Object::create(realm, nullptr);
|
||||
object->define_direct_property("module", module_object, JS::default_attributes);
|
||||
|
@ -145,7 +145,7 @@ WebIDL::ExceptionOr<JS::Value> instantiate(JS::VM& vm, Module const& module_obje
|
|||
if (result.is_error()) {
|
||||
promise->reject(*result.release_error().value());
|
||||
} else {
|
||||
auto instance_object = MUST_OR_THROW_OOM(vm.heap().allocate<Instance>(realm, realm, result.release_value()));
|
||||
auto instance_object = vm.heap().allocate<Instance>(realm, realm, result.release_value());
|
||||
promise->fulfill(instance_object);
|
||||
}
|
||||
|
||||
|
@ -426,7 +426,7 @@ JS::Value to_js_value(JS::VM& vm, Wasm::Value& wasm_value)
|
|||
auto& realm = *vm.current_realm();
|
||||
switch (wasm_value.type().kind()) {
|
||||
case Wasm::ValueType::I64:
|
||||
return realm.heap().allocate<JS::BigInt>(realm, ::Crypto::SignedBigInteger { wasm_value.to<i64>().value() }).release_allocated_value_but_fixme_should_propagate_errors();
|
||||
return realm.heap().allocate<JS::BigInt>(realm, ::Crypto::SignedBigInteger { wasm_value.to<i64>().value() });
|
||||
case Wasm::ValueType::I32:
|
||||
return JS::Value(wasm_value.to<i32>().value());
|
||||
case Wasm::ValueType::F64:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue