summaryrefslogtreecommitdiff
path: root/deps/v8/src/harmony-array-includes.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/harmony-array-includes.js')
-rw-r--r--deps/v8/src/harmony-array-includes.js67
1 files changed, 58 insertions, 9 deletions
diff --git a/deps/v8/src/harmony-array-includes.js b/deps/v8/src/harmony-array-includes.js
index b133f1ec8c..124edf62ec 100644
--- a/deps/v8/src/harmony-array-includes.js
+++ b/deps/v8/src/harmony-array-includes.js
@@ -14,12 +14,9 @@ var GlobalArray = global.Array;
// Proposed for ES7
// https://github.com/tc39/Array.prototype.includes
-// 6e3b78c927aeda20b9d40e81303f9d44596cd904
-function ArrayIncludes(searchElement, fromIndex) {
- var array = $toObject(this);
- var len = $toLength(array.length);
-
- if (len === 0) {
+// 46c7532ec8499dea3e51aeb940d09e07547ed3f5
+function InnerArrayIncludes(searchElement, fromIndex, array, length) {
+ if (length === 0) {
return false;
}
@@ -29,13 +26,13 @@ function ArrayIncludes(searchElement, fromIndex) {
if (n >= 0) {
k = n;
} else {
- k = len + n;
+ k = length + n;
if (k < 0) {
k = 0;
}
}
- while (k < len) {
+ while (k < length) {
var elementK = array[k];
if ($sameValueZero(searchElement, elementK)) {
return true;
@@ -47,13 +44,65 @@ function ArrayIncludes(searchElement, fromIndex) {
return false;
}
+
+function ArrayIncludes(searchElement, fromIndex) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.includes");
+
+ var array = TO_OBJECT(this);
+ var length = $toLength(array.length);
+
+ return InnerArrayIncludes(searchElement, fromIndex, array, length);
+}
+
+
+function TypedArrayIncludes(searchElement, fromIndex) {
+ if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray);
+
+ var length = %_TypedArrayGetLength(this);
+
+ return InnerArrayIncludes(searchElement, fromIndex, this, length);
+}
+
// -------------------------------------------------------------------
%FunctionSetLength(ArrayIncludes, 1);
+%FunctionSetLength(TypedArrayIncludes, 1);
-// Set up the non-enumerable functions on the Array prototype object.
+// Set up the non-enumerable function on the Array prototype object.
utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [
"includes", ArrayIncludes
]);
+// Set up the non-enumerable function on the typed array prototypes.
+// This duplicates some of the machinery in harmony-typedarray.js in order to
+// keep includes behind the separate --harmony-array-includes flag.
+// TODO(littledan): Fix the TypedArray proto chain (bug v8:4085).
+
+macro TYPED_ARRAYS(FUNCTION)
+// arrayIds below should be synchronized with Runtime_TypedArrayInitialize.
+FUNCTION(Uint8Array)
+FUNCTION(Int8Array)
+FUNCTION(Uint16Array)
+FUNCTION(Int16Array)
+FUNCTION(Uint32Array)
+FUNCTION(Int32Array)
+FUNCTION(Float32Array)
+FUNCTION(Float64Array)
+FUNCTION(Uint8ClampedArray)
+endmacro
+
+macro DECLARE_GLOBALS(NAME)
+var GlobalNAME = global.NAME;
+endmacro
+
+macro EXTEND_TYPED_ARRAY(NAME)
+// Set up non-enumerable functions on the prototype object.
+utils.InstallFunctions(GlobalNAME.prototype, DONT_ENUM, [
+ "includes", TypedArrayIncludes
+]);
+endmacro
+
+TYPED_ARRAYS(DECLARE_GLOBALS)
+TYPED_ARRAYS(EXTEND_TYPED_ARRAY)
+
})