| Index: src/array.js
|
| ===================================================================
|
| --- src/array.js (revision 7764)
|
| +++ src/array.js (working copy)
|
| @@ -397,6 +397,11 @@
|
|
|
|
|
| function ArrayJoin(separator) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.join"]);
|
| + }
|
| +
|
| if (IS_UNDEFINED(separator)) {
|
| separator = ',';
|
| } else if (!IS_STRING(separator)) {
|
| @@ -413,6 +418,11 @@
|
| // Removes the last element from the array and returns it. See
|
| // ECMA-262, section 15.4.4.6.
|
| function ArrayPop() {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.pop"]);
|
| + }
|
| +
|
| var n = TO_UINT32(this.length);
|
| if (n == 0) {
|
| this.length = n;
|
| @@ -429,6 +439,11 @@
|
| // Appends the arguments to the end of the array and returns the new
|
| // length of the array. See ECMA-262, section 15.4.4.7.
|
| function ArrayPush() {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.push"]);
|
| + }
|
| +
|
| var n = TO_UINT32(this.length);
|
| var m = %_ArgumentsLength();
|
| for (var i = 0; i < m; i++) {
|
| @@ -440,6 +455,11 @@
|
|
|
|
|
| function ArrayConcat(arg1) { // length == 1
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.concat"]);
|
| + }
|
| +
|
| var arg_count = %_ArgumentsLength();
|
| var arrays = new InternalArray(1 + arg_count);
|
| arrays[0] = this;
|
| @@ -496,6 +516,11 @@
|
|
|
|
|
| function ArrayReverse() {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.reverse"]);
|
| + }
|
| +
|
| var j = TO_UINT32(this.length) - 1;
|
|
|
| if (UseSparseVariant(this, j, IS_ARRAY(this))) {
|
| @@ -527,6 +552,11 @@
|
|
|
|
|
| function ArrayShift() {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.shift"]);
|
| + }
|
| +
|
| var len = TO_UINT32(this.length);
|
|
|
| if (len === 0) {
|
| @@ -548,6 +578,11 @@
|
|
|
|
|
| function ArrayUnshift(arg1) { // length == 1
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.unshift"]);
|
| + }
|
| +
|
| var len = TO_UINT32(this.length);
|
| var num_arguments = %_ArgumentsLength();
|
|
|
| @@ -567,6 +602,11 @@
|
|
|
|
|
| function ArraySlice(start, end) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.slice"]);
|
| + }
|
| +
|
| var len = TO_UINT32(this.length);
|
| var start_i = TO_INTEGER(start);
|
| var end_i = len;
|
| @@ -604,6 +644,11 @@
|
|
|
|
|
| function ArraySplice(start, delete_count) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.splice"]);
|
| + }
|
| +
|
| var num_arguments = %_ArgumentsLength();
|
|
|
| var len = TO_UINT32(this.length);
|
| @@ -675,6 +720,11 @@
|
|
|
|
|
| function ArraySort(comparefn) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.sort"]);
|
| + }
|
| +
|
| // In-place QuickSort algorithm.
|
| // For short (length <= 22) arrays, insertion sort is used for efficiency.
|
|
|
| @@ -936,6 +986,11 @@
|
| // preserving the semantics, since the calls to the receiver function can add
|
| // or delete elements from the array.
|
| function ArrayFilter(f, receiver) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.filter"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(f)) {
|
| throw MakeTypeError('called_non_callable', [ f ]);
|
| }
|
| @@ -957,6 +1012,11 @@
|
|
|
|
|
| function ArrayForEach(f, receiver) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.forEach"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(f)) {
|
| throw MakeTypeError('called_non_callable', [ f ]);
|
| }
|
| @@ -975,6 +1035,11 @@
|
| // Executes the function once for each element present in the
|
| // array until it finds one where callback returns true.
|
| function ArraySome(f, receiver) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.some"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(f)) {
|
| throw MakeTypeError('called_non_callable', [ f ]);
|
| }
|
| @@ -992,6 +1057,11 @@
|
|
|
|
|
| function ArrayEvery(f, receiver) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.every"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(f)) {
|
| throw MakeTypeError('called_non_callable', [ f ]);
|
| }
|
| @@ -1008,6 +1078,11 @@
|
| }
|
|
|
| function ArrayMap(f, receiver) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.map"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(f)) {
|
| throw MakeTypeError('called_non_callable', [ f ]);
|
| }
|
| @@ -1028,6 +1103,11 @@
|
|
|
|
|
| function ArrayIndexOf(element, index) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.indexOf"]);
|
| + }
|
| +
|
| var length = TO_UINT32(this.length);
|
| if (length == 0) return -1;
|
| if (IS_UNDEFINED(index)) {
|
| @@ -1085,6 +1165,11 @@
|
|
|
|
|
| function ArrayLastIndexOf(element, index) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.lastIndexOf"]);
|
| + }
|
| +
|
| var length = TO_UINT32(this.length);
|
| if (length == 0) return -1;
|
| if (%_ArgumentsLength() < 2) {
|
| @@ -1138,6 +1223,11 @@
|
|
|
|
|
| function ArrayReduce(callback, current) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.reduce"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(callback)) {
|
| throw MakeTypeError('called_non_callable', [callback]);
|
| }
|
| @@ -1167,6 +1257,11 @@
|
| }
|
|
|
| function ArrayReduceRight(callback, current) {
|
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
|
| + throw MakeTypeError("called_on_null_or_undefined",
|
| + ["Array.prototype.reduceRight"]);
|
| + }
|
| +
|
| if (!IS_FUNCTION(callback)) {
|
| throw MakeTypeError('called_non_callable', [callback]);
|
| }
|
|
|