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.cc

Issue 1546933002: Ensure that all non-stable maps created by Map::AddMissingTransitions() are marked as such. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressing comments Created 4 years, 12 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/objects-debug.cc » ('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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 9293 matching lines...) Expand 10 before | Expand all | Expand 10 after
9304 // invariant since the last map is not yet connected to the transition tree 9304 // invariant since the last map is not yet connected to the transition tree
9305 // we create here. But it is safe because GC never trims map's descriptors 9305 // we create here. But it is safe because GC never trims map's descriptors
9306 // if there are no dead transitions from that map and this is exactly the 9306 // if there are no dead transitions from that map and this is exactly the
9307 // case for all the intermediate maps we create here. 9307 // case for all the intermediate maps we create here.
9308 Handle<Map> map = split_map; 9308 Handle<Map> map = split_map;
9309 for (int i = split_nof; i < nof_descriptors - 1; ++i) { 9309 for (int i = split_nof; i < nof_descriptors - 1; ++i) {
9310 Handle<Map> new_map = CopyDropDescriptors(map); 9310 Handle<Map> new_map = CopyDropDescriptors(map);
9311 InstallDescriptors(map, new_map, i, descriptors, full_layout_descriptor); 9311 InstallDescriptors(map, new_map, i, descriptors, full_layout_descriptor);
9312 map = new_map; 9312 map = new_map;
9313 } 9313 }
9314 map->NotifyLeafMapLayoutChange();
9314 InstallDescriptors(map, last_map, nof_descriptors - 1, descriptors, 9315 InstallDescriptors(map, last_map, nof_descriptors - 1, descriptors,
9315 full_layout_descriptor); 9316 full_layout_descriptor);
9316 return last_map; 9317 return last_map;
9317 } 9318 }
9318 9319
9319 9320
9320 // Since this method is used to rewrite an existing transition tree, it can 9321 // Since this method is used to rewrite an existing transition tree, it can
9321 // always insert transitions without checking. 9322 // always insert transitions without checking.
9322 void Map::InstallDescriptors(Handle<Map> parent, Handle<Map> child, 9323 void Map::InstallDescriptors(Handle<Map> parent, Handle<Map> child,
9323 int new_descriptor, 9324 int new_descriptor,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
9420 break; 9421 break;
9421 default: 9422 default:
9422 UNREACHABLE(); 9423 UNREACHABLE();
9423 break; 9424 break;
9424 } 9425 }
9425 Map* maybe_transition = 9426 Map* maybe_transition =
9426 TransitionArray::SearchSpecial(*initial_map, *transition_symbol); 9427 TransitionArray::SearchSpecial(*initial_map, *transition_symbol);
9427 if (maybe_transition != NULL) { 9428 if (maybe_transition != NULL) {
9428 return handle(maybe_transition, isolate); 9429 return handle(maybe_transition, isolate);
9429 } 9430 }
9431 initial_map->NotifyLeafMapLayoutChange();
9430 9432
9431 // Create new map taking descriptors from the |function_map| and all 9433 // Create new map taking descriptors from the |function_map| and all
9432 // the other details from the |initial_map|. 9434 // the other details from the |initial_map|.
9433 Handle<Map> map = 9435 Handle<Map> map =
9434 Map::CopyInitialMap(function_map, initial_map->instance_size(), 9436 Map::CopyInitialMap(function_map, initial_map->instance_size(),
9435 initial_map->GetInObjectProperties(), 9437 initial_map->GetInObjectProperties(),
9436 initial_map->unused_property_fields()); 9438 initial_map->unused_property_fields());
9437 map->SetConstructor(initial_map->GetConstructor()); 9439 map->SetConstructor(initial_map->GetConstructor());
9438 map->set_prototype(initial_map->prototype()); 9440 map->set_prototype(initial_map->prototype());
9439 9441
(...skipping 10041 matching lines...) Expand 10 before | Expand all | Expand 10 after
19481 if (cell->value() != *new_value) { 19483 if (cell->value() != *new_value) {
19482 cell->set_value(*new_value); 19484 cell->set_value(*new_value);
19483 Isolate* isolate = cell->GetIsolate(); 19485 Isolate* isolate = cell->GetIsolate();
19484 cell->dependent_code()->DeoptimizeDependentCodeGroup( 19486 cell->dependent_code()->DeoptimizeDependentCodeGroup(
19485 isolate, DependentCode::kPropertyCellChangedGroup); 19487 isolate, DependentCode::kPropertyCellChangedGroup);
19486 } 19488 }
19487 } 19489 }
19488 19490
19489 } // namespace internal 19491 } // namespace internal
19490 } // namespace v8 19492 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698