| 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 <iomanip> | 5 #include <iomanip> |
| 6 #include <sstream> | 6 #include <sstream> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
| (...skipping 3619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3630 if (isolate->initial_object_prototype()->map() == this) { | 3630 if (isolate->initial_object_prototype()->map() == this) { |
| 3631 return true; | 3631 return true; |
| 3632 } | 3632 } |
| 3633 | 3633 |
| 3634 return false; | 3634 return false; |
| 3635 } | 3635 } |
| 3636 | 3636 |
| 3637 | 3637 |
| 3638 Handle<WeakCell> Map::WeakCellForMap(Handle<Map> map) { | 3638 Handle<WeakCell> Map::WeakCellForMap(Handle<Map> map) { |
| 3639 Isolate* isolate = map->GetIsolate(); | 3639 Isolate* isolate = map->GetIsolate(); |
| 3640 if (map->code_cache()->IsFixedArray()) { | 3640 if (map->weak_cell_cache()->IsWeakCell()) { |
| 3641 return isolate->factory()->NewWeakCell(map); | 3641 return Handle<WeakCell>(WeakCell::cast(map->weak_cell_cache())); |
| 3642 } | |
| 3643 Handle<CodeCache> code_cache(CodeCache::cast(map->code_cache()), isolate); | |
| 3644 if (code_cache->weak_cell_cache()->IsWeakCell()) { | |
| 3645 return Handle<WeakCell>(WeakCell::cast(code_cache->weak_cell_cache())); | |
| 3646 } | 3642 } |
| 3647 Handle<WeakCell> weak_cell = isolate->factory()->NewWeakCell(map); | 3643 Handle<WeakCell> weak_cell = isolate->factory()->NewWeakCell(map); |
| 3648 code_cache->set_weak_cell_cache(*weak_cell); | 3644 map->set_weak_cell_cache(*weak_cell); |
| 3649 return weak_cell; | 3645 return weak_cell; |
| 3650 } | 3646 } |
| 3651 | 3647 |
| 3652 | 3648 |
| 3653 static Handle<Map> AddMissingElementsTransitions(Handle<Map> map, | 3649 static Handle<Map> AddMissingElementsTransitions(Handle<Map> map, |
| 3654 ElementsKind to_kind) { | 3650 ElementsKind to_kind) { |
| 3655 DCHECK(IsTransitionElementsKind(map->elements_kind())); | 3651 DCHECK(IsTransitionElementsKind(map->elements_kind())); |
| 3656 | 3652 |
| 3657 Handle<Map> current_map = map; | 3653 Handle<Map> current_map = map; |
| 3658 | 3654 |
| (...skipping 3201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6860 | 6856 |
| 6861 Handle<Map> new_map; | 6857 Handle<Map> new_map; |
| 6862 if (use_cache && cache->Get(fast_map, mode).ToHandle(&new_map)) { | 6858 if (use_cache && cache->Get(fast_map, mode).ToHandle(&new_map)) { |
| 6863 #ifdef VERIFY_HEAP | 6859 #ifdef VERIFY_HEAP |
| 6864 if (FLAG_verify_heap) new_map->DictionaryMapVerify(); | 6860 if (FLAG_verify_heap) new_map->DictionaryMapVerify(); |
| 6865 #endif | 6861 #endif |
| 6866 #ifdef ENABLE_SLOW_DCHECKS | 6862 #ifdef ENABLE_SLOW_DCHECKS |
| 6867 if (FLAG_enable_slow_asserts) { | 6863 if (FLAG_enable_slow_asserts) { |
| 6868 // The cached map should match newly created normalized map bit-by-bit, | 6864 // The cached map should match newly created normalized map bit-by-bit, |
| 6869 // except for the code cache, which can contain some ics which can be | 6865 // except for the code cache, which can contain some ics which can be |
| 6870 // applied to the shared map. | 6866 // applied to the shared map, dependent code and weak cell cache. |
| 6871 Handle<Map> fresh = Map::CopyNormalized(fast_map, mode); | 6867 Handle<Map> fresh = Map::CopyNormalized(fast_map, mode); |
| 6872 | 6868 |
| 6873 DCHECK(memcmp(fresh->address(), | 6869 DCHECK(memcmp(fresh->address(), |
| 6874 new_map->address(), | 6870 new_map->address(), |
| 6875 Map::kCodeCacheOffset) == 0); | 6871 Map::kCodeCacheOffset) == 0); |
| 6876 STATIC_ASSERT(Map::kDependentCodeOffset == | 6872 STATIC_ASSERT(Map::kDependentCodeOffset == |
| 6877 Map::kCodeCacheOffset + kPointerSize); | 6873 Map::kCodeCacheOffset + kPointerSize); |
| 6878 int offset = Map::kDependentCodeOffset + kPointerSize; | 6874 STATIC_ASSERT(Map::kWeakCellCacheOffset == |
| 6875 Map::kDependentCodeOffset + kPointerSize); |
| 6876 int offset = Map::kWeakCellCacheOffset + kPointerSize; |
| 6879 DCHECK(memcmp(fresh->address() + offset, | 6877 DCHECK(memcmp(fresh->address() + offset, |
| 6880 new_map->address() + offset, | 6878 new_map->address() + offset, |
| 6881 Map::kSize - offset) == 0); | 6879 Map::kSize - offset) == 0); |
| 6882 } | 6880 } |
| 6883 #endif | 6881 #endif |
| 6884 } else { | 6882 } else { |
| 6885 new_map = Map::CopyNormalized(fast_map, mode); | 6883 new_map = Map::CopyNormalized(fast_map, mode); |
| 6886 if (use_cache) { | 6884 if (use_cache) { |
| 6887 cache->Set(fast_map, new_map); | 6885 cache->Set(fast_map, new_map); |
| 6888 isolate->counters()->normalized_maps()->Increment(); | 6886 isolate->counters()->normalized_maps()->Increment(); |
| (...skipping 10247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17136 CompilationInfo* info) { | 17134 CompilationInfo* info) { |
| 17137 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo( | 17135 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo( |
| 17138 handle(cell->dependent_code(), info->isolate()), | 17136 handle(cell->dependent_code(), info->isolate()), |
| 17139 DependentCode::kPropertyCellChangedGroup, info->object_wrapper()); | 17137 DependentCode::kPropertyCellChangedGroup, info->object_wrapper()); |
| 17140 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); | 17138 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); |
| 17141 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( | 17139 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( |
| 17142 cell, info->zone()); | 17140 cell, info->zone()); |
| 17143 } | 17141 } |
| 17144 | 17142 |
| 17145 } } // namespace v8::internal | 17143 } } // namespace v8::internal |
| OLD | NEW |