mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-15 08:53:07 +09:00
Issue #2551 - Ensure toSorted is 100% spec compliant per multiple tests
This commit is contained in:
parent
18c04a471d
commit
4edeca8c62
1 changed files with 41 additions and 5 deletions
|
|
@ -264,15 +264,51 @@ function ArrayToSorted(comparefn) {
|
|||
var O = ToObject(this);
|
||||
var len = ToLength(O.length);
|
||||
|
||||
var A = ArraySpeciesCreate(O, len);
|
||||
var items = new List();
|
||||
var itemsLen = 0;
|
||||
for (var k = 0; k < len; k++) {
|
||||
if (k in O)
|
||||
_DefineDataProperty(A, k, O[k]);
|
||||
else
|
||||
delete A[k];
|
||||
items[itemsLen++] = O[k];
|
||||
}
|
||||
|
||||
callFunction(std_Array_sort, A, comparefn);
|
||||
var wrappedCompareFn = comparefn;
|
||||
var sortCompare;
|
||||
if (wrappedCompareFn === undefined) {
|
||||
sortCompare = function(x, y) {
|
||||
if (x === undefined)
|
||||
return y === undefined ? 0 : 1;
|
||||
if (y === undefined)
|
||||
return -1;
|
||||
|
||||
var xString = ToString(x);
|
||||
var yString = ToString(y);
|
||||
if (xString < yString)
|
||||
return -1;
|
||||
if (xString > yString)
|
||||
return 1;
|
||||
return 0;
|
||||
};
|
||||
} else {
|
||||
sortCompare = function(x, y) {
|
||||
if (x === undefined)
|
||||
return y === undefined ? 0 : 1;
|
||||
if (y === undefined)
|
||||
return -1;
|
||||
|
||||
var v = ToNumber(wrappedCompareFn(x, y));
|
||||
return v !== v ? 0 : v;
|
||||
};
|
||||
}
|
||||
|
||||
if (itemsLen > 1)
|
||||
MergeSort(items, itemsLen, sortCompare);
|
||||
|
||||
var A = ArraySpeciesCreate(O, 0);
|
||||
A.length = len;
|
||||
|
||||
for (var j = 0; j < itemsLen; j++)
|
||||
_DefineDataProperty(A, j, items[j]);
|
||||
|
||||
return A;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue