Bug 1260673 - Stop using _DefineDataProperty in MoveHoles; r=jorendorff
_DefineDataProperty was used to ensure that modifying Array's setter wouldn't
impact sorting, however, this is both not necessary and against the spec.
--- a/js/src/builtin/Sorting.js
+++ b/js/src/builtin/Sorting.js
@@ -215,17 +215,17 @@ function Merge(list, start, mid, end, lB
k++;
}
}
// Helper function for overwriting a sparse array with a
// dense array, filling remaining slots with holes.
function MoveHoles(sparse, sparseLen, dense, denseLen) {
for (var i = 0; i < denseLen; i++)
- _DefineDataProperty(sparse, i, dense[i]);
+ sparse[i] = dense[i];
for (var j = denseLen; j < sparseLen; j++)
delete sparse[j];
}
// Iterative, bottom up, mergesort.
function MergeSort(array, len, comparefn) {
// To save effort we will do all of our work on a dense list,
// then create holes at the end.
--- a/js/src/tests/ecma_6/Array/sort_holes.js
+++ b/js/src/tests/ecma_6/Array/sort_holes.js
@@ -49,24 +49,10 @@ let oneHole = new Array(2600);
oneHole[1399] = {size: 27};
assertEq(oneHole.length, 2600);
assertEq(denseCount(oneHole), 1);
oneHole.sort((a, b) => {+a.size - +b.size});
assertDeepEq(oneHole[0], {size: 27});
assertEq(oneHole.length, 2600);
assertEq(denseCount(oneHole), 1);
-// Ensure that the array setter is touch touched during sorting.
-
-Object.defineProperty(Array.prototype, "0", {
- set: (value) => {throw "Illegally touched the array's setter!"},
- configurable: true
-});
-
-assertThrows(() => {o[1] = 11;});
-
-let o = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}];
-o.sort((a, b) => {+a.size - +b.size});
-
-delete Array.prototype["0"];
-
if (typeof reportCompare === 'function')
reportCompare(0, 0);