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 |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 function TypedArrayReduceRight(callback, current) { | 532 function TypedArrayReduceRight(callback, current) { |
533 if (!IS_TYPEDARRAY(this)) throw %make_type_error(kNotTypedArray); | 533 if (!IS_TYPEDARRAY(this)) throw %make_type_error(kNotTypedArray); |
534 | 534 |
535 var length = %_TypedArrayGetLength(this); | 535 var length = %_TypedArrayGetLength(this); |
536 return InnerArrayReduceRight(callback, current, this, length, | 536 return InnerArrayReduceRight(callback, current, this, length, |
537 arguments.length); | 537 arguments.length); |
538 } | 538 } |
539 %FunctionSetLength(TypedArrayReduceRight, 1); | 539 %FunctionSetLength(TypedArrayReduceRight, 1); |
540 | 540 |
541 | 541 |
542 function TypedArraySlice(start, end) { | |
543 if (!IS_TYPEDARRAY(this)) throw %make_type_error(kNotTypedArray); | |
544 var len = %_TypedArrayGetLength(this); | |
545 | |
546 var relativeStart = TO_INTEGER(start); | |
547 | |
548 var k; | |
549 if (relativeStart < 0) { | |
550 k = MaxSimple(len + relativeStart, 0); | |
551 } else { | |
552 k = MinSimple(relativeStart, len); | |
553 } | |
554 | |
555 var relativeEnd; | |
556 if (IS_UNDEFINED(end)) { | |
557 relativeEnd = len; | |
558 } else { | |
559 relativeEnd = TO_INTEGER(end); | |
560 } | |
561 | |
562 var final; | |
563 if (relativeEnd < 0) { | |
564 final = MaxSimple(len + relativeEnd, 0); | |
565 } else { | |
566 final = MinSimple(relativeEnd, len); | |
567 } | |
568 | |
569 var count = MaxSimple(final - k, 0); | |
570 var array = TypedArraySpeciesCreate(this, count); | |
571 // The code below is the 'then' branch; the 'else' branch species | |
572 // a memcpy. Because V8 doesn't canonicalize NaN, the difference is | |
573 // unobservable. | |
574 var n = 0; | |
575 while (k < final) { | |
576 var kValue = this[k]; | |
577 array[n] = kValue; | |
578 k++; | |
579 n++; | |
580 } | |
581 return array; | |
582 } | |
583 | |
584 | |
585 // ES6 draft 08-24-14, section 22.2.2.2 | 542 // ES6 draft 08-24-14, section 22.2.2.2 |
586 function TypedArrayOf() { | 543 function TypedArrayOf() { |
587 var length = arguments.length; | 544 var length = arguments.length; |
588 var array = TypedArrayCreate(this, length); | 545 var array = TypedArrayCreate(this, length); |
589 for (var i = 0; i < length; i++) { | 546 for (var i = 0; i < length; i++) { |
590 array[i] = arguments[i]; | 547 array[i] = arguments[i]; |
591 } | 548 } |
592 return array; | 549 return array; |
593 } | 550 } |
594 | 551 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 "fill", TypedArrayFill, | 618 "fill", TypedArrayFill, |
662 "filter", TypedArrayFilter, | 619 "filter", TypedArrayFilter, |
663 "find", TypedArrayFind, | 620 "find", TypedArrayFind, |
664 "findIndex", TypedArrayFindIndex, | 621 "findIndex", TypedArrayFindIndex, |
665 "join", TypedArrayJoin, | 622 "join", TypedArrayJoin, |
666 "forEach", TypedArrayForEach, | 623 "forEach", TypedArrayForEach, |
667 "map", TypedArrayMap, | 624 "map", TypedArrayMap, |
668 "reduce", TypedArrayReduce, | 625 "reduce", TypedArrayReduce, |
669 "reduceRight", TypedArrayReduceRight, | 626 "reduceRight", TypedArrayReduceRight, |
670 "reverse", TypedArrayReverse, | 627 "reverse", TypedArrayReverse, |
671 "slice", TypedArraySlice, | |
672 "some", TypedArraySome, | 628 "some", TypedArraySome, |
673 "sort", TypedArraySort, | 629 "sort", TypedArraySort, |
674 "toLocaleString", TypedArrayToLocaleString | 630 "toLocaleString", TypedArrayToLocaleString |
675 ]); | 631 ]); |
676 | 632 |
677 %AddNamedProperty(GlobalTypedArray.prototype, "toString", ArrayToString, | 633 %AddNamedProperty(GlobalTypedArray.prototype, "toString", ArrayToString, |
678 DONT_ENUM); | 634 DONT_ENUM); |
679 | 635 |
680 | 636 |
681 macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) | 637 macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) |
682 %SetCode(GlobalNAME, NAMEConstructor); | 638 %SetCode(GlobalNAME, NAMEConstructor); |
683 %FunctionSetPrototype(GlobalNAME, new GlobalObject()); | 639 %FunctionSetPrototype(GlobalNAME, new GlobalObject()); |
684 %InternalSetPrototype(GlobalNAME, GlobalTypedArray); | 640 %InternalSetPrototype(GlobalNAME, GlobalTypedArray); |
685 %InternalSetPrototype(GlobalNAME.prototype, GlobalTypedArray.prototype); | 641 %InternalSetPrototype(GlobalNAME.prototype, GlobalTypedArray.prototype); |
686 | 642 |
687 %AddNamedProperty(GlobalNAME, "BYTES_PER_ELEMENT", ELEMENT_SIZE, | 643 %AddNamedProperty(GlobalNAME, "BYTES_PER_ELEMENT", ELEMENT_SIZE, |
688 READ_ONLY | DONT_ENUM | DONT_DELETE); | 644 READ_ONLY | DONT_ENUM | DONT_DELETE); |
689 | 645 |
690 %AddNamedProperty(GlobalNAME.prototype, | 646 %AddNamedProperty(GlobalNAME.prototype, |
691 "constructor", global.NAME, DONT_ENUM); | 647 "constructor", global.NAME, DONT_ENUM); |
692 %AddNamedProperty(GlobalNAME.prototype, | 648 %AddNamedProperty(GlobalNAME.prototype, |
693 "BYTES_PER_ELEMENT", ELEMENT_SIZE, | 649 "BYTES_PER_ELEMENT", ELEMENT_SIZE, |
694 READ_ONLY | DONT_ENUM | DONT_DELETE); | 650 READ_ONLY | DONT_ENUM | DONT_DELETE); |
695 endmacro | 651 endmacro |
696 | 652 |
697 TYPED_ARRAYS(SETUP_TYPED_ARRAY) | 653 TYPED_ARRAYS(SETUP_TYPED_ARRAY) |
698 | 654 |
699 }) | 655 }) |
OLD | NEW |