| Index: src/heap.h
|
| diff --git a/src/heap.h b/src/heap.h
|
| index 3c92d4512320ca07b6cdb5bd853d922e896d2076..f5b99d6e53dd28d794baac7b99807eeb90d8fb08 100644
|
| --- a/src/heap.h
|
| +++ b/src/heap.h
|
| @@ -1308,6 +1308,8 @@ class Heap {
|
| Object* allocation_sites_list() { return allocation_sites_list_; }
|
| Object** allocation_sites_list_address() { return &allocation_sites_list_; }
|
|
|
| + Object* weak_object_to_code_table() { return weak_object_to_code_table_; }
|
| +
|
| // Number of mark-sweeps.
|
| unsigned int ms_count() { return ms_count_; }
|
|
|
| @@ -1399,8 +1401,8 @@ class Heap {
|
| void Verify();
|
|
|
|
|
| - bool weak_embedded_maps_verification_enabled() {
|
| - return no_weak_embedded_maps_verification_scope_depth_ == 0;
|
| + bool weak_embedded_objects_verification_enabled() {
|
| + return no_weak_object_verification_scope_depth_ == 0;
|
| }
|
| #endif
|
|
|
| @@ -1853,6 +1855,16 @@ class Heap {
|
| Heap* heap_;
|
| };
|
|
|
| + MaybeObject* AddWeakObjectToCodeDependency(Object* obj, DependentCode* dep);
|
| +
|
| + DependentCode* LookupWeakObjectToCodeDependency(Object* obj);
|
| +
|
| + void InitializeWeakObjectToCodeTable() {
|
| + set_weak_object_to_code_table(undefined_value());
|
| + }
|
| +
|
| + void EnsureWeakObjectToCodeTable();
|
| +
|
| private:
|
| Heap();
|
|
|
| @@ -1967,10 +1979,16 @@ class Heap {
|
| bool old_gen_exhausted_;
|
|
|
| // Weak list heads, threaded through the objects.
|
| + // List heads are initilized lazily and contain the undefined_value at start.
|
| Object* native_contexts_list_;
|
| Object* array_buffers_list_;
|
| Object* allocation_sites_list_;
|
|
|
| + // WeakHashTable that maps objects embedded in optimized code to dependent
|
| + // code list. It is initilized lazily and contains the undefined_value at
|
| + // start.
|
| + Object* weak_object_to_code_table_;
|
| +
|
| StoreBufferRebuilder store_buffer_rebuilder_;
|
|
|
| struct StringTypeTable {
|
| @@ -2279,6 +2297,15 @@ class Heap {
|
|
|
| void ClearObjectStats(bool clear_last_time_stats = false);
|
|
|
| + void set_weak_object_to_code_table(Object* value) {
|
| + ASSERT(!InNewSpace(value));
|
| + weak_object_to_code_table_ = value;
|
| + }
|
| +
|
| + Object** weak_object_to_code_table_address() {
|
| + return &weak_object_to_code_table_;
|
| + }
|
| +
|
| static const int kInitialStringTableSize = 2048;
|
| static const int kInitialEvalCacheSize = 64;
|
| static const int kInitialNumberStringCacheSize = 256;
|
| @@ -2334,7 +2361,7 @@ class Heap {
|
| int gcs_since_last_deopt_;
|
|
|
| #ifdef VERIFY_HEAP
|
| - int no_weak_embedded_maps_verification_scope_depth_;
|
| + int no_weak_object_verification_scope_depth_;
|
| #endif
|
|
|
| static const int kMaxMarkSweepsInIdleRound = 7;
|
| @@ -2368,7 +2395,7 @@ class Heap {
|
| friend class MarkCompactMarkingVisitor;
|
| friend class MapCompact;
|
| #ifdef VERIFY_HEAP
|
| - friend class NoWeakEmbeddedMapsVerificationScope;
|
| + friend class NoWeakObjectVerificationScope;
|
| #endif
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Heap);
|
| @@ -2433,10 +2460,10 @@ class AlwaysAllocateScope {
|
| };
|
|
|
| #ifdef VERIFY_HEAP
|
| -class NoWeakEmbeddedMapsVerificationScope {
|
| +class NoWeakObjectVerificationScope {
|
| public:
|
| - inline NoWeakEmbeddedMapsVerificationScope();
|
| - inline ~NoWeakEmbeddedMapsVerificationScope();
|
| + inline NoWeakObjectVerificationScope();
|
| + inline ~NoWeakObjectVerificationScope();
|
| };
|
| #endif
|
|
|
|
|