| Index: src/array.js
|
| ===================================================================
|
| --- src/array.js (revision 9808)
|
| +++ src/array.js (working copy)
|
| @@ -1013,18 +1013,22 @@
|
| }
|
| if (IS_NULL_OR_UNDEFINED(receiver)) {
|
| receiver = %GetDefaultReceiver(f) || receiver;
|
| + } else if (!IS_SPEC_OBJECT(receiver)) {
|
| + receiver = ToObject(receiver);
|
| }
|
|
|
| - var result = [];
|
| - var result_length = 0;
|
| + var result = new $Array();
|
| + var accumulator = new InternalArray();
|
| + var accumulator_length = 0;
|
| for (var i = 0; i < length; i++) {
|
| var current = array[i];
|
| if (!IS_UNDEFINED(current) || i in array) {
|
| if (%_CallFunction(receiver, current, i, array, f)) {
|
| - result[result_length++] = current;
|
| + accumulator[accumulator_length++] = current;
|
| }
|
| }
|
| }
|
| + %MoveArrayContents(accumulator, result);
|
| return result;
|
| }
|
|
|
| @@ -1045,6 +1049,8 @@
|
| }
|
| if (IS_NULL_OR_UNDEFINED(receiver)) {
|
| receiver = %GetDefaultReceiver(f) || receiver;
|
| + } else if (!IS_SPEC_OBJECT(receiver)) {
|
| + receiver = ToObject(receiver);
|
| }
|
|
|
| for (var i = 0; i < length; i++) {
|
| @@ -1074,6 +1080,8 @@
|
| }
|
| if (IS_NULL_OR_UNDEFINED(receiver)) {
|
| receiver = %GetDefaultReceiver(f) || receiver;
|
| + } else if (!IS_SPEC_OBJECT(receiver)) {
|
| + receiver = ToObject(receiver);
|
| }
|
|
|
| for (var i = 0; i < length; i++) {
|
| @@ -1102,6 +1110,8 @@
|
| }
|
| if (IS_NULL_OR_UNDEFINED(receiver)) {
|
| receiver = %GetDefaultReceiver(f) || receiver;
|
| + } else if (!IS_SPEC_OBJECT(receiver)) {
|
| + receiver = ToObject(receiver);
|
| }
|
|
|
| for (var i = 0; i < length; i++) {
|
| @@ -1129,6 +1139,8 @@
|
| }
|
| if (IS_NULL_OR_UNDEFINED(receiver)) {
|
| receiver = %GetDefaultReceiver(f) || receiver;
|
| + } else if (!IS_SPEC_OBJECT(receiver)) {
|
| + receiver = ToObject(receiver);
|
| }
|
|
|
| var result = new $Array();
|
|
|