1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 10:08:10 +00:00

LibJS: Make removed elements in Array.prototype.splice spec compliant

It wasn't using has_property, was directly appending to indexed
properties and wasn't setting the length.
This commit is contained in:
Luke 2021-06-10 03:40:54 +01:00 committed by Linus Groh
parent bc540de0af
commit 00a83a2957

View file

@ -905,13 +905,26 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayPrototype::splice)
return {};
for (size_t i = 0; i < actual_delete_count; ++i) {
auto value = this_object->get(actual_start + i);
auto from = actual_start + i;
bool from_present = this_object->has_property(from);
if (vm.exception())
return {};
removed_elements->indexed_properties().append(value);
if (from_present) {
auto from_value = this_object->get(actual_start + i);
if (vm.exception())
return {};
removed_elements->define_property(i, from_value);
if (vm.exception())
return {};
}
}
removed_elements->put(vm.names.length, Value(actual_delete_count));
if (vm.exception())
return {};
if (insert_count < actual_delete_count) {
for (size_t i = actual_start; i < initial_length - actual_delete_count; ++i) {
auto from = this_object->get(i + actual_delete_count);