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

LibJS: Pass in actual_delete_count to removed array creation in splice

More specifically, Array.prototype.splice. Additionally adds a missing
exception check to the array creation and a link to the spec.

Fixes create-non-array-invalid-len.js in the splice tests in test262.
This test timed out instead of throwing an "Invalid array length"
exception.
This commit is contained in:
Luke 2021-06-10 02:09:35 +01:00 committed by Linus Groh
parent f63ef4f196
commit bc540de0af
2 changed files with 20 additions and 1 deletions

View file

@ -856,6 +856,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::every)
return Value(result);
}
// 23.1.3.28 Array.prototype.splice, https://tc39.es/ecma262#sec-array.prototype.splice
JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::splice)
{
auto* this_object = vm.this_value(global_object).to_object(global_object);
@ -898,7 +899,10 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::splice)
return {};
}
auto removed_elements = Array::create(global_object);
// FIXME: Use ArraySpeciesCreate.
auto removed_elements = Array::create(global_object, actual_delete_count);
if (vm.exception())
return {};
for (size_t i = 0; i < actual_delete_count; ++i) {
auto value = this_object->get(actual_start + i);