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

Side by Side Diff: src/objects-debug.cc

Issue 661133002: TransitionArray now uses <is_data_property, name, attributes> tuple as a key, which allows to have … (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments Created 6 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « src/objects.cc ('k') | src/objects-inl.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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/disasm.h" 7 #include "src/disasm.h"
8 #include "src/disassembler.h" 8 #include "src/disassembler.h"
9 #include "src/heap/objects-visiting.h" 9 #include "src/heap/objects-visiting.h"
10 #include "src/jsregexp.h" 10 #include "src/jsregexp.h"
(...skipping 1146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1157 } 1157 }
1158 1158
1159 1159
1160 bool DescriptorArray::IsSortedNoDuplicates(int valid_entries) { 1160 bool DescriptorArray::IsSortedNoDuplicates(int valid_entries) {
1161 if (valid_entries == -1) valid_entries = number_of_descriptors(); 1161 if (valid_entries == -1) valid_entries = number_of_descriptors();
1162 Name* current_key = NULL; 1162 Name* current_key = NULL;
1163 uint32_t current = 0; 1163 uint32_t current = 0;
1164 for (int i = 0; i < number_of_descriptors(); i++) { 1164 for (int i = 0; i < number_of_descriptors(); i++) {
1165 Name* key = GetSortedKey(i); 1165 Name* key = GetSortedKey(i);
1166 if (key == current_key) { 1166 if (key == current_key) {
1167 OFStream os(stdout); 1167 Print();
1168 PrintDescriptors(os);
1169 return false; 1168 return false;
1170 } 1169 }
1171 current_key = key; 1170 current_key = key;
1172 uint32_t hash = GetSortedKey(i)->Hash(); 1171 uint32_t hash = GetSortedKey(i)->Hash();
1173 if (hash < current) { 1172 if (hash < current) {
1174 OFStream os(stdout); 1173 Print();
1175 PrintDescriptors(os);
1176 return false; 1174 return false;
1177 } 1175 }
1178 current = hash; 1176 current = hash;
1179 } 1177 }
1180 return true; 1178 return true;
1181 } 1179 }
1182 1180
1183 1181
1184 bool TransitionArray::IsSortedNoDuplicates(int valid_entries) { 1182 bool TransitionArray::IsSortedNoDuplicates(int valid_entries) {
1185 DCHECK(valid_entries == -1); 1183 DCHECK(valid_entries == -1);
1186 Name* current_key = NULL; 1184 Name* prev_key = NULL;
1187 uint32_t current = 0; 1185 bool prev_is_data_property = false;
1186 PropertyAttributes prev_attributes = NONE;
1187 uint32_t prev_hash = 0;
1188 for (int i = 0; i < number_of_transitions(); i++) { 1188 for (int i = 0; i < number_of_transitions(); i++) {
1189 Name* key = GetSortedKey(i); 1189 Name* key = GetSortedKey(i);
1190 if (key == current_key) { 1190 uint32_t hash = key->Hash();
1191 OFStream os(stdout); 1191 bool is_data_property = false;
1192 PrintTransitions(os); 1192 PropertyAttributes attributes = NONE;
1193 if (!IsSpecialTransition(key)) {
1194 Map* target = GetTarget(i);
1195 PropertyDetails details = GetTargetDetails(key, target);
1196 is_data_property = details.type() == FIELD || details.type() == CONSTANT;
1197 attributes = details.attributes();
1198 } else {
1199 // Duplicate entries are not allowed for non-property transitions.
1200 CHECK_NE(prev_key, key);
1201 }
1202
1203 int cmp =
1204 CompareKeys(prev_key, prev_hash, prev_is_data_property, prev_attributes,
1205 key, hash, is_data_property, attributes);
1206 if (cmp >= 0) {
1207 Print();
1193 return false; 1208 return false;
1194 } 1209 }
1195 current_key = key; 1210 prev_key = key;
1196 uint32_t hash = GetSortedKey(i)->Hash(); 1211 prev_hash = hash;
1197 if (hash < current) { 1212 prev_attributes = attributes;
1198 OFStream os(stdout); 1213 prev_is_data_property = is_data_property;
1199 PrintTransitions(os);
1200 return false;
1201 }
1202 current = hash;
1203 } 1214 }
1204 return true; 1215 return true;
1205 } 1216 }
1206 1217
1207 1218
1208 static bool CheckOneBackPointer(Map* current_map, Object* target) { 1219 static bool CheckOneBackPointer(Map* current_map, Object* target) {
1209 return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map; 1220 return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map;
1210 } 1221 }
1211 1222
1212 1223
(...skipping 19 matching lines...) Expand all
1232 while (map != heap->roots_array_start()[i++]) { 1243 while (map != heap->roots_array_start()[i++]) {
1233 CHECK_LT(i, Heap::kStrongRootListLength); 1244 CHECK_LT(i, Heap::kStrongRootListLength);
1234 } 1245 }
1235 } 1246 }
1236 } 1247 }
1237 1248
1238 1249
1239 #endif // DEBUG 1250 #endif // DEBUG
1240 1251
1241 } } // namespace v8::internal 1252 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698