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

Side by Side Diff: src/v8natives.js

Issue 1086813005: Wrap object observe implementation in a function. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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/object-observe.js ('k') | no next file » | 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 // This file relies on the fact that the following declarations have been made 5 // This file relies on the fact that the following declarations have been made
6 // in runtime.js: 6 // in runtime.js:
7 // var $Object = global.Object; 7 // var $Object = global.Object;
8 // var $Boolean = global.Boolean; 8 // var $Boolean = global.Boolean;
9 // var $Number = global.Number; 9 // var $Number = global.Number;
10 // var $Function = global.Function; 10 // var $Function = global.Function;
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 throw MakeTypeError("redefine_disallowed", [p]); 902 throw MakeTypeError("redefine_disallowed", [p]);
903 } else { 903 } else {
904 return false; 904 return false;
905 } 905 }
906 } 906 }
907 var threw = false; 907 var threw = false;
908 908
909 var emit_splice = %IsObserved(obj) && new_length !== old_length; 909 var emit_splice = %IsObserved(obj) && new_length !== old_length;
910 var removed; 910 var removed;
911 if (emit_splice) { 911 if (emit_splice) {
912 BeginPerformSplice(obj); 912 $observeBeginPerformSplice(obj);
913 removed = []; 913 removed = [];
914 if (new_length < old_length) 914 if (new_length < old_length)
915 removed.length = old_length - new_length; 915 removed.length = old_length - new_length;
916 } 916 }
917 917
918 while (new_length < length--) { 918 while (new_length < length--) {
919 var index = ToString(length); 919 var index = ToString(length);
920 if (emit_splice) { 920 if (emit_splice) {
921 var deletedDesc = GetOwnPropertyJS(obj, index); 921 var deletedDesc = GetOwnPropertyJS(obj, index);
922 if (deletedDesc && deletedDesc.hasValue()) 922 if (deletedDesc && deletedDesc.hasValue())
923 removed[length - new_length] = deletedDesc.getValue(); 923 removed[length - new_length] = deletedDesc.getValue();
924 } 924 }
925 if (!Delete(obj, index, false)) { 925 if (!Delete(obj, index, false)) {
926 new_length = length + 1; 926 new_length = length + 1;
927 threw = true; 927 threw = true;
928 break; 928 break;
929 } 929 }
930 } 930 }
931 threw = !DefineObjectProperty(obj, "length", desc, should_throw) || threw; 931 threw = !DefineObjectProperty(obj, "length", desc, should_throw) || threw;
932 if (emit_splice) { 932 if (emit_splice) {
933 EndPerformSplice(obj); 933 $observeEndPerformSplice(obj);
934 EnqueueSpliceRecord(obj, 934 $observeEnqueueSpliceRecord(obj,
935 new_length < old_length ? new_length : old_length, 935 new_length < old_length ? new_length : old_length,
936 removed, 936 removed,
937 new_length > old_length ? new_length - old_length : 0); 937 new_length > old_length ? new_length - old_length : 0);
938 } 938 }
939 if (threw) { 939 if (threw) {
940 if (should_throw) { 940 if (should_throw) {
941 throw MakeTypeError("redefine_disallowed", [p]); 941 throw MakeTypeError("redefine_disallowed", [p]);
942 } else { 942 } else {
943 return false; 943 return false;
944 } 944 }
945 } 945 }
946 return true; 946 return true;
947 } 947 }
948 948
949 // Step 4 - Special handling for array index. 949 // Step 4 - Special handling for array index.
950 if (!IS_SYMBOL(p)) { 950 if (!IS_SYMBOL(p)) {
951 var index = ToUint32(p); 951 var index = ToUint32(p);
952 var emit_splice = false; 952 var emit_splice = false;
953 if (ToString(index) == p && index != 4294967295) { 953 if (ToString(index) == p && index != 4294967295) {
954 var length = obj.length; 954 var length = obj.length;
955 if (index >= length && %IsObserved(obj)) { 955 if (index >= length && %IsObserved(obj)) {
956 emit_splice = true; 956 emit_splice = true;
957 BeginPerformSplice(obj); 957 $observeBeginPerformSplice(obj);
958 } 958 }
959 959
960 var length_desc = GetOwnPropertyJS(obj, "length"); 960 var length_desc = GetOwnPropertyJS(obj, "length");
961 if ((index >= length && !length_desc.isWritable()) || 961 if ((index >= length && !length_desc.isWritable()) ||
962 !DefineObjectProperty(obj, p, desc, true)) { 962 !DefineObjectProperty(obj, p, desc, true)) {
963 if (emit_splice) 963 if (emit_splice)
964 EndPerformSplice(obj); 964 $observeEndPerformSplice(obj);
965 if (should_throw) { 965 if (should_throw) {
966 throw MakeTypeError("define_disallowed", [p]); 966 throw MakeTypeError("define_disallowed", [p]);
967 } else { 967 } else {
968 return false; 968 return false;
969 } 969 }
970 } 970 }
971 if (index >= length) { 971 if (index >= length) {
972 obj.length = index + 1; 972 obj.length = index + 1;
973 } 973 }
974 if (emit_splice) { 974 if (emit_splice) {
975 EndPerformSplice(obj); 975 $observeEndPerformSplice(obj);
976 EnqueueSpliceRecord(obj, length, [], index + 1 - length); 976 $observeEnqueueSpliceRecord(obj, length, [], index + 1 - length);
977 } 977 }
978 return true; 978 return true;
979 } 979 }
980 } 980 }
981 981
982 // Step 5 - Fallback to default implementation. 982 // Step 5 - Fallback to default implementation.
983 return DefineObjectProperty(obj, p, desc, should_throw); 983 return DefineObjectProperty(obj, p, desc, should_throw);
984 } 984 }
985 985
986 986
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
1914 } 1914 }
1915 if (!IS_SPEC_FUNCTION(method)) { 1915 if (!IS_SPEC_FUNCTION(method)) {
1916 throw MakeTypeError('not_iterable', [obj]); 1916 throw MakeTypeError('not_iterable', [obj]);
1917 } 1917 }
1918 var iterator = %_CallFunction(obj, method); 1918 var iterator = %_CallFunction(obj, method);
1919 if (!IS_SPEC_OBJECT(iterator)) { 1919 if (!IS_SPEC_OBJECT(iterator)) {
1920 throw MakeTypeError('not_an_iterator', [iterator]); 1920 throw MakeTypeError('not_an_iterator', [iterator]);
1921 } 1921 }
1922 return iterator; 1922 return iterator;
1923 } 1923 }
OLDNEW
« no previous file with comments | « src/object-observe.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698