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]); |
} |