mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:47:44 +00:00
LibJS: Convert Object::get() to ThrowCompletionOr
To no one's surprise, this patch is pretty big - this is possibly the most used AO of all of them. Definitely worth it though.
This commit is contained in:
parent
9b6c09e2c4
commit
b7e5f08e56
61 changed files with 326 additions and 686 deletions
|
@ -36,8 +36,8 @@ JS::Value WebAssemblyMemoryConstructor::construct(FunctionObject&)
|
|||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto initial_value = descriptor->get_without_side_effects("initial");
|
||||
auto maximum_value = descriptor->get_without_side_effects("maximum");
|
||||
auto initial_value = TRY_OR_DISCARD(descriptor->get("initial"));
|
||||
auto maximum_value = TRY_OR_DISCARD(descriptor->get("maximum"));
|
||||
|
||||
if (initial_value.is_empty()) {
|
||||
vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotAnObjectOfType, "Number");
|
||||
|
|
|
@ -164,16 +164,18 @@ Result<size_t, JS::Value> WebAssemblyObject::instantiate_module(Wasm::Module con
|
|||
dbgln("Trying to resolve stuff because import object was specified");
|
||||
for (const Wasm::Linker::Name& import_name : linker.unresolved_imports()) {
|
||||
dbgln("Trying to resolve {}::{}", import_name.module, import_name.name);
|
||||
auto value = import_object->get(import_name.module);
|
||||
if (vm.exception())
|
||||
auto value_or_error = import_object->get(import_name.module);
|
||||
if (value_or_error.is_error())
|
||||
break;
|
||||
auto value = value_or_error.release_value();
|
||||
auto object = value.to_object(global_object);
|
||||
if (vm.exception())
|
||||
break;
|
||||
|
||||
auto import_ = object->get(import_name.name);
|
||||
if (vm.exception())
|
||||
auto import_or_error = object->get(import_name.name);
|
||||
if (import_or_error.is_error())
|
||||
break;
|
||||
auto import_ = import_or_error.release_value();
|
||||
import_name.type.visit(
|
||||
[&](Wasm::TypeIndex index) {
|
||||
dbgln("Trying to resolve a function {}::{}, type index {}", import_name.module, import_name.name, index.value());
|
||||
|
|
|
@ -38,9 +38,7 @@ JS::Value WebAssemblyTableConstructor::construct(FunctionObject&)
|
|||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto element_value = descriptor->get("element");
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto element_value = TRY_OR_DISCARD(descriptor->get("element"));
|
||||
if (!element_value.is_string()) {
|
||||
vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::InvalidHint, element_value.to_string_without_side_effects());
|
||||
return {};
|
||||
|
@ -58,12 +56,8 @@ JS::Value WebAssemblyTableConstructor::construct(FunctionObject&)
|
|||
return {};
|
||||
}
|
||||
|
||||
auto initial_value = descriptor->get("initial");
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto maximum_value = descriptor->get("maximum");
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto initial_value = TRY_OR_DISCARD(descriptor->get("initial"));
|
||||
auto maximum_value = TRY_OR_DISCARD(descriptor->get("maximum"));
|
||||
|
||||
auto initial = initial_value.to_u32(global_object);
|
||||
if (vm.exception())
|
||||
|
@ -82,12 +76,9 @@ JS::Value WebAssemblyTableConstructor::construct(FunctionObject&)
|
|||
return {};
|
||||
}
|
||||
|
||||
auto value_value = descriptor->get("value");
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto value_value = TRY_OR_DISCARD(descriptor->get("value"));
|
||||
auto reference_value = [&]() -> Optional<Wasm::Value> {
|
||||
if (value_value.is_empty() || value_value.is_undefined())
|
||||
if (value_value.is_undefined())
|
||||
return Wasm::Value(*reference_type, 0ull);
|
||||
|
||||
return to_webassembly_value(value_value, *reference_type, global_object);
|
||||
|
|
|
@ -38,7 +38,7 @@ JS_DEFINE_NATIVE_FUNCTION(WebAssemblyTablePrototype::grow)
|
|||
auto initial_size = table->elements().size();
|
||||
auto value_value = vm.argument(1);
|
||||
auto reference_value = [&]() -> Optional<Wasm::Value> {
|
||||
if (value_value.is_empty() || value_value.is_undefined())
|
||||
if (value_value.is_undefined())
|
||||
return Wasm::Value(table->type().element_type(), 0ull);
|
||||
|
||||
return to_webassembly_value(value_value, table->type().element_type(), global_object);
|
||||
|
@ -111,7 +111,7 @@ JS_DEFINE_NATIVE_FUNCTION(WebAssemblyTablePrototype::set)
|
|||
|
||||
auto value_value = vm.argument(1);
|
||||
auto reference_value = [&]() -> Optional<Wasm::Value> {
|
||||
if (value_value.is_empty() || value_value.is_undefined())
|
||||
if (value_value.is_undefined())
|
||||
return Wasm::Value(table->type().element_type(), 0ull);
|
||||
|
||||
return to_webassembly_value(value_value, table->type().element_type(), global_object);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue