Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: src/js/array.js

Issue 1396323011: Native context: use import/export for Object observe related functions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/js/harmony-object-observe.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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, extrasUtils) { 5 (function(global, utils, extrasUtils) {
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 Delete; 14 var Delete;
15 var GlobalArray = global.Array; 15 var GlobalArray = global.Array;
16 var InternalArray = utils.InternalArray; 16 var InternalArray = utils.InternalArray;
17 var InternalPackedArray = utils.InternalPackedArray; 17 var InternalPackedArray = utils.InternalPackedArray;
18 var MathMin; 18 var MathMin;
19 var ObjectHasOwnProperty; 19 var ObjectHasOwnProperty;
20 var ObjectIsFrozen; 20 var ObjectIsFrozen;
21 var ObjectIsSealed; 21 var ObjectIsSealed;
22 var ObjectToString; 22 var ObjectToString;
23 var ObserveBeginPerformSplice;
24 var ObserveEndPerformSplice;
25 var ObserveEnqueueSpliceRecord;
23 var unscopablesSymbol = utils.ImportNow("unscopables_symbol"); 26 var unscopablesSymbol = utils.ImportNow("unscopables_symbol");
24 27
25 utils.Import(function(from) { 28 utils.Import(function(from) {
26 Delete = from.Delete; 29 Delete = from.Delete;
27 MathMin = from.MathMin; 30 MathMin = from.MathMin;
28 ObjectHasOwnProperty = from.ObjectHasOwnProperty; 31 ObjectHasOwnProperty = from.ObjectHasOwnProperty;
29 ObjectIsFrozen = from.ObjectIsFrozen; 32 ObjectIsFrozen = from.ObjectIsFrozen;
30 ObjectIsSealed = from.ObjectIsSealed; 33 ObjectIsSealed = from.ObjectIsSealed;
31 ObjectToString = from.ObjectToString; 34 ObjectToString = from.ObjectToString;
35 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice;
36 ObserveEndPerformSplice = from.ObserveEndPerformSplice;
37 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord;
32 }); 38 });
33 39
34 // ------------------------------------------------------------------- 40 // -------------------------------------------------------------------
35 41
36 // Global list of arrays visited during toString, toLocaleString and 42 // Global list of arrays visited during toString, toLocaleString and
37 // join invocations. 43 // join invocations.
38 var visited_arrays = new InternalArray(); 44 var visited_arrays = new InternalArray();
39 45
40 46
41 // Gets a sorted array of array keys. Useful for operations on sparse 47 // Gets a sorted array of array keys. Useful for operations on sparse
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 436
431 return InnerArrayJoin(separator, array, length); 437 return InnerArrayJoin(separator, array, length);
432 } 438 }
433 439
434 440
435 function ObservedArrayPop(n) { 441 function ObservedArrayPop(n) {
436 n--; 442 n--;
437 var value = this[n]; 443 var value = this[n];
438 444
439 try { 445 try {
440 $observeBeginPerformSplice(this); 446 ObserveBeginPerformSplice(this);
441 delete this[n]; 447 delete this[n];
442 this.length = n; 448 this.length = n;
443 } finally { 449 } finally {
444 $observeEndPerformSplice(this); 450 ObserveEndPerformSplice(this);
445 $observeEnqueueSpliceRecord(this, n, [value], 0); 451 ObserveEnqueueSpliceRecord(this, n, [value], 0);
446 } 452 }
447 453
448 return value; 454 return value;
449 } 455 }
450 456
451 457
452 // Removes the last element from the array and returns it. See 458 // Removes the last element from the array and returns it. See
453 // ECMA-262, section 15.4.4.6. 459 // ECMA-262, section 15.4.4.6.
454 function ArrayPop() { 460 function ArrayPop() {
455 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop"); 461 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop");
(...skipping 14 matching lines...) Expand all
470 array.length = n; 476 array.length = n;
471 return value; 477 return value;
472 } 478 }
473 479
474 480
475 function ObservedArrayPush() { 481 function ObservedArrayPush() {
476 var n = TO_LENGTH_OR_UINT32(this.length); 482 var n = TO_LENGTH_OR_UINT32(this.length);
477 var m = %_ArgumentsLength(); 483 var m = %_ArgumentsLength();
478 484
479 try { 485 try {
480 $observeBeginPerformSplice(this); 486 ObserveBeginPerformSplice(this);
481 for (var i = 0; i < m; i++) { 487 for (var i = 0; i < m; i++) {
482 this[i+n] = %_Arguments(i); 488 this[i+n] = %_Arguments(i);
483 } 489 }
484 var new_length = n + m; 490 var new_length = n + m;
485 this.length = new_length; 491 this.length = new_length;
486 } finally { 492 } finally {
487 $observeEndPerformSplice(this); 493 ObserveEndPerformSplice(this);
488 $observeEnqueueSpliceRecord(this, n, [], m); 494 ObserveEnqueueSpliceRecord(this, n, [], m);
489 } 495 }
490 496
491 return new_length; 497 return new_length;
492 } 498 }
493 499
494 500
495 // Appends the arguments to the end of the array and returns the new 501 // Appends the arguments to the end of the array and returns the new
496 // length of the array. See ECMA-262, section 15.4.4.7. 502 // length of the array. See ECMA-262, section 15.4.4.7.
497 function ArrayPush() { 503 function ArrayPush() {
498 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push"); 504 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push");
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 } else { 616 } else {
611 return GenericArrayReverse(array, len); 617 return GenericArrayReverse(array, len);
612 } 618 }
613 } 619 }
614 620
615 621
616 function ObservedArrayShift(len) { 622 function ObservedArrayShift(len) {
617 var first = this[0]; 623 var first = this[0];
618 624
619 try { 625 try {
620 $observeBeginPerformSplice(this); 626 ObserveBeginPerformSplice(this);
621 SimpleMove(this, 0, 1, len, 0); 627 SimpleMove(this, 0, 1, len, 0);
622 this.length = len - 1; 628 this.length = len - 1;
623 } finally { 629 } finally {
624 $observeEndPerformSplice(this); 630 ObserveEndPerformSplice(this);
625 $observeEnqueueSpliceRecord(this, 0, [first], 0); 631 ObserveEnqueueSpliceRecord(this, 0, [first], 0);
626 } 632 }
627 633
628 return first; 634 return first;
629 } 635 }
630 636
631 637
632 function ArrayShift() { 638 function ArrayShift() {
633 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); 639 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift");
634 640
635 var array = TO_OBJECT(this); 641 var array = TO_OBJECT(this);
(...skipping 21 matching lines...) Expand all
657 663
658 return first; 664 return first;
659 } 665 }
660 666
661 667
662 function ObservedArrayUnshift() { 668 function ObservedArrayUnshift() {
663 var len = TO_LENGTH_OR_UINT32(this.length); 669 var len = TO_LENGTH_OR_UINT32(this.length);
664 var num_arguments = %_ArgumentsLength(); 670 var num_arguments = %_ArgumentsLength();
665 671
666 try { 672 try {
667 $observeBeginPerformSplice(this); 673 ObserveBeginPerformSplice(this);
668 SimpleMove(this, 0, 0, len, num_arguments); 674 SimpleMove(this, 0, 0, len, num_arguments);
669 for (var i = 0; i < num_arguments; i++) { 675 for (var i = 0; i < num_arguments; i++) {
670 this[i] = %_Arguments(i); 676 this[i] = %_Arguments(i);
671 } 677 }
672 var new_length = len + num_arguments; 678 var new_length = len + num_arguments;
673 this.length = new_length; 679 this.length = new_length;
674 } finally { 680 } finally {
675 $observeEndPerformSplice(this); 681 ObserveEndPerformSplice(this);
676 $observeEnqueueSpliceRecord(this, 0, [], num_arguments); 682 ObserveEnqueueSpliceRecord(this, 0, [], num_arguments);
677 } 683 }
678 684
679 return new_length; 685 return new_length;
680 } 686 }
681 687
682 688
683 function ArrayUnshift(arg1) { // length == 1 689 function ArrayUnshift(arg1) { // length == 1
684 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift"); 690 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift");
685 691
686 if (%IsObserved(this)) 692 if (%IsObserved(this))
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 var num_arguments = %_ArgumentsLength(); 790 var num_arguments = %_ArgumentsLength();
785 var len = TO_LENGTH_OR_UINT32(this.length); 791 var len = TO_LENGTH_OR_UINT32(this.length);
786 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len); 792 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len);
787 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len, 793 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len,
788 start_i); 794 start_i);
789 var deleted_elements = []; 795 var deleted_elements = [];
790 deleted_elements.length = del_count; 796 deleted_elements.length = del_count;
791 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0; 797 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0;
792 798
793 try { 799 try {
794 $observeBeginPerformSplice(this); 800 ObserveBeginPerformSplice(this);
795 801
796 SimpleSlice(this, start_i, del_count, len, deleted_elements); 802 SimpleSlice(this, start_i, del_count, len, deleted_elements);
797 SimpleMove(this, start_i, del_count, len, num_elements_to_add); 803 SimpleMove(this, start_i, del_count, len, num_elements_to_add);
798 804
799 // Insert the arguments into the resulting array in 805 // Insert the arguments into the resulting array in
800 // place of the deleted elements. 806 // place of the deleted elements.
801 var i = start_i; 807 var i = start_i;
802 var arguments_index = 2; 808 var arguments_index = 2;
803 var arguments_length = %_ArgumentsLength(); 809 var arguments_length = %_ArgumentsLength();
804 while (arguments_index < arguments_length) { 810 while (arguments_index < arguments_length) {
805 this[i++] = %_Arguments(arguments_index++); 811 this[i++] = %_Arguments(arguments_index++);
806 } 812 }
807 this.length = len - del_count + num_elements_to_add; 813 this.length = len - del_count + num_elements_to_add;
808 814
809 } finally { 815 } finally {
810 $observeEndPerformSplice(this); 816 ObserveEndPerformSplice(this);
811 if (deleted_elements.length || num_elements_to_add) { 817 if (deleted_elements.length || num_elements_to_add) {
812 $observeEnqueueSpliceRecord(this, 818 ObserveEnqueueSpliceRecord(this,
813 start_i, 819 start_i,
814 deleted_elements.slice(), 820 deleted_elements.slice(),
815 num_elements_to_add); 821 num_elements_to_add);
816 } 822 }
817 } 823 }
818 824
819 // Return the deleted elements. 825 // Return the deleted elements.
820 return deleted_elements; 826 return deleted_elements;
821 } 827 }
822 828
823 829
824 function ArraySplice(start, delete_count) { 830 function ArraySplice(start, delete_count) {
825 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice"); 831 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice");
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after
1661 %InstallToContext([ 1667 %InstallToContext([
1662 "array_pop", ArrayPop, 1668 "array_pop", ArrayPop,
1663 "array_push", ArrayPush, 1669 "array_push", ArrayPush,
1664 "array_shift", ArrayShift, 1670 "array_shift", ArrayShift,
1665 "array_splice", ArraySplice, 1671 "array_splice", ArraySplice,
1666 "array_slice", ArraySlice, 1672 "array_slice", ArraySlice,
1667 "array_unshift", ArrayUnshift, 1673 "array_unshift", ArrayUnshift,
1668 ]); 1674 ]);
1669 1675
1670 }); 1676 });
OLDNEW
« no previous file with comments | « no previous file | src/js/harmony-object-observe.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698