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

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

Issue 1922453002: Migrate Object.getPrototypeOf from v8natives to builtins. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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 | « src/contexts.h ('k') | src/js/messages.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
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 from = high_start; 891 from = high_start;
892 } 892 }
893 } 893 }
894 }; 894 };
895 895
896 // Copy elements in the range 0..length from obj's prototype chain 896 // Copy elements in the range 0..length from obj's prototype chain
897 // to obj itself, if obj has holes. Return one more than the maximal index 897 // to obj itself, if obj has holes. Return one more than the maximal index
898 // of a prototype property. 898 // of a prototype property.
899 var CopyFromPrototype = function CopyFromPrototype(obj, length) { 899 var CopyFromPrototype = function CopyFromPrototype(obj, length) {
900 var max = 0; 900 var max = 0;
901 for (var proto = %_GetPrototype(obj); proto; proto = %_GetPrototype(proto)) { 901 for (var proto = %object_get_prototype_of(obj); proto;
902 proto = %object_get_prototype_of(proto)) {
902 var indices = IS_PROXY(proto) ? length : %GetArrayKeys(proto, length); 903 var indices = IS_PROXY(proto) ? length : %GetArrayKeys(proto, length);
903 if (IS_NUMBER(indices)) { 904 if (IS_NUMBER(indices)) {
904 // It's an interval. 905 // It's an interval.
905 var proto_length = indices; 906 var proto_length = indices;
906 for (var i = 0; i < proto_length; i++) { 907 for (var i = 0; i < proto_length; i++) {
907 if (!HAS_OWN_PROPERTY(obj, i) && HAS_OWN_PROPERTY(proto, i)) { 908 if (!HAS_OWN_PROPERTY(obj, i) && HAS_OWN_PROPERTY(proto, i)) {
908 obj[i] = proto[i]; 909 obj[i] = proto[i];
909 if (i >= max) { max = i + 1; } 910 if (i >= max) { max = i + 1; }
910 } 911 }
911 } 912 }
912 } else { 913 } else {
913 for (var i = 0; i < indices.length; i++) { 914 for (var i = 0; i < indices.length; i++) {
914 var index = indices[i]; 915 var index = indices[i];
915 if (!HAS_OWN_PROPERTY(obj, index) && HAS_OWN_PROPERTY(proto, index)) { 916 if (!HAS_OWN_PROPERTY(obj, index) && HAS_OWN_PROPERTY(proto, index)) {
916 obj[index] = proto[index]; 917 obj[index] = proto[index];
917 if (index >= max) { max = index + 1; } 918 if (index >= max) { max = index + 1; }
918 } 919 }
919 } 920 }
920 } 921 }
921 } 922 }
922 return max; 923 return max;
923 }; 924 };
924 925
925 // Set a value of "undefined" on all indices in the range from..to 926 // Set a value of "undefined" on all indices in the range from..to
926 // where a prototype of obj has an element. I.e., shadow all prototype 927 // where a prototype of obj has an element. I.e., shadow all prototype
927 // elements in that range. 928 // elements in that range.
928 var ShadowPrototypeElements = function(obj, from, to) { 929 var ShadowPrototypeElements = function(obj, from, to) {
929 for (var proto = %_GetPrototype(obj); proto; proto = %_GetPrototype(proto)) { 930 for (var proto = %object_get_prototype_of(obj); proto;
931 proto = %object_get_prototype_of(proto)) {
930 var indices = IS_PROXY(proto) ? to : %GetArrayKeys(proto, to); 932 var indices = IS_PROXY(proto) ? to : %GetArrayKeys(proto, to);
931 if (IS_NUMBER(indices)) { 933 if (IS_NUMBER(indices)) {
932 // It's an interval. 934 // It's an interval.
933 var proto_length = indices; 935 var proto_length = indices;
934 for (var i = from; i < proto_length; i++) { 936 for (var i = from; i < proto_length; i++) {
935 if (HAS_OWN_PROPERTY(proto, i)) { 937 if (HAS_OWN_PROPERTY(proto, i)) {
936 obj[i] = UNDEFINED; 938 obj[i] = UNDEFINED;
937 } 939 }
938 } 940 }
939 } else { 941 } else {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 // of defined elements. 988 // of defined elements.
987 if (!IS_UNDEFINED(obj[first_undefined])) first_undefined++; 989 if (!IS_UNDEFINED(obj[first_undefined])) first_undefined++;
988 // Fill in the undefineds and the holes. There may be a hole where 990 // Fill in the undefineds and the holes. There may be a hole where
989 // an undefined should be and vice versa. 991 // an undefined should be and vice versa.
990 var i; 992 var i;
991 for (i = first_undefined; i < length - num_holes; i++) { 993 for (i = first_undefined; i < length - num_holes; i++) {
992 obj[i] = UNDEFINED; 994 obj[i] = UNDEFINED;
993 } 995 }
994 for (i = length - num_holes; i < length; i++) { 996 for (i = length - num_holes; i < length; i++) {
995 // For compatability with Webkit, do not expose elements in the prototype. 997 // For compatability with Webkit, do not expose elements in the prototype.
996 if (i in %_GetPrototype(obj)) { 998 if (i in %object_get_prototype_of(obj)) {
997 obj[i] = UNDEFINED; 999 obj[i] = UNDEFINED;
998 } else { 1000 } else {
999 delete obj[i]; 1001 delete obj[i];
1000 } 1002 }
1001 } 1003 }
1002 1004
1003 // Return the number of defined elements. 1005 // Return the number of defined elements.
1004 return first_undefined; 1006 return first_undefined;
1005 }; 1007 };
1006 1008
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
1794 %InstallToContext([ 1796 %InstallToContext([
1795 "array_pop", ArrayPop, 1797 "array_pop", ArrayPop,
1796 "array_push", ArrayPush, 1798 "array_push", ArrayPush,
1797 "array_shift", ArrayShift, 1799 "array_shift", ArrayShift,
1798 "array_splice", ArraySplice, 1800 "array_splice", ArraySplice,
1799 "array_slice", ArraySlice, 1801 "array_slice", ArraySlice,
1800 "array_unshift", ArrayUnshift, 1802 "array_unshift", ArrayUnshift,
1801 ]); 1803 ]);
1802 1804
1803 }); 1805 });
OLDNEW
« no previous file with comments | « src/contexts.h ('k') | src/js/messages.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698