Index: src/js/harmony-array.js |
diff --git a/src/js/harmony-array.js b/src/js/harmony-array.js |
deleted file mode 100644 |
index 20e5e78205cfa98608e68b6b38a347f7ca203170..0000000000000000000000000000000000000000 |
--- a/src/js/harmony-array.js |
+++ /dev/null |
@@ -1,304 +0,0 @@ |
-// Copyright 2013 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-(function(global, utils) { |
- |
-'use strict'; |
- |
-%CheckIsBootstrapping(); |
- |
-// ------------------------------------------------------------------- |
-// Imports |
- |
-var AddIndexedProperty; |
-var FLAG_harmony_tolength; |
-var GetIterator; |
-var GetMethod; |
-var GlobalArray = global.Array; |
-var iteratorSymbol = utils.ImportNow("iterator_symbol"); |
-var MakeTypeError; |
-var MaxSimple; |
-var MinSimple; |
-var ObjectIsFrozen; |
-var ObjectDefineProperty; |
- |
-utils.Import(function(from) { |
- AddIndexedProperty = from.AddIndexedProperty; |
- FLAG_harmony_tolength = from.FLAG_harmony_tolength; |
- GetIterator = from.GetIterator; |
- GetMethod = from.GetMethod; |
- MakeTypeError = from.MakeTypeError; |
- MaxSimple = from.MaxSimple; |
- MinSimple = from.MinSimple; |
- ObjectIsFrozen = from.ObjectIsFrozen; |
- ObjectDefineProperty = from.ObjectDefineProperty; |
-}); |
- |
-// ------------------------------------------------------------------- |
- |
-function InnerArrayCopyWithin(target, start, end, array, length) { |
- target = TO_INTEGER(target); |
- var to; |
- if (target < 0) { |
- to = MaxSimple(length + target, 0); |
- } else { |
- to = MinSimple(target, length); |
- } |
- |
- start = TO_INTEGER(start); |
- var from; |
- if (start < 0) { |
- from = MaxSimple(length + start, 0); |
- } else { |
- from = MinSimple(start, length); |
- } |
- |
- end = IS_UNDEFINED(end) ? length : TO_INTEGER(end); |
- var final; |
- if (end < 0) { |
- final = MaxSimple(length + end, 0); |
- } else { |
- final = MinSimple(end, length); |
- } |
- |
- var count = MinSimple(final - from, length - to); |
- var direction = 1; |
- if (from < to && to < (from + count)) { |
- direction = -1; |
- from = from + count - 1; |
- to = to + count - 1; |
- } |
- |
- while (count > 0) { |
- if (from in array) { |
- array[to] = array[from]; |
- } else { |
- delete array[to]; |
- } |
- from = from + direction; |
- to = to + direction; |
- count--; |
- } |
- |
- return array; |
-} |
- |
-// ES6 draft 03-17-15, section 22.1.3.3 |
-function ArrayCopyWithin(target, start, end) { |
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin"); |
- |
- var array = TO_OBJECT(this); |
- var length = TO_LENGTH(array.length); |
- |
- return InnerArrayCopyWithin(target, start, end, array, length); |
-} |
- |
-function InnerArrayFind(predicate, thisArg, array, length) { |
- if (!IS_CALLABLE(predicate)) { |
- throw MakeTypeError(kCalledNonCallable, predicate); |
- } |
- |
- for (var i = 0; i < length; i++) { |
- var element = array[i]; |
- if (%_Call(predicate, thisArg, element, i, array)) { |
- return element; |
- } |
- } |
- |
- return; |
-} |
- |
-// ES6 draft 07-15-13, section 15.4.3.23 |
-function ArrayFind(predicate, thisArg) { |
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find"); |
- |
- var array = TO_OBJECT(this); |
- var length = TO_INTEGER(array.length); |
- |
- return InnerArrayFind(predicate, thisArg, array, length); |
-} |
- |
-function InnerArrayFindIndex(predicate, thisArg, array, length) { |
- if (!IS_CALLABLE(predicate)) { |
- throw MakeTypeError(kCalledNonCallable, predicate); |
- } |
- |
- for (var i = 0; i < length; i++) { |
- var element = array[i]; |
- if (%_Call(predicate, thisArg, element, i, array)) { |
- return i; |
- } |
- } |
- |
- return -1; |
-} |
- |
-// ES6 draft 07-15-13, section 15.4.3.24 |
-function ArrayFindIndex(predicate, thisArg) { |
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex"); |
- |
- var array = TO_OBJECT(this); |
- var length = TO_INTEGER(array.length); |
- |
- return InnerArrayFindIndex(predicate, thisArg, array, length); |
-} |
- |
-// ES6, draft 04-05-14, section 22.1.3.6 |
-function InnerArrayFill(value, start, end, array, length) { |
- var i = IS_UNDEFINED(start) ? 0 : TO_INTEGER(start); |
- var end = IS_UNDEFINED(end) ? length : TO_INTEGER(end); |
- |
- if (i < 0) { |
- i += length; |
- if (i < 0) i = 0; |
- } else { |
- if (i > length) i = length; |
- } |
- |
- if (end < 0) { |
- end += length; |
- if (end < 0) end = 0; |
- } else { |
- if (end > length) end = length; |
- } |
- |
- if ((end - i) > 0 && ObjectIsFrozen(array)) { |
- throw MakeTypeError(kArrayFunctionsOnFrozen); |
- } |
- |
- for (; i < end; i++) |
- array[i] = value; |
- return array; |
-} |
- |
-// ES6, draft 04-05-14, section 22.1.3.6 |
-function ArrayFill(value, start, end) { |
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.fill"); |
- |
- var array = TO_OBJECT(this); |
- var length = TO_LENGTH_OR_UINT32(array.length); |
- |
- return InnerArrayFill(value, start, end, array, length); |
-} |
- |
-function AddArrayElement(constructor, array, i, value) { |
- if (constructor === GlobalArray) { |
- AddIndexedProperty(array, i, value); |
- } else { |
- ObjectDefineProperty(array, i, { |
- value: value, writable: true, configurable: true, enumerable: true |
- }); |
- } |
-} |
- |
-// ES6, draft 10-14-14, section 22.1.2.1 |
-function ArrayFrom(arrayLike, mapfn, receiver) { |
- var items = TO_OBJECT(arrayLike); |
- var mapping = !IS_UNDEFINED(mapfn); |
- |
- if (mapping) { |
- if (!IS_CALLABLE(mapfn)) { |
- throw MakeTypeError(kCalledNonCallable, mapfn); |
- } |
- } |
- |
- var iterable = GetMethod(items, iteratorSymbol); |
- var k; |
- var result; |
- var mappedValue; |
- var nextValue; |
- |
- if (!IS_UNDEFINED(iterable)) { |
- result = %IsConstructor(this) ? new this() : []; |
- |
- var iterator = GetIterator(items, iterable); |
- |
- k = 0; |
- while (true) { |
- var next = iterator.next(); |
- |
- if (!IS_OBJECT(next)) { |
- throw MakeTypeError(kIteratorResultNotAnObject, next); |
- } |
- |
- if (next.done) { |
- result.length = k; |
- return result; |
- } |
- |
- nextValue = next.value; |
- if (mapping) { |
- mappedValue = %_Call(mapfn, receiver, nextValue, k); |
- } else { |
- mappedValue = nextValue; |
- } |
- AddArrayElement(this, result, k, mappedValue); |
- k++; |
- } |
- } else { |
- var len = TO_LENGTH(items.length); |
- result = %IsConstructor(this) ? new this(len) : new GlobalArray(len); |
- |
- for (k = 0; k < len; ++k) { |
- nextValue = items[k]; |
- if (mapping) { |
- mappedValue = %_Call(mapfn, receiver, nextValue, k); |
- } else { |
- mappedValue = nextValue; |
- } |
- AddArrayElement(this, result, k, mappedValue); |
- } |
- |
- result.length = k; |
- return result; |
- } |
-} |
- |
-// ES6, draft 05-22-14, section 22.1.2.3 |
-function ArrayOf() { |
- var length = %_ArgumentsLength(); |
- var constructor = this; |
- // TODO: Implement IsConstructor (ES6 section 7.2.5) |
- var array = %IsConstructor(constructor) ? new constructor(length) : []; |
- for (var i = 0; i < length; i++) { |
- AddArrayElement(constructor, array, i, %_Arguments(i)); |
- } |
- array.length = length; |
- return array; |
-} |
- |
-// ------------------------------------------------------------------- |
- |
-%FunctionSetLength(ArrayCopyWithin, 2); |
-%FunctionSetLength(ArrayFrom, 1); |
-%FunctionSetLength(ArrayFill, 1); |
-%FunctionSetLength(ArrayFind, 1); |
-%FunctionSetLength(ArrayFindIndex, 1); |
- |
-// Set up non-enumerable functions on the Array object. |
-utils.InstallFunctions(GlobalArray, DONT_ENUM, [ |
- "from", ArrayFrom, |
- "of", ArrayOf |
-]); |
- |
-// Set up the non-enumerable functions on the Array prototype object. |
-utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [ |
- "copyWithin", ArrayCopyWithin, |
- "find", ArrayFind, |
- "findIndex", ArrayFindIndex, |
- "fill", ArrayFill |
-]); |
- |
-// ------------------------------------------------------------------- |
-// Exports |
- |
-utils.Export(function(to) { |
- to.ArrayFrom = ArrayFrom; |
- to.InnerArrayCopyWithin = InnerArrayCopyWithin; |
- to.InnerArrayFill = InnerArrayFill; |
- to.InnerArrayFind = InnerArrayFind; |
- to.InnerArrayFindIndex = InnerArrayFindIndex; |
-}); |
- |
-}) |