Chromium Code Reviews| Index: src/array.js |
| =================================================================== |
| --- src/array.js (revision 7676) |
| +++ src/array.js (working copy) |
| @@ -359,6 +359,10 @@ |
| function ArrayToString() { |
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
| + throw MakeTypeError("called_on_null_or_undefined", |
| + ["Array.prototype.toString"]); |
| + } |
| if (!IS_ARRAY(this)) { |
|
Lasse Reichstein
2011/05/03 13:06:52
Remove the test above, then.
Rico
2011/05/03 13:15:38
Done.
|
| throw new $TypeError('Array.prototype.toString is not generic'); |
| } |
| @@ -367,6 +371,10 @@ |
| function ArrayToLocaleString() { |
| + if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
| + throw MakeTypeError("called_on_null_or_undefined", |
| + ["Array.prototype.toLocaleString"]); |
| + } |
| if (!IS_ARRAY(this)) { |
|
Lasse Reichstein
2011/05/03 13:06:52
Ditto
Rico
2011/05/03 13:15:38
Done.
|
| throw new $TypeError('Array.prototype.toString is not generic'); |
| } |
| @@ -375,6 +383,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)) { |
| @@ -391,6 +404,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; |
| @@ -407,6 +425,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++) { |
| @@ -418,6 +441,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; |
| @@ -474,6 +502,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))) { |
| @@ -505,6 +538,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) { |
| @@ -526,6 +564,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(); |
| @@ -545,6 +588,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; |
| @@ -582,6 +630,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); |
| @@ -653,6 +706,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. |
| @@ -914,6 +972,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 ]); |
| } |
| @@ -935,6 +998,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 ]); |
| } |
| @@ -953,6 +1021,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 ]); |
| } |
| @@ -970,6 +1043,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 ]); |
| } |
| @@ -986,6 +1064,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 ]); |
| } |
| @@ -1006,6 +1089,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)) { |
| @@ -1063,6 +1151,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) { |
| @@ -1116,6 +1209,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]); |
| } |
| @@ -1145,6 +1243,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]); |
| } |