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

Side by Side Diff: src/builtins.cc

Issue 1785403002: [runtime] split up loops with HandleScopes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: addressing comment Created 4 years, 9 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/isolate.h » ('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 #include "src/builtins.h" 5 #include "src/builtins.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/api-natives.h" 9 #include "src/api-natives.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 } 797 }
798 798
799 private: 799 private:
800 // Convert storage to dictionary mode. 800 // Convert storage to dictionary mode.
801 void SetDictionaryMode() { 801 void SetDictionaryMode() {
802 DCHECK(fast_elements() && is_fixed_array()); 802 DCHECK(fast_elements() && is_fixed_array());
803 Handle<FixedArray> current_storage = storage_fixed_array(); 803 Handle<FixedArray> current_storage = storage_fixed_array();
804 Handle<SeededNumberDictionary> slow_storage( 804 Handle<SeededNumberDictionary> slow_storage(
805 SeededNumberDictionary::New(isolate_, current_storage->length())); 805 SeededNumberDictionary::New(isolate_, current_storage->length()));
806 uint32_t current_length = static_cast<uint32_t>(current_storage->length()); 806 uint32_t current_length = static_cast<uint32_t>(current_storage->length());
807 for (uint32_t i = 0; i < current_length; i++) { 807 FOR_WITH_HANDLE_SCOPE(
808 HandleScope loop_scope(isolate_); 808 isolate_, uint32_t, i = 0, i, i < current_length, i++, {
809 Handle<Object> element(current_storage->get(i), isolate_); 809 Handle<Object> element(current_storage->get(i), isolate_);
810 if (!element->IsTheHole()) { 810 if (!element->IsTheHole()) {
811 // The object holding this backing store has just been allocated, so 811 // The object holding this backing store has just been allocated, so
812 // it cannot yet be used as a prototype. 812 // it cannot yet be used as a prototype.
813 Handle<SeededNumberDictionary> new_storage = 813 Handle<SeededNumberDictionary> new_storage =
814 SeededNumberDictionary::AtNumberPut(slow_storage, i, element, 814 SeededNumberDictionary::AtNumberPut(slow_storage, i, element,
815 false); 815 false);
816 if (!new_storage.is_identical_to(slow_storage)) { 816 if (!new_storage.is_identical_to(slow_storage)) {
817 slow_storage = loop_scope.CloseAndEscape(new_storage); 817 slow_storage = loop_scope.CloseAndEscape(new_storage);
818 } 818 }
819 } 819 }
820 } 820 });
821 clear_storage(); 821 clear_storage();
822 set_storage(*slow_storage); 822 set_storage(*slow_storage);
823 set_fast_elements(false); 823 set_fast_elements(false);
824 } 824 }
825 825
826 inline void clear_storage() { 826 inline void clear_storage() {
827 GlobalHandles::Destroy(Handle<Object>::cast(storage_).location()); 827 GlobalHandles::Destroy(Handle<Object>::cast(storage_).location());
828 } 828 }
829 829
830 inline void set_storage(FixedArray* storage) { 830 inline void set_storage(FixedArray* storage) {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 if (!elements->is_the_hole(i)) { 963 if (!elements->is_the_hole(i)) {
964 indices->Add(i); 964 indices->Add(i);
965 } 965 }
966 } 966 }
967 break; 967 break;
968 } 968 }
969 case DICTIONARY_ELEMENTS: { 969 case DICTIONARY_ELEMENTS: {
970 Handle<SeededNumberDictionary> dict( 970 Handle<SeededNumberDictionary> dict(
971 SeededNumberDictionary::cast(object->elements())); 971 SeededNumberDictionary::cast(object->elements()));
972 uint32_t capacity = dict->Capacity(); 972 uint32_t capacity = dict->Capacity();
973 for (uint32_t j = 0; j < capacity; j++) { 973 FOR_WITH_HANDLE_SCOPE(isolate, uint32_t, j = 0, j, j < capacity, j++, {
974 HandleScope loop_scope(isolate);
975 Handle<Object> k(dict->KeyAt(j), isolate); 974 Handle<Object> k(dict->KeyAt(j), isolate);
976 if (dict->IsKey(*k)) { 975 if (dict->IsKey(*k)) {
977 DCHECK(k->IsNumber()); 976 DCHECK(k->IsNumber());
978 uint32_t index = static_cast<uint32_t>(k->Number()); 977 uint32_t index = static_cast<uint32_t>(k->Number());
979 if (index < range) { 978 if (index < range) {
980 indices->Add(index); 979 indices->Add(index);
981 } 980 }
982 } 981 }
983 } 982 });
984 break; 983 break;
985 } 984 }
986 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) case TYPE##_ELEMENTS: 985 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) case TYPE##_ELEMENTS:
987 986
988 TYPED_ARRAYS(TYPED_ARRAY_CASE) 987 TYPED_ARRAYS(TYPED_ARRAY_CASE)
989 #undef TYPED_ARRAY_CASE 988 #undef TYPED_ARRAY_CASE
990 { 989 {
991 uint32_t length = static_cast<uint32_t>( 990 uint32_t length = static_cast<uint32_t>(
992 FixedArrayBase::cast(object->elements())->length()); 991 FixedArrayBase::cast(object->elements())->length());
993 if (range <= length) { 992 if (range <= length) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 // The prototype will usually have no inherited element indices, 1040 // The prototype will usually have no inherited element indices,
1042 // but we have to check. 1041 // but we have to check.
1043 CollectElementIndices(PrototypeIterator::GetCurrent<JSObject>(iter), range, 1042 CollectElementIndices(PrototypeIterator::GetCurrent<JSObject>(iter), range,
1044 indices); 1043 indices);
1045 } 1044 }
1046 } 1045 }
1047 1046
1048 1047
1049 bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver, 1048 bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver,
1050 uint32_t length, ArrayConcatVisitor* visitor) { 1049 uint32_t length, ArrayConcatVisitor* visitor) {
1051 for (uint32_t i = 0; i < length; ++i) { 1050 FOR_WITH_HANDLE_SCOPE(isolate, uint32_t, i = 0, i, i < length, ++i, {
1052 HandleScope loop_scope(isolate);
1053 Maybe<bool> maybe = JSReceiver::HasElement(receiver, i); 1051 Maybe<bool> maybe = JSReceiver::HasElement(receiver, i);
1054 if (!maybe.IsJust()) return false; 1052 if (!maybe.IsJust()) return false;
1055 if (maybe.FromJust()) { 1053 if (maybe.FromJust()) {
1056 Handle<Object> element_value; 1054 Handle<Object> element_value;
1057 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 1055 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
1058 isolate, element_value, JSReceiver::GetElement(isolate, receiver, i), 1056 isolate, element_value, JSReceiver::GetElement(isolate, receiver, i),
1059 false); 1057 false);
1060 if (!visitor->visit(i, element_value)) return false; 1058 if (!visitor->visit(i, element_value)) return false;
1061 } 1059 }
1062 } 1060 });
1063 visitor->increase_index_offset(length); 1061 visitor->increase_index_offset(length);
1064 return true; 1062 return true;
1065 } 1063 }
1066 1064
1067 1065
1068 /** 1066 /**
1069 * A helper function that visits "array" elements of a JSReceiver in numerical 1067 * A helper function that visits "array" elements of a JSReceiver in numerical
1070 * order. 1068 * order.
1071 * 1069 *
1072 * The visitor argument called for each existing element in the array 1070 * The visitor argument called for each existing element in the array
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 1103
1106 switch (array->GetElementsKind()) { 1104 switch (array->GetElementsKind()) {
1107 case FAST_SMI_ELEMENTS: 1105 case FAST_SMI_ELEMENTS:
1108 case FAST_ELEMENTS: 1106 case FAST_ELEMENTS:
1109 case FAST_HOLEY_SMI_ELEMENTS: 1107 case FAST_HOLEY_SMI_ELEMENTS:
1110 case FAST_HOLEY_ELEMENTS: { 1108 case FAST_HOLEY_ELEMENTS: {
1111 // Run through the elements FixedArray and use HasElement and GetElement 1109 // Run through the elements FixedArray and use HasElement and GetElement
1112 // to check the prototype for missing elements. 1110 // to check the prototype for missing elements.
1113 Handle<FixedArray> elements(FixedArray::cast(array->elements())); 1111 Handle<FixedArray> elements(FixedArray::cast(array->elements()));
1114 int fast_length = static_cast<int>(length); 1112 int fast_length = static_cast<int>(length);
1115 DCHECK_LE(fast_length, elements->length()); 1113 DCHECK(fast_length <= elements->length());
1116 for (int j = 0; j < fast_length; j++) { 1114 FOR_WITH_HANDLE_SCOPE(isolate, int, j = 0, j, j < fast_length, j++, {
1117 HandleScope loop_scope(isolate);
1118 Handle<Object> element_value(elements->get(j), isolate); 1115 Handle<Object> element_value(elements->get(j), isolate);
1119 if (!element_value->IsTheHole()) { 1116 if (!element_value->IsTheHole()) {
1120 if (!visitor->visit(j, element_value)) return false; 1117 if (!visitor->visit(j, element_value)) return false;
1121 } else { 1118 } else {
1122 Maybe<bool> maybe = JSReceiver::HasElement(array, j); 1119 Maybe<bool> maybe = JSReceiver::HasElement(array, j);
1123 if (!maybe.IsJust()) return false; 1120 if (!maybe.IsJust()) return false;
1124 if (maybe.FromJust()) { 1121 if (maybe.FromJust()) {
1125 // Call GetElement on array, not its prototype, or getters won't 1122 // Call GetElement on array, not its prototype, or getters won't
1126 // have the correct receiver. 1123 // have the correct receiver.
1127 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 1124 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
1128 isolate, element_value, 1125 isolate, element_value,
1129 JSReceiver::GetElement(isolate, array, j), false); 1126 JSReceiver::GetElement(isolate, array, j), false);
1130 if (!visitor->visit(j, element_value)) return false; 1127 if (!visitor->visit(j, element_value)) return false;
1131 } 1128 }
1132 } 1129 }
1133 } 1130 });
1134 break; 1131 break;
1135 } 1132 }
1136 case FAST_HOLEY_DOUBLE_ELEMENTS: 1133 case FAST_HOLEY_DOUBLE_ELEMENTS:
1137 case FAST_DOUBLE_ELEMENTS: { 1134 case FAST_DOUBLE_ELEMENTS: {
1138 // Empty array is FixedArray but not FixedDoubleArray. 1135 // Empty array is FixedArray but not FixedDoubleArray.
1139 if (length == 0) break; 1136 if (length == 0) break;
1140 // Run through the elements FixedArray and use HasElement and GetElement 1137 // Run through the elements FixedArray and use HasElement and GetElement
1141 // to check the prototype for missing elements. 1138 // to check the prototype for missing elements.
1142 if (array->elements()->IsFixedArray()) { 1139 if (array->elements()->IsFixedArray()) {
1143 DCHECK(array->elements()->length() == 0); 1140 DCHECK(array->elements()->length() == 0);
1144 break; 1141 break;
1145 } 1142 }
1146 Handle<FixedDoubleArray> elements( 1143 Handle<FixedDoubleArray> elements(
1147 FixedDoubleArray::cast(array->elements())); 1144 FixedDoubleArray::cast(array->elements()));
1148 int fast_length = static_cast<int>(length); 1145 int fast_length = static_cast<int>(length);
1149 DCHECK(fast_length <= elements->length()); 1146 DCHECK(fast_length <= elements->length());
1150 for (int j = 0; j < fast_length; j++) { 1147 FOR_WITH_HANDLE_SCOPE(isolate, int, j = 0, j, j < fast_length, j++, {
1151 HandleScope loop_scope(isolate);
1152 if (!elements->is_the_hole(j)) { 1148 if (!elements->is_the_hole(j)) {
1153 double double_value = elements->get_scalar(j); 1149 double double_value = elements->get_scalar(j);
1154 Handle<Object> element_value = 1150 Handle<Object> element_value =
1155 isolate->factory()->NewNumber(double_value); 1151 isolate->factory()->NewNumber(double_value);
1156 if (!visitor->visit(j, element_value)) return false; 1152 if (!visitor->visit(j, element_value)) return false;
1157 } else { 1153 } else {
1158 Maybe<bool> maybe = JSReceiver::HasElement(array, j); 1154 Maybe<bool> maybe = JSReceiver::HasElement(array, j);
1159 if (!maybe.IsJust()) return false; 1155 if (!maybe.IsJust()) return false;
1160 if (maybe.FromJust()) { 1156 if (maybe.FromJust()) {
1161 // Call GetElement on array, not its prototype, or getters won't 1157 // Call GetElement on array, not its prototype, or getters won't
1162 // have the correct receiver. 1158 // have the correct receiver.
1163 Handle<Object> element_value; 1159 Handle<Object> element_value;
1164 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 1160 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
1165 isolate, element_value, 1161 isolate, element_value,
1166 JSReceiver::GetElement(isolate, array, j), false); 1162 JSReceiver::GetElement(isolate, array, j), false);
1167 if (!visitor->visit(j, element_value)) return false; 1163 if (!visitor->visit(j, element_value)) return false;
1168 } 1164 }
1169 } 1165 }
1170 } 1166 });
1171 break; 1167 break;
1172 } 1168 }
1173 1169
1174 case DICTIONARY_ELEMENTS: { 1170 case DICTIONARY_ELEMENTS: {
1175 Handle<SeededNumberDictionary> dict(array->element_dictionary()); 1171 Handle<SeededNumberDictionary> dict(array->element_dictionary());
1176 List<uint32_t> indices(dict->Capacity() / 2); 1172 List<uint32_t> indices(dict->Capacity() / 2);
1177 // Collect all indices in the object and the prototypes less 1173 // Collect all indices in the object and the prototypes less
1178 // than length. This might introduce duplicates in the indices list. 1174 // than length. This might introduce duplicates in the indices list.
1179 CollectElementIndices(array, length, &indices); 1175 CollectElementIndices(array, length, &indices);
1180 indices.Sort(&compareUInt32); 1176 indices.Sort(&compareUInt32);
1181 int j = 0;
1182 int n = indices.length(); 1177 int n = indices.length();
1183 while (j < n) { 1178 FOR_WITH_HANDLE_SCOPE(isolate, int, j = 0, j, j < n, (void)0, {
1184 HandleScope loop_scope(isolate);
1185 uint32_t index = indices[j]; 1179 uint32_t index = indices[j];
1186 Handle<Object> element; 1180 Handle<Object> element;
1187 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 1181 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
1188 isolate, element, JSReceiver::GetElement(isolate, array, index), 1182 isolate, element, JSReceiver::GetElement(isolate, array, index),
1189 false); 1183 false);
1190 if (!visitor->visit(index, element)) return false; 1184 if (!visitor->visit(index, element)) return false;
1191 // Skip to next different index (i.e., omit duplicates). 1185 // Skip to next different index (i.e., omit duplicates).
1192 do { 1186 do {
1193 j++; 1187 j++;
1194 } while (j < n && indices[j] == index); 1188 } while (j < n && indices[j] == index);
1195 } 1189 });
1196 break; 1190 break;
1197 } 1191 }
1198 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 1192 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
1199 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: { 1193 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: {
1200 for (uint32_t index = 0; index < length; index++) { 1194 FOR_WITH_HANDLE_SCOPE(
1201 HandleScope loop_scope(isolate); 1195 isolate, uint32_t, index = 0, index, index < length, index++, {
1202 Handle<Object> element; 1196 Handle<Object> element;
1203 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 1197 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
1204 isolate, element, JSReceiver::GetElement(isolate, array, index), 1198 isolate, element, JSReceiver::GetElement(isolate, array, index),
1205 false); 1199 false);
1206 if (!visitor->visit(index, element)) return false; 1200 if (!visitor->visit(index, element)) return false;
1207 } 1201 });
1208 break; 1202 break;
1209 } 1203 }
1210 case NO_ELEMENTS: 1204 case NO_ELEMENTS:
1211 break; 1205 break;
1212 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) case TYPE##_ELEMENTS: 1206 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) case TYPE##_ELEMENTS:
1213 TYPED_ARRAYS(TYPED_ARRAY_CASE) 1207 TYPED_ARRAYS(TYPED_ARRAY_CASE)
1214 #undef TYPED_ARRAY_CASE 1208 #undef TYPED_ARRAY_CASE
1215 return IterateElementsSlow(isolate, receiver, length, visitor); 1209 return IterateElementsSlow(isolate, receiver, length, visitor);
1216 case FAST_STRING_WRAPPER_ELEMENTS: 1210 case FAST_STRING_WRAPPER_ELEMENTS:
1217 case SLOW_STRING_WRAPPER_ELEMENTS: 1211 case SLOW_STRING_WRAPPER_ELEMENTS:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 1246
1253 // Pass 1: estimate the length and number of elements of the result. 1247 // Pass 1: estimate the length and number of elements of the result.
1254 // The actual length can be larger if any of the arguments have getters 1248 // The actual length can be larger if any of the arguments have getters
1255 // that mutate other arguments (but will otherwise be precise). 1249 // that mutate other arguments (but will otherwise be precise).
1256 // The number of elements is precise if there are no inherited elements. 1250 // The number of elements is precise if there are no inherited elements.
1257 1251
1258 ElementsKind kind = FAST_SMI_ELEMENTS; 1252 ElementsKind kind = FAST_SMI_ELEMENTS;
1259 1253
1260 uint32_t estimate_result_length = 0; 1254 uint32_t estimate_result_length = 0;
1261 uint32_t estimate_nof_elements = 0; 1255 uint32_t estimate_nof_elements = 0;
1262 for (int i = 0; i < argument_count; i++) { 1256 FOR_WITH_HANDLE_SCOPE(isolate, int, i = 0, i, i < argument_count, i++, {
1263 HandleScope loop_scope(isolate);
1264 Handle<Object> obj((*args)[i], isolate); 1257 Handle<Object> obj((*args)[i], isolate);
1265 uint32_t length_estimate; 1258 uint32_t length_estimate;
1266 uint32_t element_estimate; 1259 uint32_t element_estimate;
1267 if (obj->IsJSArray()) { 1260 if (obj->IsJSArray()) {
1268 Handle<JSArray> array(Handle<JSArray>::cast(obj)); 1261 Handle<JSArray> array(Handle<JSArray>::cast(obj));
1269 length_estimate = static_cast<uint32_t>(array->length()->Number()); 1262 length_estimate = static_cast<uint32_t>(array->length()->Number());
1270 if (length_estimate != 0) { 1263 if (length_estimate != 0) {
1271 ElementsKind array_kind = 1264 ElementsKind array_kind =
1272 GetPackedElementsKind(array->GetElementsKind()); 1265 GetPackedElementsKind(array->GetElementsKind());
1273 kind = GetMoreGeneralElementsKind(kind, array_kind); 1266 kind = GetMoreGeneralElementsKind(kind, array_kind);
(...skipping 11 matching lines...) Expand all
1285 if (JSObject::kMaxElementCount - estimate_result_length < length_estimate) { 1278 if (JSObject::kMaxElementCount - estimate_result_length < length_estimate) {
1286 estimate_result_length = JSObject::kMaxElementCount; 1279 estimate_result_length = JSObject::kMaxElementCount;
1287 } else { 1280 } else {
1288 estimate_result_length += length_estimate; 1281 estimate_result_length += length_estimate;
1289 } 1282 }
1290 if (JSObject::kMaxElementCount - estimate_nof_elements < element_estimate) { 1283 if (JSObject::kMaxElementCount - estimate_nof_elements < element_estimate) {
1291 estimate_nof_elements = JSObject::kMaxElementCount; 1284 estimate_nof_elements = JSObject::kMaxElementCount;
1292 } else { 1285 } else {
1293 estimate_nof_elements += element_estimate; 1286 estimate_nof_elements += element_estimate;
1294 } 1287 }
1295 } 1288 });
1296 1289
1297 // If estimated number of elements is more than half of length, a 1290 // If estimated number of elements is more than half of length, a
1298 // fixed array (fast case) is more time and space-efficient than a 1291 // fixed array (fast case) is more time and space-efficient than a
1299 // dictionary. 1292 // dictionary.
1300 bool fast_case = 1293 bool fast_case =
1301 is_array_species && (estimate_nof_elements * 2) >= estimate_result_length; 1294 is_array_species && (estimate_nof_elements * 2) >= estimate_result_length;
1302 1295
1303 if (fast_case && kind == FAST_DOUBLE_ELEMENTS) { 1296 if (fast_case && kind == FAST_DOUBLE_ELEMENTS) {
1304 Handle<FixedArrayBase> storage = 1297 Handle<FixedArrayBase> storage =
1305 isolate->factory()->NewFixedDoubleArray(estimate_result_length); 1298 isolate->factory()->NewFixedDoubleArray(estimate_result_length);
(...skipping 3240 matching lines...) Expand 10 before | Expand all | Expand 10 after
4546 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) 4539 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
4547 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) 4540 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)
4548 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H) 4541 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H)
4549 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A) 4542 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A)
4550 #undef DEFINE_BUILTIN_ACCESSOR_C 4543 #undef DEFINE_BUILTIN_ACCESSOR_C
4551 #undef DEFINE_BUILTIN_ACCESSOR_A 4544 #undef DEFINE_BUILTIN_ACCESSOR_A
4552 4545
4553 4546
4554 } // namespace internal 4547 } // namespace internal
4555 } // namespace v8 4548 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698