LibJS: Convert length_of_array_like to ThrowCompletionOr
This commit is contained in:
parent
02a88c5063
commit
e90e4ac1e2
Notes:
sideshowbarker
2024-07-18 03:34:36 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/e90e4ac1e25 Pull-request: https://github.com/SerenityOS/serenity/pull/10169 Reviewed-by: https://github.com/linusg ✅
11 changed files with 55 additions and 126 deletions
|
@ -42,13 +42,16 @@ ThrowCompletionOr<Value> require_object_coercible(GlobalObject& global_object, V
|
|||
}
|
||||
|
||||
// 7.3.18 LengthOfArrayLike ( obj ), https://tc39.es/ecma262/#sec-lengthofarraylike
|
||||
size_t length_of_array_like(GlobalObject& global_object, Object const& object)
|
||||
ThrowCompletionOr<size_t> length_of_array_like(GlobalObject& global_object, Object const& object)
|
||||
{
|
||||
auto& vm = global_object.vm();
|
||||
auto result = object.get(vm.names.length);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
return result.to_length(global_object);
|
||||
if (auto* exception = vm.exception())
|
||||
return throw_completion(exception->value());
|
||||
auto length = result.to_length(global_object);
|
||||
if (auto* exception = vm.exception())
|
||||
return throw_completion(exception->value());
|
||||
return length;
|
||||
}
|
||||
|
||||
// 7.3.19 CreateListFromArrayLike ( obj [ , elementTypes ] ), https://tc39.es/ecma262/#sec-createlistfromarraylike
|
||||
|
@ -66,9 +69,7 @@ ThrowCompletionOr<MarkedValueList> create_list_from_array_like(GlobalObject& glo
|
|||
auto& array_like = value.as_object();
|
||||
|
||||
// 3. Let len be ? LengthOfArrayLike(obj).
|
||||
auto length = length_of_array_like(global_object, array_like);
|
||||
if (auto* exception = vm.exception())
|
||||
return throw_completion(exception->value());
|
||||
auto length = TRY(length_of_array_like(global_object, array_like));
|
||||
|
||||
// 4. Let list be a new empty List.
|
||||
auto list = MarkedValueList { heap };
|
||||
|
|
|
@ -20,7 +20,7 @@ Environment& get_this_environment(VM&);
|
|||
Object* get_super_constructor(VM&);
|
||||
ThrowCompletionOr<Reference> make_super_property_reference(GlobalObject&, Value actual_this, StringOrSymbol const& property_key, bool strict);
|
||||
ThrowCompletionOr<Value> require_object_coercible(GlobalObject&, Value);
|
||||
size_t length_of_array_like(GlobalObject&, Object const&);
|
||||
ThrowCompletionOr<size_t> length_of_array_like(GlobalObject&, Object const&);
|
||||
ThrowCompletionOr<MarkedValueList> create_list_from_array_like(GlobalObject&, Value, Function<ThrowCompletionOr<void>(Value)> = {});
|
||||
ThrowCompletionOr<FunctionObject*> species_constructor(GlobalObject&, Object const&, FunctionObject& default_constructor);
|
||||
ThrowCompletionOr<Realm*> get_function_realm(GlobalObject&, FunctionObject const&);
|
||||
|
|
|
@ -172,9 +172,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayConstructor::from)
|
|||
|
||||
auto* array_like = items.to_object(global_object);
|
||||
|
||||
auto length = length_of_array_like(global_object, *array_like);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *array_like));
|
||||
|
||||
Value array;
|
||||
if (constructor.is_constructor()) {
|
||||
|
|
|
@ -63,9 +63,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayIteratorPrototype::next)
|
|||
|
||||
length = typed_array.array_length();
|
||||
} else {
|
||||
length = length_of_array_like(global_object, array);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
length = TRY_OR_DISCARD(length_of_array_like(global_object, array));
|
||||
}
|
||||
|
||||
if (index >= length) {
|
||||
|
|
|
@ -171,9 +171,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::filter)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -243,9 +241,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::for_each)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -296,9 +292,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::map)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -353,9 +347,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::push)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
auto argument_count = vm.argument_count();
|
||||
auto new_length = length + argument_count;
|
||||
if (new_length > MAX_ARRAY_LIKE_INDEX) {
|
||||
|
@ -380,9 +372,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::unshift)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
auto arg_count = vm.argument_count();
|
||||
size_t new_length = length + arg_count;
|
||||
if (arg_count > 0) {
|
||||
|
@ -431,9 +421,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::pop)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
if (length == 0) {
|
||||
this_object->set(vm.names.length, Value(0), Object::ShouldThrowExceptions::Yes);
|
||||
return js_undefined();
|
||||
|
@ -457,9 +445,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::shift)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
if (length == 0) {
|
||||
this_object->set(vm.names.length, Value(0), Object::ShouldThrowExceptions::Yes);
|
||||
if (vm.exception())
|
||||
|
@ -528,9 +514,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::to_locale_string)
|
|||
s_array_join_seen_objects.remove(this_object);
|
||||
};
|
||||
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
String separator = ","; // NOTE: This is implementation-specific.
|
||||
StringBuilder builder;
|
||||
|
@ -570,9 +554,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::join)
|
|||
s_array_join_seen_objects.remove(this_object);
|
||||
};
|
||||
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
String separator = ",";
|
||||
if (!vm.argument(0).is_undefined()) {
|
||||
separator = vm.argument(0).to_string(global_object);
|
||||
|
@ -637,9 +619,10 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::concat)
|
|||
VERIFY(arg.is_object());
|
||||
Object& obj = arg.as_object();
|
||||
size_t k = 0;
|
||||
auto length = length_of_array_like(global_object, obj);
|
||||
if (vm.exception())
|
||||
auto length_or_error = length_of_array_like(global_object, obj);
|
||||
if (length_or_error.is_error())
|
||||
return;
|
||||
auto length = length_or_error.release_value();
|
||||
|
||||
if (n + length > MAX_ARRAY_LIKE_INDEX) {
|
||||
vm.throw_exception<TypeError>(global_object, ErrorType::ArrayMaxSize);
|
||||
|
@ -696,9 +679,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::slice)
|
|||
if (!this_object)
|
||||
return {};
|
||||
|
||||
auto initial_length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto initial_length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
auto relative_start = vm.argument(0).to_integer_or_infinity(global_object);
|
||||
if (vm.exception())
|
||||
|
@ -779,9 +760,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::index_of)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If len is 0, return -1𝔽.
|
||||
if (length == 0)
|
||||
|
@ -861,9 +840,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::reduce)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -961,9 +938,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::reduce_right)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -1057,9 +1032,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::reverse)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
auto middle = length / 2;
|
||||
for (size_t lower = 0; lower < middle; ++lower) {
|
||||
|
@ -1233,9 +1206,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::sort)
|
|||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
MarkedValueList items(vm.heap());
|
||||
for (size_t k = 0; k < length; ++k) {
|
||||
|
@ -1291,9 +1262,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::last_index_of)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If len is 0, return -1𝔽.
|
||||
if (length == 0)
|
||||
|
@ -1364,9 +1333,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::includes)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
if (length == 0)
|
||||
return Value(false);
|
||||
u64 from_index = 0;
|
||||
|
@ -1408,9 +1375,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::find)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
||||
if (!predicate.is_function()) {
|
||||
|
@ -1457,9 +1422,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::find_index)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
||||
if (!predicate.is_function()) {
|
||||
|
@ -1506,9 +1469,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::find_last)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
||||
if (!predicate.is_function()) {
|
||||
|
@ -1555,9 +1516,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::find_last_index)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
||||
if (!predicate.is_function()) {
|
||||
|
@ -1604,9 +1563,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::some)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -1661,9 +1618,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::every)
|
|||
return {};
|
||||
|
||||
// 2. Let len be ? LengthOfArrayLike(O).
|
||||
auto length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If IsCallable(callbackfn) is false, throw a TypeError exception.
|
||||
if (!callback_function.is_function()) {
|
||||
|
@ -1713,9 +1668,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::splice)
|
|||
if (!this_object)
|
||||
return {};
|
||||
|
||||
auto initial_length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto initial_length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
auto relative_start = vm.argument(0).to_integer_or_infinity(global_object);
|
||||
if (vm.exception())
|
||||
|
@ -1846,9 +1799,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::fill)
|
|||
if (!this_object)
|
||||
return {};
|
||||
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
double relative_start = 0;
|
||||
double relative_end = length;
|
||||
|
@ -1950,9 +1901,7 @@ static size_t flatten_into_array(GlobalObject& global_object, Object& new_array,
|
|||
return {};
|
||||
}
|
||||
|
||||
auto length = length_of_array_like(global_object, value.as_object());
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, value.as_object()));
|
||||
target_index = flatten_into_array(global_object, new_array, value.as_object(), length, target_index, depth - 1);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
@ -1980,9 +1929,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::flat)
|
|||
if (!this_object)
|
||||
return {};
|
||||
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
double depth = 1;
|
||||
if (!vm.argument(0).is_undefined()) {
|
||||
|
@ -2014,9 +1961,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::flat_map)
|
|||
return {};
|
||||
|
||||
// 2. Let sourceLen be ? LengthOfArrayLike(O).
|
||||
auto source_length = length_of_array_like(global_object, *object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto source_length = TRY_OR_DISCARD(length_of_array_like(global_object, *object));
|
||||
|
||||
// 3. If ! IsCallable(mapperFunction) is false, throw a TypeError exception.
|
||||
if (!mapper_function.is_function()) {
|
||||
|
@ -2044,9 +1989,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::copy_within)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
|
||||
auto relative_target = vm.argument(0).to_integer_or_infinity(global_object);
|
||||
if (vm.exception())
|
||||
|
@ -2128,9 +2071,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::at)
|
|||
auto* this_object = vm.this_value(global_object).to_object(global_object);
|
||||
if (!this_object)
|
||||
return {};
|
||||
auto length = length_of_array_like(global_object, *this_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *this_object));
|
||||
auto relative_index = vm.argument(0).to_integer_or_infinity(global_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
|
|
@ -59,9 +59,7 @@ String JSONObject::stringify_impl(GlobalObject& global_object, Value value, Valu
|
|||
return {};
|
||||
if (is_array) {
|
||||
auto& replacer_object = replacer.as_object();
|
||||
auto replacer_length = length_of_array_like(global_object, replacer_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto replacer_length = TRY_OR_DISCARD(length_of_array_like(global_object, replacer_object));
|
||||
Vector<String> list;
|
||||
for (size_t i = 0; i < replacer_length; ++i) {
|
||||
auto replacer_value = replacer_object.get(i);
|
||||
|
@ -313,9 +311,7 @@ String JSONObject::serialize_json_array(GlobalObject& global_object, StringifySt
|
|||
state.indent = String::formatted("{}{}", state.indent, state.gap);
|
||||
Vector<String> property_strings;
|
||||
|
||||
auto length = length_of_array_like(global_object, object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, object));
|
||||
|
||||
// Optimization
|
||||
property_strings.ensure_capacity(length);
|
||||
|
@ -499,9 +495,7 @@ Value JSONObject::internalize_json_property(GlobalObject& global_object, Object*
|
|||
};
|
||||
|
||||
if (is_array) {
|
||||
auto length = length_of_array_like(global_object, value_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, value_object));
|
||||
for (size_t i = 0; i < length; ++i) {
|
||||
process_property(i);
|
||||
if (vm.exception())
|
||||
|
|
|
@ -629,7 +629,7 @@ JS_DEFINE_NATIVE_FUNCTION(RegExpPrototype::symbol_replace)
|
|||
|
||||
for (auto& result_value : results) {
|
||||
auto& result = result_value.as_object();
|
||||
size_t result_length = length_of_array_like(global_object, result);
|
||||
size_t result_length = TRY_OR_DISCARD(length_of_array_like(global_object, result));
|
||||
size_t n_captures = result_length == 0 ? 0 : result_length - 1;
|
||||
|
||||
auto matched_value = result.get(0);
|
||||
|
@ -864,7 +864,7 @@ JS_DEFINE_NATIVE_FUNCTION(RegExpPrototype::symbol_split)
|
|||
auto* result_object = result.to_object(global_object);
|
||||
if (!result_object)
|
||||
return {};
|
||||
auto number_of_captures = length_of_array_like(global_object, *result_object);
|
||||
auto number_of_captures = TRY_OR_DISCARD(length_of_array_like(global_object, *result_object));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
if (number_of_captures > 0)
|
||||
|
|
|
@ -86,7 +86,7 @@ JS_DEFINE_NATIVE_FUNCTION(StringConstructor::raw)
|
|||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto literal_segments = length_of_array_like(global_object, *raw);
|
||||
auto literal_segments = TRY_OR_DISCARD(length_of_array_like(global_object, *raw));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
|
|
|
@ -165,9 +165,10 @@ template<typename T>
|
|||
static void initialize_typed_array_from_array_like(GlobalObject& global_object, TypedArray<T>& typed_array, const Object& array_like)
|
||||
{
|
||||
auto& vm = global_object.vm();
|
||||
auto length = length_of_array_like(global_object, array_like);
|
||||
if (vm.exception())
|
||||
auto length_or_error = length_of_array_like(global_object, array_like);
|
||||
if (length_or_error.is_error())
|
||||
return;
|
||||
auto length = length_or_error.release_value();
|
||||
|
||||
// Enforce 2GB "Excessive Length" limit
|
||||
if (length > NumericLimits<i32>::max() / sizeof(T)) {
|
||||
|
|
|
@ -110,9 +110,7 @@ JS_DEFINE_NATIVE_FUNCTION(TypedArrayConstructor::from)
|
|||
}
|
||||
|
||||
auto array_like = source.to_object(global_object);
|
||||
auto length = length_of_array_like(global_object, *array_like);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto length = TRY_OR_DISCARD(length_of_array_like(global_object, *array_like));
|
||||
|
||||
MarkedValueList arguments(vm.heap());
|
||||
arguments.empend(length);
|
||||
|
|
|
@ -810,9 +810,7 @@ JS_DEFINE_NATIVE_FUNCTION(TypedArrayPrototype::set)
|
|||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto source_length = length_of_array_like(global_object, *src);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto source_length = TRY_OR_DISCARD(length_of_array_like(global_object, *src));
|
||||
|
||||
if (isinf(target_offset)) {
|
||||
vm.throw_exception<JS::RangeError>(global_object, "Invalid target offset");
|
||||
|
|
Loading…
Add table
Reference in a new issue