Index: src/array.js |
diff --git a/src/array.js b/src/array.js |
index 26bf7282e18ba1a90b7e7c5569cedf0334ef89b6..372b7ece6382118a7a578e9a2d0f40ac43ae222a 100644 |
--- a/src/array.js |
+++ b/src/array.js |
@@ -376,10 +376,7 @@ function ArrayToLocaleString() { |
function ArrayJoin(separator) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.join"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join"); |
var length = TO_UINT32(this.length); |
if (IS_UNDEFINED(separator)) { |
@@ -414,10 +411,7 @@ function ObservedArrayPop(n) { |
// 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"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop"); |
var n = TO_UINT32(this.length); |
if (n == 0) { |
@@ -462,10 +456,7 @@ function ObservedArrayPush() { |
// 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"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push"); |
var n = TO_UINT32(this.length); |
var m = %_ArgumentsLength(); |
@@ -489,10 +480,7 @@ function ArrayPush() { |
// by the array elements of each argument in order. See ECMA-262, |
// section 15.4.4.7. |
function ArrayConcat(arg1) { // length == 1 |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.concat"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.concat"); |
var array = ToObject(this); |
var arg_count = %_ArgumentsLength(); |
@@ -551,10 +539,7 @@ function SparseReverse(array, len) { |
function ArrayReverse() { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.reverse"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse"); |
var j = TO_UINT32(this.length) - 1; |
@@ -602,10 +587,7 @@ function ObservedArrayShift(len) { |
} |
function ArrayShift() { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.shift"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); |
var len = TO_UINT32(this.length); |
@@ -655,10 +637,7 @@ function ObservedArrayUnshift() { |
} |
function ArrayUnshift(arg1) { // length == 1 |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.unshift"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift"); |
var len = TO_UINT32(this.length); |
var num_arguments = %_ArgumentsLength(); |
@@ -700,10 +679,7 @@ function ArrayUnshift(arg1) { // length == 1 |
function ArraySlice(start, end) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.slice"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice"); |
var len = TO_UINT32(this.length); |
var start_i = TO_INTEGER(start); |
@@ -817,10 +793,7 @@ function ObservedArraySplice(start, delete_count) { |
function ArraySplice(start, delete_count) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.splice"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice"); |
if (%IsObserved(this)) |
return ObservedArraySplice.apply(this, arguments); |
@@ -878,10 +851,7 @@ function ArraySplice(start, delete_count) { |
function ArraySort(comparefn) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.sort"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort"); |
// In-place QuickSort algorithm. |
// For short (length <= 22) arrays, insertion sort is used for efficiency. |
@@ -1171,10 +1141,7 @@ function ArraySort(comparefn) { |
// 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"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.filter"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1222,10 +1189,7 @@ function ArrayFilter(f, receiver) { |
function ArrayForEach(f, receiver) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.forEach"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.forEach"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1266,10 +1230,7 @@ function ArrayForEach(f, receiver) { |
// 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"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.some"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1309,10 +1270,7 @@ function ArraySome(f, receiver) { |
function ArrayEvery(f, receiver) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.every"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.every"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1351,10 +1309,7 @@ function ArrayEvery(f, receiver) { |
} |
function ArrayMap(f, receiver) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.map"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1397,10 +1352,7 @@ function ArrayMap(f, receiver) { |
function ArrayIndexOf(element, index) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.indexOf"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.indexOf"); |
var length = TO_UINT32(this.length); |
if (length == 0) return -1; |
@@ -1456,10 +1408,7 @@ function ArrayIndexOf(element, index) { |
function ArrayLastIndexOf(element, index) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.lastIndexOf"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf"); |
var length = TO_UINT32(this.length); |
if (length == 0) return -1; |
@@ -1511,10 +1460,7 @@ function ArrayLastIndexOf(element, index) { |
function ArrayReduce(callback, current) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.reduce"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduce"); |
// Pull out the length so that modifications to the length in the |
// loop will not affect the looping and side effects are visible. |
@@ -1564,10 +1510,7 @@ function ArrayReduce(callback, current) { |
} |
function ArrayReduceRight(callback, current) { |
- if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) { |
- throw MakeTypeError("called_on_null_or_undefined", |
- ["Array.prototype.reduceRight"]); |
- } |
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduceRight"); |
// Pull out the length so that side effects are visible before the |
// callback function is checked. |