| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 8e64fe38da799f8c772a11ccda4977442703d94f..6cbdecab87acb32072e49071b4fe70782a27b66e 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -1906,13 +1906,15 @@ class JSObject: public JSReceiver {
|
| PrototypeOptimizationMode mode);
|
| static void ReoptimizeIfPrototype(Handle<JSObject> object);
|
| static void LazyRegisterPrototypeUser(Handle<Map> user, Isolate* isolate);
|
| - static bool RegisterPrototypeUserIfNotRegistered(Handle<JSObject> prototype,
|
| - Handle<HeapObject> user,
|
| - Isolate* isolate);
|
| - static bool UnregisterPrototypeUser(Handle<JSObject> prototype,
|
| - Handle<HeapObject> user);
|
| + static bool UnregisterPrototypeUser(Handle<Map> user, Isolate* isolate);
|
| static void InvalidatePrototypeChains(Map* map);
|
|
|
| + // Alternative implementation of WeakFixedArray::NullCallback.
|
| + class PrototypeRegistryCompactionCallback {
|
| + public:
|
| + static void Callback(Object* value, int old_index, int new_index);
|
| + };
|
| +
|
| // Retrieve interceptors.
|
| InterceptorInfo* GetNamedInterceptor();
|
| InterceptorInfo* GetIndexedInterceptor();
|
| @@ -2531,17 +2533,22 @@ class FixedDoubleArray: public FixedArrayBase {
|
|
|
| class WeakFixedArray : public FixedArray {
|
| public:
|
| - enum SearchForDuplicates { kAlwaysAdd, kAddIfNotFound };
|
| -
|
| // If |maybe_array| is not a WeakFixedArray, a fresh one will be allocated.
|
| - static Handle<WeakFixedArray> Add(
|
| - Handle<Object> maybe_array, Handle<HeapObject> value,
|
| - SearchForDuplicates search_for_duplicates = kAlwaysAdd,
|
| - bool* was_present = NULL);
|
| + // This function does not check if the value exists already, callers must
|
| + // ensure this themselves if necessary.
|
| + static Handle<WeakFixedArray> Add(Handle<Object> maybe_array,
|
| + Handle<HeapObject> value,
|
| + int* assigned_index = NULL);
|
|
|
| // Returns true if an entry was found and removed.
|
| bool Remove(Handle<HeapObject> value);
|
|
|
| + class NullCallback {
|
| + public:
|
| + static void Callback(Object* value, int old_index, int new_index) {}
|
| + };
|
| +
|
| + template <class CompactionCallback>
|
| void Compact();
|
|
|
| inline Object* Get(int index) const;
|
| @@ -5468,6 +5475,8 @@ class Map: public HeapObject {
|
| // the given prototype's map).
|
| static Handle<PrototypeInfo> GetOrCreatePrototypeInfo(
|
| Handle<JSObject> prototype, Isolate* isolate);
|
| + static Handle<PrototypeInfo> GetOrCreatePrototypeInfo(
|
| + Handle<Map> prototype_map, Isolate* isolate);
|
|
|
| // [prototype chain validity cell]: Associated with a prototype object,
|
| // stored in that object's map's PrototypeInfo, indicates that prototype
|
| @@ -6037,9 +6046,15 @@ class Box : public Struct {
|
| // Container for metadata stored on each prototype map.
|
| class PrototypeInfo : public Struct {
|
| public:
|
| + static const int UNREGISTERED = -1;
|
| +
|
| // [prototype_users]: WeakFixedArray containing maps using this prototype,
|
| // or Smi(0) if uninitialized.
|
| DECL_ACCESSORS(prototype_users, Object)
|
| + // [registry_slot]: Slot in prototype's user registry where this user
|
| + // is stored. Returns UNREGISTERED if this prototype has not been registered.
|
| + inline int registry_slot() const;
|
| + inline void set_registry_slot(int slot);
|
| // [validity_cell]: Cell containing the validity bit for prototype chains
|
| // going through this object, or Smi(0) if uninitialized.
|
| DECL_ACCESSORS(validity_cell, Object)
|
| @@ -6053,7 +6068,8 @@ class PrototypeInfo : public Struct {
|
| DECLARE_VERIFIER(PrototypeInfo)
|
|
|
| static const int kPrototypeUsersOffset = HeapObject::kHeaderSize;
|
| - static const int kValidityCellOffset = kPrototypeUsersOffset + kPointerSize;
|
| + static const int kRegistrySlotOffset = kPrototypeUsersOffset + kPointerSize;
|
| + static const int kValidityCellOffset = kRegistrySlotOffset + kPointerSize;
|
| static const int kConstructorNameOffset = kValidityCellOffset + kPointerSize;
|
| static const int kSize = kConstructorNameOffset + kPointerSize;
|
|
|
|
|