| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index a2f16298a4042688b4eb1864eca5d75dc8eb222d..45a15a246474f0f1c351dd48435a1343c2157195 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -135,9 +135,6 @@ Heap::Heap()
|
| full_codegen_bytes_generated_(0),
|
| crankshaft_codegen_bytes_generated_(0),
|
| gcs_since_last_deopt_(0),
|
| -#ifdef VERIFY_HEAP
|
| - no_weak_object_verification_scope_depth_(0),
|
| -#endif
|
| allocation_sites_scratchpad_length_(0),
|
| promotion_queue_(this),
|
| configured_(false),
|
| @@ -3169,6 +3166,10 @@ void Heap::CreateInitialObjects() {
|
|
|
| set_detached_contexts(empty_fixed_array());
|
|
|
| + set_weak_object_to_code_table(
|
| + *WeakHashTable::New(isolate(), 16, USE_DEFAULT_MINIMUM_CAPACITY,
|
| + TENURED));
|
| +
|
| Handle<SeededNumberDictionary> slow_element_dictionary =
|
| SeededNumberDictionary::New(isolate(), 0, TENURED);
|
| slow_element_dictionary->set_requires_slow_elements();
|
| @@ -5600,7 +5601,6 @@ bool Heap::CreateHeapObjects() {
|
| set_array_buffers_list(undefined_value());
|
| set_new_array_buffer_views_list(undefined_value());
|
| set_allocation_sites_list(undefined_value());
|
| - weak_object_to_code_table_ = undefined_value();
|
| return true;
|
| }
|
|
|
| @@ -5775,41 +5775,25 @@ void Heap::RemoveGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback) {
|
|
|
|
|
| // TODO(ishell): Find a better place for this.
|
| -void Heap::AddWeakObjectToCodeDependency(Handle<Object> obj,
|
| +void Heap::AddWeakObjectToCodeDependency(Handle<HeapObject> obj,
|
| Handle<DependentCode> dep) {
|
| DCHECK(!InNewSpace(*obj));
|
| DCHECK(!InNewSpace(*dep));
|
| - // This handle scope keeps the table handle local to this function, which
|
| - // allows us to safely skip write barriers in table update operations.
|
| - HandleScope scope(isolate());
|
| - Handle<WeakHashTable> table(WeakHashTable::cast(weak_object_to_code_table_),
|
| - isolate());
|
| + Handle<WeakHashTable> table(weak_object_to_code_table(), isolate());
|
| table = WeakHashTable::Put(table, obj, dep);
|
| -
|
| - if (ShouldZapGarbage() && weak_object_to_code_table_ != *table) {
|
| - WeakHashTable::cast(weak_object_to_code_table_)->Zap(the_hole_value());
|
| - }
|
| - set_weak_object_to_code_table(*table);
|
| - DCHECK_EQ(*dep, table->Lookup(obj));
|
| + if (*table != weak_object_to_code_table())
|
| + set_weak_object_to_code_table(*table);
|
| + DCHECK_EQ(*dep, LookupWeakObjectToCodeDependency(obj));
|
| }
|
|
|
|
|
| -DependentCode* Heap::LookupWeakObjectToCodeDependency(Handle<Object> obj) {
|
| - Object* dep = WeakHashTable::cast(weak_object_to_code_table_)->Lookup(obj);
|
| +DependentCode* Heap::LookupWeakObjectToCodeDependency(Handle<HeapObject> obj) {
|
| + Object* dep = weak_object_to_code_table()->Lookup(obj);
|
| if (dep->IsDependentCode()) return DependentCode::cast(dep);
|
| return DependentCode::cast(empty_fixed_array());
|
| }
|
|
|
|
|
| -void Heap::EnsureWeakObjectToCodeTable() {
|
| - if (!weak_object_to_code_table()->IsHashTable()) {
|
| - set_weak_object_to_code_table(
|
| - *WeakHashTable::New(isolate(), 16, USE_DEFAULT_MINIMUM_CAPACITY,
|
| - TENURED));
|
| - }
|
| -}
|
| -
|
| -
|
| void Heap::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
|
| v8::internal::V8::FatalProcessOutOfMemory(location, take_snapshot);
|
| }
|
|
|