| OLD | NEW | 
|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 (function(global, utils) { | 5 (function(global, utils) { | 
| 6 | 6 | 
| 7 "use strict"; | 7 "use strict"; | 
| 8 | 8 | 
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); | 
| 10 | 10 | 
| 11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- | 
| 12 // Imports | 12 // Imports | 
| 13 | 13 | 
| 14 var ArrayFrom; | 14 var ArrayFrom; | 
| 15 var ArrayToString; | 15 var ArrayToString; | 
| 16 var ArrayValues; | 16 var ArrayValues; | 
| 17 var GlobalArray = global.Array; | 17 var GlobalArray = global.Array; | 
| 18 var GlobalArrayBuffer = global.ArrayBuffer; | 18 var GlobalArrayBuffer = global.ArrayBuffer; | 
| 19 var GlobalDataView = global.DataView; | 19 var GlobalDataView = global.DataView; | 
| 20 var GlobalObject = global.Object; | 20 var GlobalObject = global.Object; | 
|  | 21 var InternalArray = utils.InternalArray; | 
| 21 var InnerArrayCopyWithin; | 22 var InnerArrayCopyWithin; | 
| 22 var InnerArrayEvery; | 23 var InnerArrayEvery; | 
| 23 var InnerArrayFill; | 24 var InnerArrayFill; | 
| 24 var InnerArrayFilter; | 25 var InnerArrayFilter; | 
| 25 var InnerArrayFind; | 26 var InnerArrayFind; | 
| 26 var InnerArrayFindIndex; | 27 var InnerArrayFindIndex; | 
| 27 var InnerArrayForEach; | 28 var InnerArrayForEach; | 
| 28 var InnerArrayIncludes; | 29 var InnerArrayIncludes; | 
| 29 var InnerArrayIndexOf; | 30 var InnerArrayIndexOf; | 
| 30 var InnerArrayJoin; | 31 var InnerArrayJoin; | 
| 31 var InnerArrayLastIndexOf; | 32 var InnerArrayLastIndexOf; | 
| 32 var InnerArrayReduce; | 33 var InnerArrayReduce; | 
| 33 var InnerArrayReduceRight; | 34 var InnerArrayReduceRight; | 
| 34 var InnerArraySome; | 35 var InnerArraySome; | 
| 35 var InnerArraySort; | 36 var InnerArraySort; | 
| 36 var InnerArrayToLocaleString; | 37 var InnerArrayToLocaleString; | 
| 37 var InternalArray = utils.InternalArray; | 38 var InternalArray = utils.InternalArray; | 
| 38 var IsNaN; | 39 var IsNaN; | 
| 39 var MakeRangeError; | 40 var MakeRangeError; | 
| 40 var MakeTypeError; | 41 var MakeTypeError; | 
| 41 var MaxSimple; | 42 var MaxSimple; | 
| 42 var MinSimple; | 43 var MinSimple; | 
| 43 var PackedArrayReverse; | 44 var PackedArrayReverse; | 
|  | 45 var SpeciesConstructor; | 
| 44 var ToPositiveInteger; | 46 var ToPositiveInteger; | 
| 45 var iteratorSymbol = utils.ImportNow("iterator_symbol"); | 47 var iteratorSymbol = utils.ImportNow("iterator_symbol"); | 
| 46 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 48 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 
| 47 | 49 | 
| 48 macro TYPED_ARRAYS(FUNCTION) | 50 macro TYPED_ARRAYS(FUNCTION) | 
| 49 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. | 51 // arrayIds below should be synchronized with Runtime_TypedArrayInitialize. | 
| 50 FUNCTION(1, Uint8Array, 1) | 52 FUNCTION(1, Uint8Array, 1) | 
| 51 FUNCTION(2, Int8Array, 1) | 53 FUNCTION(2, Int8Array, 1) | 
| 52 FUNCTION(3, Uint16Array, 2) | 54 FUNCTION(3, Uint16Array, 2) | 
| 53 FUNCTION(4, Int16Array, 2) | 55 FUNCTION(4, Int16Array, 2) | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 80   InnerArrayJoin = from.InnerArrayJoin; | 82   InnerArrayJoin = from.InnerArrayJoin; | 
| 81   InnerArrayLastIndexOf = from.InnerArrayLastIndexOf; | 83   InnerArrayLastIndexOf = from.InnerArrayLastIndexOf; | 
| 82   InnerArrayReduce = from.InnerArrayReduce; | 84   InnerArrayReduce = from.InnerArrayReduce; | 
| 83   InnerArrayReduceRight = from.InnerArrayReduceRight; | 85   InnerArrayReduceRight = from.InnerArrayReduceRight; | 
| 84   InnerArraySome = from.InnerArraySome; | 86   InnerArraySome = from.InnerArraySome; | 
| 85   InnerArraySort = from.InnerArraySort; | 87   InnerArraySort = from.InnerArraySort; | 
| 86   InnerArrayToLocaleString = from.InnerArrayToLocaleString; | 88   InnerArrayToLocaleString = from.InnerArrayToLocaleString; | 
| 87   IsNaN = from.IsNaN; | 89   IsNaN = from.IsNaN; | 
| 88   MakeRangeError = from.MakeRangeError; | 90   MakeRangeError = from.MakeRangeError; | 
| 89   MakeTypeError = from.MakeTypeError; | 91   MakeTypeError = from.MakeTypeError; | 
| 90   MakeTypeError = from.MakeTypeError; |  | 
| 91   MaxSimple = from.MaxSimple; |  | 
| 92   MaxSimple = from.MaxSimple; | 92   MaxSimple = from.MaxSimple; | 
| 93   MinSimple = from.MinSimple; | 93   MinSimple = from.MinSimple; | 
| 94   MinSimple = from.MinSimple; |  | 
| 95   PackedArrayReverse = from.PackedArrayReverse; | 94   PackedArrayReverse = from.PackedArrayReverse; | 
|  | 95   SpeciesConstructor = from.SpeciesConstructor; | 
| 96   ToPositiveInteger = from.ToPositiveInteger; | 96   ToPositiveInteger = from.ToPositiveInteger; | 
| 97 }); | 97 }); | 
| 98 | 98 | 
| 99 // --------------- Typed Arrays --------------------- | 99 // --------------- Typed Arrays --------------------- | 
| 100 | 100 | 
|  | 101 function TypedArrayDefaultConstructor(typedArray) { | 
|  | 102   switch (%_ClassOf(typedArray)) { | 
|  | 103 macro TYPED_ARRAY_CONSTRUCTOR_CASE(ARRAY_ID, NAME, ELEMENT_SIZE) | 
|  | 104     case "NAME": | 
|  | 105       return GlobalNAME; | 
|  | 106 endmacro | 
|  | 107 TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR_CASE) | 
|  | 108   } | 
|  | 109   // The TypeError should not be generated since all callers should | 
|  | 110   // have already called ValidateTypedArray. | 
|  | 111   throw MakeTypeError(kIncompatibleMethodReceiver, | 
|  | 112                       "TypedArrayDefaultConstructor", this); | 
|  | 113 } | 
|  | 114 | 
|  | 115 function TypedArrayCreate(constructor, arg0, arg1, arg2) { | 
|  | 116   if (IS_UNDEFINED(arg1)) { | 
|  | 117     var newTypedArray = new constructor(arg0); | 
|  | 118   } else { | 
|  | 119     var newTypedArray = new constructor(arg0, arg1, arg2); | 
|  | 120   } | 
|  | 121   if (!%_IsTypedArray(newTypedArray)) throw MakeTypeError(kNotTypedArray); | 
|  | 122   // TODO(littledan): Check for being detached, here and elsewhere | 
|  | 123   // All callers where the first argument is a Number have no additional | 
|  | 124   // arguments. | 
|  | 125   if (IS_NUMBER(arg0) && %_TypedArrayGetLength(newTypedArray) < arg0) { | 
|  | 126     throw MakeTypeError(kTypedArrayTooShort); | 
|  | 127   } | 
|  | 128   return newTypedArray; | 
|  | 129 } | 
|  | 130 | 
|  | 131 function TypedArraySpeciesCreate(exemplar, arg0, arg1, arg2) { | 
|  | 132   var defaultConstructor = TypedArrayDefaultConstructor(exemplar); | 
|  | 133   var constructor = SpeciesConstructor(exemplar, defaultConstructor); | 
|  | 134   return TypedArrayCreate(constructor, arg0, arg1, arg2); | 
|  | 135 } | 
|  | 136 | 
| 101 macro TYPED_ARRAY_CONSTRUCTOR(ARRAY_ID, NAME, ELEMENT_SIZE) | 137 macro TYPED_ARRAY_CONSTRUCTOR(ARRAY_ID, NAME, ELEMENT_SIZE) | 
| 102 function NAMEConstructByArrayBuffer(obj, buffer, byteOffset, length) { | 138 function NAMEConstructByArrayBuffer(obj, buffer, byteOffset, length) { | 
| 103   if (!IS_UNDEFINED(byteOffset)) { | 139   if (!IS_UNDEFINED(byteOffset)) { | 
| 104     byteOffset = ToPositiveInteger(byteOffset, kInvalidTypedArrayLength); | 140     byteOffset = ToPositiveInteger(byteOffset, kInvalidTypedArrayLength); | 
| 105   } | 141   } | 
| 106   if (!IS_UNDEFINED(length)) { | 142   if (!IS_UNDEFINED(length)) { | 
| 107     length = ToPositiveInteger(length, kInvalidTypedArrayLength); | 143     length = ToPositiveInteger(length, kInvalidTypedArrayLength); | 
| 108   } | 144   } | 
| 109 | 145 | 
| 110   var bufferByteLength = %_ArrayBufferGetByteLength(buffer); | 146   var bufferByteLength = %_ArrayBufferGetByteLength(buffer); | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 203 } | 239 } | 
| 204 | 240 | 
| 205 function NAMEConstructor(arg1, arg2, arg3) { | 241 function NAMEConstructor(arg1, arg2, arg3) { | 
| 206   if (!IS_UNDEFINED(new.target)) { | 242   if (!IS_UNDEFINED(new.target)) { | 
| 207     if (IS_ARRAYBUFFER(arg1) || IS_SHAREDARRAYBUFFER(arg1)) { | 243     if (IS_ARRAYBUFFER(arg1) || IS_SHAREDARRAYBUFFER(arg1)) { | 
| 208       NAMEConstructByArrayBuffer(this, arg1, arg2, arg3); | 244       NAMEConstructByArrayBuffer(this, arg1, arg2, arg3); | 
| 209     } else if (IS_NUMBER(arg1) || IS_STRING(arg1) || | 245     } else if (IS_NUMBER(arg1) || IS_STRING(arg1) || | 
| 210                IS_BOOLEAN(arg1) || IS_UNDEFINED(arg1)) { | 246                IS_BOOLEAN(arg1) || IS_UNDEFINED(arg1)) { | 
| 211       NAMEConstructByLength(this, arg1); | 247       NAMEConstructByLength(this, arg1); | 
| 212     } else { | 248     } else { | 
|  | 249       // TODO(littledan): If arg1 is a TypedArray, follow the constructor | 
|  | 250       // path in ES2015 22.2.4.3, and call SpeciesConstructor, in a | 
|  | 251       // path that seems to be an optimized version of what's below, but | 
|  | 252       // in an observably different way. | 
| 213       var iteratorFn = arg1[iteratorSymbol]; | 253       var iteratorFn = arg1[iteratorSymbol]; | 
| 214       if (IS_UNDEFINED(iteratorFn) || iteratorFn === ArrayValues) { | 254       if (IS_UNDEFINED(iteratorFn) || iteratorFn === ArrayValues) { | 
| 215         NAMEConstructByArrayLike(this, arg1); | 255         NAMEConstructByArrayLike(this, arg1); | 
| 216       } else { | 256       } else { | 
| 217         NAMEConstructByIterable(this, arg1, iteratorFn); | 257         NAMEConstructByIterable(this, arg1, iteratorFn); | 
| 218       } | 258       } | 
| 219     } | 259     } | 
| 220   } else { | 260   } else { | 
| 221     throw MakeTypeError(kConstructorNotFunction, "NAME") | 261     throw MakeTypeError(kConstructorNotFunction, "NAME") | 
| 222   } | 262   } | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 244     endInt = MinSimple(endInt, srcLength); | 284     endInt = MinSimple(endInt, srcLength); | 
| 245   } | 285   } | 
| 246 | 286 | 
| 247   if (endInt < beginInt) { | 287   if (endInt < beginInt) { | 
| 248     endInt = beginInt; | 288     endInt = beginInt; | 
| 249   } | 289   } | 
| 250 | 290 | 
| 251   var newLength = endInt - beginInt; | 291   var newLength = endInt - beginInt; | 
| 252   var beginByteOffset = | 292   var beginByteOffset = | 
| 253       %_ArrayBufferViewGetByteOffset(this) + beginInt * ELEMENT_SIZE; | 293       %_ArrayBufferViewGetByteOffset(this) + beginInt * ELEMENT_SIZE; | 
| 254   return new GlobalNAME(%TypedArrayGetBuffer(this), | 294   return TypedArraySpeciesCreate(this, %TypedArrayGetBuffer(this), | 
| 255                         beginByteOffset, newLength); | 295                                  beginByteOffset, newLength); | 
| 256 } | 296 } | 
| 257 endmacro | 297 endmacro | 
| 258 | 298 | 
| 259 TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR) | 299 TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR) | 
| 260 | 300 | 
| 261 function TypedArraySubArray(begin, end) { | 301 function TypedArraySubArray(begin, end) { | 
| 262   switch (%_ClassOf(this)) { | 302   switch (%_ClassOf(this)) { | 
| 263 macro TYPED_ARRAY_SUBARRAY_CASE(ARRAY_ID, NAME, ELEMENT_SIZE) | 303 macro TYPED_ARRAY_SUBARRAY_CASE(ARRAY_ID, NAME, ELEMENT_SIZE) | 
| 264     case "NAME": | 304     case "NAME": | 
| 265       return %_Call(NAMESubArray, this, begin, end); | 305       return %_Call(NAMESubArray, this, begin, end); | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 413 } | 453 } | 
| 414 | 454 | 
| 415 function TypedArrayGetToStringTag() { | 455 function TypedArrayGetToStringTag() { | 
| 416   if (!%_IsTypedArray(this)) return; | 456   if (!%_IsTypedArray(this)) return; | 
| 417   var name = %_ClassOf(this); | 457   var name = %_ClassOf(this); | 
| 418   if (IS_UNDEFINED(name)) return; | 458   if (IS_UNDEFINED(name)) return; | 
| 419   return name; | 459   return name; | 
| 420 } | 460 } | 
| 421 | 461 | 
| 422 | 462 | 
| 423 function ConstructTypedArray(constructor, arg) { |  | 
| 424   // TODO(littledan): This is an approximation of the spec, which requires |  | 
| 425   // that only real TypedArray classes should be accepted (22.2.2.1.1) |  | 
| 426   if (!%IsConstructor(constructor) || IS_UNDEFINED(constructor.prototype) || |  | 
| 427       !%HasOwnProperty(constructor.prototype, "BYTES_PER_ELEMENT")) { |  | 
| 428     throw MakeTypeError(kNotTypedArray); |  | 
| 429   } |  | 
| 430 |  | 
| 431   // TODO(littledan): The spec requires that, rather than directly calling |  | 
| 432   // the constructor, a TypedArray is created with the proper proto and |  | 
| 433   // underlying size and element size, and elements are put in one by one. |  | 
| 434   // By contrast, this would allow subclasses to make a radically different |  | 
| 435   // constructor with different semantics. |  | 
| 436   return new constructor(arg); |  | 
| 437 } |  | 
| 438 |  | 
| 439 |  | 
| 440 function ConstructTypedArrayLike(typedArray, arg) { |  | 
| 441   // TODO(littledan): The spec requires that we actuallly use |  | 
| 442   // typedArray.constructor[Symbol.species] (bug v8:4093) |  | 
| 443   // Also, it should default to the default constructor from |  | 
| 444   // table 49 if typedArray.constructor doesn't exist. |  | 
| 445   return ConstructTypedArray(typedArray.constructor, arg); |  | 
| 446 } |  | 
| 447 |  | 
| 448 |  | 
| 449 function TypedArrayCopyWithin(target, start, end) { | 463 function TypedArrayCopyWithin(target, start, end) { | 
| 450   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 464   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 
| 451 | 465 | 
| 452   var length = %_TypedArrayGetLength(this); | 466   var length = %_TypedArrayGetLength(this); | 
| 453 | 467 | 
| 454   // TODO(littledan): Replace with a memcpy for better performance | 468   // TODO(littledan): Replace with a memcpy for better performance | 
| 455   return InnerArrayCopyWithin(target, start, end, this, length); | 469   return InnerArrayCopyWithin(target, start, end, this, length); | 
| 456 } | 470 } | 
| 457 %FunctionSetLength(TypedArrayCopyWithin, 2); | 471 %FunctionSetLength(TypedArrayCopyWithin, 2); | 
| 458 | 472 | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 492 | 506 | 
| 493 // ES6 draft 07-15-13, section 22.2.3.9 | 507 // ES6 draft 07-15-13, section 22.2.3.9 | 
| 494 function TypedArrayFilter(f, thisArg) { | 508 function TypedArrayFilter(f, thisArg) { | 
| 495   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 509   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 
| 496 | 510 | 
| 497   var length = %_TypedArrayGetLength(this); | 511   var length = %_TypedArrayGetLength(this); | 
| 498   if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); | 512   if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); | 
| 499   var result = new InternalArray(); | 513   var result = new InternalArray(); | 
| 500   InnerArrayFilter(f, thisArg, this, length, result); | 514   InnerArrayFilter(f, thisArg, this, length, result); | 
| 501   var captured = result.length; | 515   var captured = result.length; | 
| 502   var output = ConstructTypedArrayLike(this, captured); | 516   var output = TypedArraySpeciesCreate(this, captured); | 
| 503   for (var i = 0; i < captured; i++) { | 517   for (var i = 0; i < captured; i++) { | 
| 504     output[i] = result[i]; | 518     output[i] = result[i]; | 
| 505   } | 519   } | 
| 506   return output; | 520   return output; | 
| 507 } | 521 } | 
| 508 %FunctionSetLength(TypedArrayFilter, 1); | 522 %FunctionSetLength(TypedArrayFilter, 1); | 
| 509 | 523 | 
| 510 | 524 | 
| 511 // ES6 draft 07-15-13, section 22.2.3.10 | 525 // ES6 draft 07-15-13, section 22.2.3.10 | 
| 512 function TypedArrayFind(predicate, thisArg) { | 526 function TypedArrayFind(predicate, thisArg) { | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 594                         %_ArgumentsLength()); | 608                         %_ArgumentsLength()); | 
| 595 } | 609 } | 
| 596 %FunctionSetLength(TypedArrayLastIndexOf, 1); | 610 %FunctionSetLength(TypedArrayLastIndexOf, 1); | 
| 597 | 611 | 
| 598 | 612 | 
| 599 // ES6 draft 07-15-13, section 22.2.3.18 | 613 // ES6 draft 07-15-13, section 22.2.3.18 | 
| 600 function TypedArrayMap(f, thisArg) { | 614 function TypedArrayMap(f, thisArg) { | 
| 601   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 615   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 
| 602 | 616 | 
| 603   var length = %_TypedArrayGetLength(this); | 617   var length = %_TypedArrayGetLength(this); | 
| 604   var result = ConstructTypedArrayLike(this, length); | 618   var result = TypedArraySpeciesCreate(this, length); | 
| 605   if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); | 619   if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); | 
| 606   for (var i = 0; i < length; i++) { | 620   for (var i = 0; i < length; i++) { | 
| 607     var element = this[i]; | 621     var element = this[i]; | 
| 608     result[i] = %_Call(f, thisArg, element, i, this); | 622     result[i] = %_Call(f, thisArg, element, i, this); | 
| 609   } | 623   } | 
| 610   return result; | 624   return result; | 
| 611 } | 625 } | 
| 612 %FunctionSetLength(TypedArrayMap, 1); | 626 %FunctionSetLength(TypedArrayMap, 1); | 
| 613 | 627 | 
| 614 | 628 | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 692   } | 706   } | 
| 693 | 707 | 
| 694   var final; | 708   var final; | 
| 695   if (relativeEnd < 0) { | 709   if (relativeEnd < 0) { | 
| 696     final = MaxSimple(len + relativeEnd, 0); | 710     final = MaxSimple(len + relativeEnd, 0); | 
| 697   } else { | 711   } else { | 
| 698     final = MinSimple(relativeEnd, len); | 712     final = MinSimple(relativeEnd, len); | 
| 699   } | 713   } | 
| 700 | 714 | 
| 701   var count = MaxSimple(final - k, 0); | 715   var count = MaxSimple(final - k, 0); | 
| 702   var array = ConstructTypedArrayLike(this, count); | 716   var array = TypedArraySpeciesCreate(this, count); | 
| 703   // The code below is the 'then' branch; the 'else' branch species | 717   // The code below is the 'then' branch; the 'else' branch species | 
| 704   // a memcpy. Because V8 doesn't canonicalize NaN, the difference is | 718   // a memcpy. Because V8 doesn't canonicalize NaN, the difference is | 
| 705   // unobservable. | 719   // unobservable. | 
| 706   var n = 0; | 720   var n = 0; | 
| 707   while (k < final) { | 721   while (k < final) { | 
| 708     var kValue = this[k]; | 722     var kValue = this[k]; | 
| 709     // TODO(littledan): The spec says to throw on an error in setting; |  | 
| 710     // does this throw? |  | 
| 711     array[n] = kValue; | 723     array[n] = kValue; | 
| 712     k++; | 724     k++; | 
| 713     n++; | 725     n++; | 
| 714   } | 726   } | 
| 715   return array; | 727   return array; | 
| 716 } | 728 } | 
| 717 | 729 | 
| 718 | 730 | 
| 719 // ES2016 draft, section 22.2.3.14 | 731 // ES2016 draft, section 22.2.3.14 | 
| 720 function TypedArrayIncludes(searchElement, fromIndex) { | 732 function TypedArrayIncludes(searchElement, fromIndex) { | 
| 721   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 733   if (!%_IsTypedArray(this)) throw MakeTypeError(kNotTypedArray); | 
| 722 | 734 | 
| 723   var length = %_TypedArrayGetLength(this); | 735   var length = %_TypedArrayGetLength(this); | 
| 724 | 736 | 
| 725   return InnerArrayIncludes(searchElement, fromIndex, this, length); | 737   return InnerArrayIncludes(searchElement, fromIndex, this, length); | 
| 726 } | 738 } | 
| 727 %FunctionSetLength(TypedArrayIncludes, 1); | 739 %FunctionSetLength(TypedArrayIncludes, 1); | 
| 728 | 740 | 
| 729 | 741 | 
| 730 // ES6 draft 08-24-14, section 22.2.2.2 | 742 // ES6 draft 08-24-14, section 22.2.2.2 | 
| 731 function TypedArrayOf() { | 743 function TypedArrayOf() { | 
| 732   var length = %_ArgumentsLength(); | 744   var length = %_ArgumentsLength(); | 
| 733   var array = new this(length); | 745   var array = TypedArrayCreate(this, length); | 
| 734   for (var i = 0; i < length; i++) { | 746   for (var i = 0; i < length; i++) { | 
| 735     array[i] = %_Arguments(i); | 747     array[i] = %_Arguments(i); | 
| 736   } | 748   } | 
| 737   return array; | 749   return array; | 
| 738 } | 750 } | 
| 739 | 751 | 
| 740 | 752 | 
| 741 function TypedArrayFrom(source, mapfn, thisArg) { | 753 function TypedArrayFrom(source, mapfn, thisArg) { | 
| 742   // TODO(littledan): Investigate if there is a receiver which could be | 754   // TODO(littledan): Investigate if there is a receiver which could be | 
| 743   // faster to accumulate on than Array, e.g., a TypedVector. | 755   // faster to accumulate on than Array, e.g., a TypedVector. | 
|  | 756   // TODO(littledan): Rewrite this code to ensure that things happen | 
|  | 757   // in the right order, e.g., the constructor needs to be called before | 
|  | 758   // the mapping function on array-likes. | 
| 744   var array = %_Call(ArrayFrom, GlobalArray, source, mapfn, thisArg); | 759   var array = %_Call(ArrayFrom, GlobalArray, source, mapfn, thisArg); | 
| 745   return ConstructTypedArray(this, array); | 760   return TypedArrayCreate(this, array); | 
| 746 } | 761 } | 
| 747 %FunctionSetLength(TypedArrayFrom, 1); | 762 %FunctionSetLength(TypedArrayFrom, 1); | 
| 748 | 763 | 
| 749 function TypedArray() { | 764 function TypedArray() { | 
| 750   if (IS_UNDEFINED(new.target)) { | 765   if (IS_UNDEFINED(new.target)) { | 
| 751     throw MakeTypeError(kConstructorNonCallable, "TypedArray"); | 766     throw MakeTypeError(kConstructorNonCallable, "TypedArray"); | 
| 752   } | 767   } | 
| 753   if (new.target === TypedArray) { | 768   if (new.target === TypedArray) { | 
| 754     throw MakeTypeError(kConstructAbstractClass, "TypedArray"); | 769     throw MakeTypeError(kConstructAbstractClass, "TypedArray"); | 
| 755   } | 770   } | 
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 944   "setUint32", DataViewSetUint32JS, | 959   "setUint32", DataViewSetUint32JS, | 
| 945 | 960 | 
| 946   "getFloat32", DataViewGetFloat32JS, | 961   "getFloat32", DataViewGetFloat32JS, | 
| 947   "setFloat32", DataViewSetFloat32JS, | 962   "setFloat32", DataViewSetFloat32JS, | 
| 948 | 963 | 
| 949   "getFloat64", DataViewGetFloat64JS, | 964   "getFloat64", DataViewGetFloat64JS, | 
| 950   "setFloat64", DataViewSetFloat64JS | 965   "setFloat64", DataViewSetFloat64JS | 
| 951 ]); | 966 ]); | 
| 952 | 967 | 
| 953 }) | 968 }) | 
| OLD | NEW | 
|---|