| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index cd651060dc83bab332ec64bc5dc2da299f09addd..38c17b5940b132e5096b07d0286deee1b77c0396 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -1044,7 +1044,8 @@ class MaybeObject BASE_EMBEDDED {
|
| V(AccessCheckNeeded) \
|
| V(Cell) \
|
| V(PropertyCell) \
|
| - V(ObjectHashTable)
|
| + V(ObjectHashTable) \
|
| + V(WeakHashTable)
|
|
|
|
|
| #define ERROR_MESSAGES_LIST(V) \
|
| @@ -2891,7 +2892,8 @@ class FixedArray: public FixedArrayBase {
|
|
|
| // Copy operations.
|
| MUST_USE_RESULT inline MaybeObject* Copy();
|
| - MUST_USE_RESULT MaybeObject* CopySize(int new_length);
|
| + MUST_USE_RESULT MaybeObject* CopySize(int new_length,
|
| + PretenureFlag pretenure = NOT_TENURED);
|
|
|
| // Add the elements of a JSArray to this FixedArray.
|
| MUST_USE_RESULT MaybeObject* AddKeysFromJSArray(JSArray* array);
|
| @@ -3526,7 +3528,10 @@ class HashTable: public FixedArray {
|
| MUST_USE_RESULT MaybeObject* Shrink(Key key);
|
|
|
| // Ensure enough space for n additional elements.
|
| - MUST_USE_RESULT MaybeObject* EnsureCapacity(int n, Key key);
|
| + MUST_USE_RESULT MaybeObject* EnsureCapacity(
|
| + int n,
|
| + Key key,
|
| + PretenureFlag pretenure = NOT_TENURED);
|
| };
|
|
|
|
|
| @@ -3965,6 +3970,49 @@ class ObjectHashTable: public HashTable<ObjectHashTableShape<2>, Object*> {
|
| };
|
|
|
|
|
| +template <int entrysize>
|
| +class WeakHashTableShape : public BaseShape<Object*> {
|
| + public:
|
| + static inline bool IsMatch(Object* key, Object* other);
|
| + static inline uint32_t Hash(Object* key);
|
| + static inline uint32_t HashForObject(Object* key, Object* object);
|
| + MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap,
|
| + Object* key);
|
| + static const int kPrefixSize = 0;
|
| + static const int kEntrySize = entrysize;
|
| +};
|
| +
|
| +
|
| +// WeakHashTable maps keys that are arbitrary objects to object values.
|
| +// It is used for the global weak hash table that maps objects
|
| +// embedded in optimized code to dependent code lists.
|
| +class WeakHashTable: public HashTable<WeakHashTableShape<2>, Object*> {
|
| + public:
|
| + static inline WeakHashTable* cast(Object* obj) {
|
| + ASSERT(obj->IsHashTable());
|
| + return reinterpret_cast<WeakHashTable*>(obj);
|
| + }
|
| +
|
| + // Looks up the value associated with the given key. The hole value is
|
| + // returned in case the key is not present.
|
| + Object* Lookup(Object* key);
|
| +
|
| + // Adds (or overwrites) the value associated with the given key. Mapping a
|
| + // key to the hole value causes removal of the whole entry.
|
| + MUST_USE_RESULT MaybeObject* Put(Object* key, Object* value);
|
| +
|
| + private:
|
| + friend class MarkCompactCollector;
|
| +
|
| + void AddEntry(int entry, Object* key, Object* value);
|
| +
|
| + // Returns the index to the value of an entry.
|
| + static inline int EntryToValueIndex(int entry) {
|
| + return EntryToIndex(entry) + 1;
|
| + }
|
| +};
|
| +
|
| +
|
| // JSFunctionResultCache caches results of some JSFunction invocation.
|
| // It is a fixed array with fixed structure:
|
| // [0]: factory function
|
| @@ -5144,9 +5192,11 @@ class Code: public HeapObject {
|
| bool CanDeoptAt(Address pc);
|
|
|
| #ifdef VERIFY_HEAP
|
| - void VerifyEmbeddedMapsDependency();
|
| + void VerifyEmbeddedObjectsDependency();
|
| #endif
|
|
|
| + static bool IsWeakEmbeddedObject(Kind kind, Object* object);
|
| +
|
| // Max loop nesting marker used to postpose OSR. We don't take loop
|
| // nesting that is deeper than 5 levels into account.
|
| static const int kMaxLoopNestingMarker = 6;
|
|
|