Backed out changeset 5d13efb13fec (
bug 1165052)
--- a/js/src/builtin/Array.js
+++ b/js/src/builtin/Array.js
@@ -260,49 +260,48 @@ function ArrayStaticForEach(list, callba
if (arguments.length < 2)
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, 'Array.forEach');
if (!IsCallable(callbackfn))
ThrowTypeError(JSMSG_NOT_FUNCTION, DecompileArg(1, callbackfn));
var T = arguments.length > 2 ? arguments[2] : void 0;
callFunction(ArrayForEach, list, callbackfn, T);
}
-/* ES 2016 draft Mar 25, 2016 22.1.3.15. */
+/* ES5 15.4.4.19. */
function ArrayMap(callbackfn/*, thisArg*/) {
/* Step 1. */
var O = ToObject(this);
- /* Step 2. */
- /* FIXME: Array operations should use ToLength (bug 924058). */
+ /* Step 2-3. */
var len = TO_UINT32(O.length);
- /* Step 3. */
+ /* Step 4. */
if (arguments.length === 0)
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, 'Array.prototype.map');
if (!IsCallable(callbackfn))
ThrowTypeError(JSMSG_NOT_FUNCTION, DecompileArg(0, callbackfn));
- /* Step 4. */
+ /* Step 5. */
var T = arguments.length > 1 ? arguments[1] : void 0;
- /* Steps 5. */
- var A = ArraySpeciesCreate(O, len);
+ /* Step 6. */
+ var A = std_Array(len);
- /* Steps 6-7. */
- /* Steps 7.a (implicit), and 7.d. */
+ /* Step 7-8. */
+ /* Step a (implicit), and d. */
for (var k = 0; k < len; k++) {
- /* Steps 7.b-c. */
+ /* Step b */
if (k in O) {
- /* Steps 7.c.i-iii. */
+ /* Step c.i-iii. */
var mappedValue = callContentFunction(callbackfn, T, O[k], k, O);
_DefineDataProperty(A, k, mappedValue);
}
}
- /* Step 8. */
+ /* Step 9. */
return A;
}
function ArrayStaticMap(list, callbackfn/*, thisArg*/) {
if (arguments.length < 2)
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, 'Array.map');
if (!IsCallable(callbackfn))
ThrowTypeError(JSMSG_NOT_FUNCTION, DecompileArg(1, callbackfn));