| Index: src/harmony-typedarray.js
|
| diff --git a/src/harmony-typedarray.js b/src/harmony-typedarray.js
|
| index 9d66e211e9800f97a3e6b3f4508d1e461333e4c7..7abd420f510b3c67a8daa584fb06e4b28999a94d 100644
|
| --- a/src/harmony-typedarray.js
|
| +++ b/src/harmony-typedarray.js
|
| @@ -48,8 +48,6 @@ var InnerArraySome;
|
| var InnerArraySort;
|
| var InnerArrayToLocaleString;
|
| var IsNaN;
|
| -var MathMax;
|
| -var MathMin;
|
| var PackedArrayReverse;
|
| var ToNumber;
|
|
|
| @@ -73,8 +71,6 @@ utils.Import(function(from) {
|
| InnerArraySort = from.InnerArraySort;
|
| InnerArrayToLocaleString = from.InnerArrayToLocaleString;
|
| IsNaN = from.IsNaN;
|
| - MathMax = from.MathMax;
|
| - MathMin = from.MathMin;
|
| PackedArrayReverse = from.PackedArrayReverse;
|
| ToNumber = from.ToNumber;
|
| });
|
| @@ -317,41 +313,39 @@ function TypedArraySlice(start, end) {
|
| if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray);
|
| var len = %_TypedArrayGetLength(this);
|
|
|
| - var relativeStart = TO_INTEGER(start);
|
| -
|
| - var k;
|
| - if (relativeStart < 0) {
|
| - k = MathMax(len + relativeStart, 0);
|
| + var startInt = TO_INTEGER(start);
|
| + if (!IS_UNDEFINED(end)) {
|
| + var endInt = TO_INTEGER(end);
|
| + var srcLength = %_TypedArrayGetLength(this);
|
| } else {
|
| - k = MathMin(relativeStart, len);
|
| + var srcLength = %_TypedArrayGetLength(this);
|
| + var endInt = srcLength;
|
| }
|
|
|
| - var relativeEnd;
|
| - if (IS_UNDEFINED(end)) {
|
| - relativeEnd = len;
|
| + if (startInt < 0) {
|
| + startInt = MAX_SIMPLE(len + startInt, 0);
|
| } else {
|
| - relativeEnd = TO_INTEGER(end);
|
| + startInt = MIN_SIMPLE(startInt, len);
|
| }
|
|
|
| - var final;
|
| - if (relativeEnd < 0) {
|
| - final = MathMax(len + relativeEnd, 0);
|
| + if (endInt < 0) {
|
| + endInt = MAX_SIMPLE(len + endInt, 0);
|
| } else {
|
| - final = MathMin(relativeEnd, len);
|
| + endInt = MIN_SIMPLE(endInt, len);
|
| }
|
|
|
| - var count = MathMax(final - k, 0);
|
| + var count = MAX_SIMPLE(endInt - startInt, 0);
|
| var array = ConstructTypedArrayLike(this, count);
|
| // The code below is the 'then' branch; the 'else' branch species
|
| // a memcpy. Because V8 doesn't canonicalize NaN, the difference is
|
| // unobservable.
|
| var n = 0;
|
| - while (k < final) {
|
| - var kValue = this[k];
|
| + while (startInt < endInt) {
|
| + var kValue = this[startInt];
|
| // TODO(littledan): The spec says to throw on an error in setting;
|
| // does this throw?
|
| array[n] = kValue;
|
| - k++;
|
| + startInt++;
|
| n++;
|
| }
|
| return array;
|
|
|