| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 8801 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8812 result->set_bit_field2(map->bit_field2()); | 8812 result->set_bit_field2(map->bit_field2()); |
| 8813 int new_bit_field3 = map->bit_field3(); | 8813 int new_bit_field3 = map->bit_field3(); |
| 8814 new_bit_field3 = OwnsDescriptors::update(new_bit_field3, true); | 8814 new_bit_field3 = OwnsDescriptors::update(new_bit_field3, true); |
| 8815 new_bit_field3 = NumberOfOwnDescriptorsBits::update(new_bit_field3, 0); | 8815 new_bit_field3 = NumberOfOwnDescriptorsBits::update(new_bit_field3, 0); |
| 8816 new_bit_field3 = EnumLengthBits::update(new_bit_field3, | 8816 new_bit_field3 = EnumLengthBits::update(new_bit_field3, |
| 8817 kInvalidEnumCacheSentinel); | 8817 kInvalidEnumCacheSentinel); |
| 8818 new_bit_field3 = Deprecated::update(new_bit_field3, false); | 8818 new_bit_field3 = Deprecated::update(new_bit_field3, false); |
| 8819 if (!map->is_dictionary_map()) { | 8819 if (!map->is_dictionary_map()) { |
| 8820 new_bit_field3 = IsUnstable::update(new_bit_field3, false); | 8820 new_bit_field3 = IsUnstable::update(new_bit_field3, false); |
| 8821 } | 8821 } |
| 8822 new_bit_field3 = Counter::update(new_bit_field3, kRetainingCounterStart); | 8822 new_bit_field3 = |
| 8823 ConstructionCounter::update(new_bit_field3, kNoSlackTracking); |
| 8823 result->set_bit_field3(new_bit_field3); | 8824 result->set_bit_field3(new_bit_field3); |
| 8824 return result; | 8825 return result; |
| 8825 } | 8826 } |
| 8826 | 8827 |
| 8827 | 8828 |
| 8828 Handle<Map> Map::Normalize(Handle<Map> fast_map, PropertyNormalizationMode mode, | 8829 Handle<Map> Map::Normalize(Handle<Map> fast_map, PropertyNormalizationMode mode, |
| 8829 const char* reason) { | 8830 const char* reason) { |
| 8830 DCHECK(!fast_map->is_dictionary_map()); | 8831 DCHECK(!fast_map->is_dictionary_map()); |
| 8831 | 8832 |
| 8832 Isolate* isolate = fast_map->GetIsolate(); | 8833 Isolate* isolate = fast_map->GetIsolate(); |
| (...skipping 3253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12086 | 12087 |
| 12087 // Visitor id might depend on the instance size, recalculate it. | 12088 // Visitor id might depend on the instance size, recalculate it. |
| 12088 map->set_visitor_id(Heap::GetStaticVisitorIdForMap(map)); | 12089 map->set_visitor_id(Heap::GetStaticVisitorIdForMap(map)); |
| 12089 } | 12090 } |
| 12090 | 12091 |
| 12091 | 12092 |
| 12092 void Map::CompleteInobjectSlackTracking() { | 12093 void Map::CompleteInobjectSlackTracking() { |
| 12093 // Has to be an initial map. | 12094 // Has to be an initial map. |
| 12094 DCHECK(GetBackPointer()->IsUndefined()); | 12095 DCHECK(GetBackPointer()->IsUndefined()); |
| 12095 | 12096 |
| 12096 DCHECK_GE(counter(), kSlackTrackingCounterEnd - 1); | 12097 set_construction_counter(kNoSlackTracking); |
| 12097 set_counter(kRetainingCounterStart); | |
| 12098 | 12098 |
| 12099 int slack = unused_property_fields(); | 12099 int slack = unused_property_fields(); |
| 12100 TransitionArray::TraverseTransitionTree(this, &GetMinInobjectSlack, &slack); | 12100 TransitionArray::TraverseTransitionTree(this, &GetMinInobjectSlack, &slack); |
| 12101 if (slack != 0) { | 12101 if (slack != 0) { |
| 12102 // Resize the initial map and all maps in its transition tree. | 12102 // Resize the initial map and all maps in its transition tree. |
| 12103 TransitionArray::TraverseTransitionTree(this, &ShrinkInstanceSize, &slack); | 12103 TransitionArray::TraverseTransitionTree(this, &ShrinkInstanceSize, &slack); |
| 12104 } | 12104 } |
| 12105 } | 12105 } |
| 12106 | 12106 |
| 12107 | 12107 |
| (...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13258 | 13258 |
| 13259 void Map::StartInobjectSlackTracking() { | 13259 void Map::StartInobjectSlackTracking() { |
| 13260 DCHECK(!IsInobjectSlackTrackingInProgress()); | 13260 DCHECK(!IsInobjectSlackTrackingInProgress()); |
| 13261 | 13261 |
| 13262 // No tracking during the snapshot construction phase. | 13262 // No tracking during the snapshot construction phase. |
| 13263 Isolate* isolate = GetIsolate(); | 13263 Isolate* isolate = GetIsolate(); |
| 13264 if (isolate->serializer_enabled()) return; | 13264 if (isolate->serializer_enabled()) return; |
| 13265 | 13265 |
| 13266 if (unused_property_fields() == 0) return; | 13266 if (unused_property_fields() == 0) return; |
| 13267 | 13267 |
| 13268 set_counter(Map::kSlackTrackingCounterStart); | 13268 set_construction_counter(Map::kSlackTrackingCounterStart); |
| 13269 } | 13269 } |
| 13270 | 13270 |
| 13271 | 13271 |
| 13272 void SharedFunctionInfo::ResetForNewContext(int new_ic_age) { | 13272 void SharedFunctionInfo::ResetForNewContext(int new_ic_age) { |
| 13273 code()->ClearInlineCaches(); | 13273 code()->ClearInlineCaches(); |
| 13274 // If we clear ICs, we need to clear the type feedback vector too, since | 13274 // If we clear ICs, we need to clear the type feedback vector too, since |
| 13275 // CallICs are synced with a feedback vector slot. | 13275 // CallICs are synced with a feedback vector slot. |
| 13276 ClearTypeFeedbackInfo(); | 13276 ClearTypeFeedbackInfo(); |
| 13277 set_ic_age(new_ic_age); | 13277 set_ic_age(new_ic_age); |
| 13278 if (code()->kind() == Code::FUNCTION) { | 13278 if (code()->kind() == Code::FUNCTION) { |
| (...skipping 5815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19094 if (cell->value() != *new_value) { | 19094 if (cell->value() != *new_value) { |
| 19095 cell->set_value(*new_value); | 19095 cell->set_value(*new_value); |
| 19096 Isolate* isolate = cell->GetIsolate(); | 19096 Isolate* isolate = cell->GetIsolate(); |
| 19097 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19097 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 19098 isolate, DependentCode::kPropertyCellChangedGroup); | 19098 isolate, DependentCode::kPropertyCellChangedGroup); |
| 19099 } | 19099 } |
| 19100 } | 19100 } |
| 19101 | 19101 |
| 19102 } // namespace internal | 19102 } // namespace internal |
| 19103 } // namespace v8 | 19103 } // namespace v8 |
| OLD | NEW |