| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 48468c3ff0c60c00b3963a8ffff9e0d08804f1f0..1c3a82078adc0dfb89cb610f172d1f577dbdebe9 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -3656,7 +3656,7 @@ class BaseShape {
|
| }
|
| };
|
|
|
| -template<typename Derived, typename Shape, typename Key>
|
| +template<typename Shape, typename Key>
|
| class HashTable: public FixedArray {
|
| public:
|
| // Wrapper methods
|
| @@ -3709,20 +3709,12 @@ class HashTable: public FixedArray {
|
| }
|
|
|
| // Returns a new HashTable object. Might return Failure.
|
| - // TODO(ishell): this will be eventually replaced by New().
|
| MUST_USE_RESULT static MaybeObject* Allocate(
|
| Heap* heap,
|
| int at_least_space_for,
|
| MinimumCapacity capacity_option = USE_DEFAULT_MINIMUM_CAPACITY,
|
| PretenureFlag pretenure = NOT_TENURED);
|
|
|
| - // Returns a new HashTable object.
|
| - static Handle<Derived> New(
|
| - Isolate* isolate,
|
| - int at_least_space_for,
|
| - MinimumCapacity capacity_option = USE_DEFAULT_MINIMUM_CAPACITY,
|
| - PretenureFlag pretenure = NOT_TENURED);
|
| -
|
| // Computes the required capacity for a table holding the given
|
| // number of elements. May be more than HashTable::kMaxCapacity.
|
| static int ComputeCapacity(int at_least_space_for);
|
| @@ -3832,10 +3824,10 @@ class HashTable: public FixedArray {
|
| void Swap(uint32_t entry1, uint32_t entry2, WriteBarrierMode mode);
|
|
|
| // Rehashes this hash-table into the new table.
|
| - void Rehash(Derived* new_table, Key key);
|
| + MUST_USE_RESULT MaybeObject* Rehash(HashTable* new_table, Key key);
|
|
|
| // Attempt to shrink hash table after removal of key.
|
| - static Handle<Derived> Shrink(Handle<Derived> table, Key key);
|
| + MUST_USE_RESULT MaybeObject* Shrink(Key key);
|
|
|
| // Ensure enough space for n additional elements.
|
| MUST_USE_RESULT MaybeObject* EnsureCapacity(
|
| @@ -3888,9 +3880,7 @@ class SeqOneByteString;
|
| //
|
| // No special elements in the prefix and the element size is 1
|
| // because only the string itself (the key) needs to be stored.
|
| -class StringTable: public HashTable<StringTable,
|
| - StringTableShape,
|
| - HashTableKey*> {
|
| +class StringTable: public HashTable<StringTableShape, HashTableKey*> {
|
| public:
|
| // Find string in the string table. If it is not there yet, it is
|
| // added. The return value is the string table which might have
|
| @@ -3942,7 +3932,7 @@ class MapCacheShape : public BaseShape<HashTableKey*> {
|
| //
|
| // Maps keys that are a fixed array of unique names to a map.
|
| // Used for canonicalize maps for object literals.
|
| -class MapCache: public HashTable<MapCache, MapCacheShape, HashTableKey*> {
|
| +class MapCache: public HashTable<MapCacheShape, HashTableKey*> {
|
| public:
|
| // Find cached value for a name key, otherwise return null.
|
| Object* Lookup(FixedArray* key);
|
| @@ -3954,36 +3944,33 @@ class MapCache: public HashTable<MapCache, MapCacheShape, HashTableKey*> {
|
| };
|
|
|
|
|
| -template <typename Derived, typename Shape, typename Key>
|
| -class Dictionary: public HashTable<Derived, Shape, Key> {
|
| - protected:
|
| - typedef HashTable<Derived, Shape, Key> DerivedHashTable;
|
| -
|
| +template <typename Shape, typename Key>
|
| +class Dictionary: public HashTable<Shape, Key> {
|
| public:
|
| - static inline Dictionary* cast(Object* obj) {
|
| - return reinterpret_cast<Dictionary*>(obj);
|
| + static inline Dictionary<Shape, Key>* cast(Object* obj) {
|
| + return reinterpret_cast<Dictionary<Shape, Key>*>(obj);
|
| }
|
|
|
| // Returns the value at entry.
|
| Object* ValueAt(int entry) {
|
| - return this->get(DerivedHashTable::EntryToIndex(entry) + 1);
|
| + return this->get(HashTable<Shape, Key>::EntryToIndex(entry) + 1);
|
| }
|
|
|
| // Set the value for entry.
|
| void ValueAtPut(int entry, Object* value) {
|
| - this->set(DerivedHashTable::EntryToIndex(entry) + 1, value);
|
| + this->set(HashTable<Shape, Key>::EntryToIndex(entry) + 1, value);
|
| }
|
|
|
| // Returns the property details for the property at entry.
|
| PropertyDetails DetailsAt(int entry) {
|
| ASSERT(entry >= 0); // Not found is -1, which is not caught by get().
|
| return PropertyDetails(
|
| - Smi::cast(this->get(DerivedHashTable::EntryToIndex(entry) + 2)));
|
| + Smi::cast(this->get(HashTable<Shape, Key>::EntryToIndex(entry) + 2)));
|
| }
|
|
|
| // Set the details for entry.
|
| void DetailsAtPut(int entry, PropertyDetails value) {
|
| - this->set(DerivedHashTable::EntryToIndex(entry) + 2, value.AsSmi());
|
| + this->set(HashTable<Shape, Key>::EntryToIndex(entry) + 2, value.AsSmi());
|
| }
|
|
|
| // Sorting support
|
| @@ -3993,14 +3980,16 @@ class Dictionary: public HashTable<Derived, Shape, Key> {
|
| Object* DeleteProperty(int entry, JSObject::DeleteMode mode);
|
| // TODO(ishell): Temporary wrapper until handlified.
|
| static Handle<Object> DeleteProperty(
|
| - Handle<Dictionary> dictionary,
|
| + Handle<Dictionary<Shape, Key> > dictionary,
|
| int entry,
|
| JSObject::DeleteMode mode);
|
|
|
| // Attempt to shrink the dictionary after deletion of key.
|
| - static inline Handle<Derived> Shrink(Handle<Derived> dictionary, Key key) {
|
| - return DerivedHashTable::Shrink(dictionary, key);
|
| - }
|
| + MUST_USE_RESULT MaybeObject* Shrink(Key key);
|
| + // TODO(ishell): Temporary wrapper until handlified.
|
| + MUST_USE_RESULT static Handle<FixedArray> Shrink(
|
| + Handle<Dictionary<Shape, Key> > dictionary,
|
| + Key key);
|
|
|
| // Returns the number of elements in the dictionary filtering out properties
|
| // with the specified attributes.
|
| @@ -4070,7 +4059,8 @@ class Dictionary: public HashTable<Derived, Shape, Key> {
|
|
|
| // Generate new enumeration indices to avoid enumeration index overflow.
|
| MUST_USE_RESULT MaybeObject* GenerateNewEnumerationIndices();
|
| - static const int kMaxNumberKeyIndex = DerivedHashTable::kPrefixStartIndex;
|
| + static const int kMaxNumberKeyIndex =
|
| + HashTable<Shape, Key>::kPrefixStartIndex;
|
| static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1;
|
| };
|
|
|
| @@ -4088,9 +4078,7 @@ class NameDictionaryShape : public BaseShape<Name*> {
|
| };
|
|
|
|
|
| -class NameDictionary: public Dictionary<NameDictionary,
|
| - NameDictionaryShape,
|
| - Name*> {
|
| +class NameDictionary: public Dictionary<NameDictionaryShape, Name*> {
|
| public:
|
| static inline NameDictionary* cast(Object* obj) {
|
| ASSERT(obj->IsDictionary());
|
| @@ -4140,9 +4128,7 @@ class UnseededNumberDictionaryShape : public NumberDictionaryShape {
|
|
|
|
|
| class SeededNumberDictionary
|
| - : public Dictionary<SeededNumberDictionary,
|
| - SeededNumberDictionaryShape,
|
| - uint32_t> {
|
| + : public Dictionary<SeededNumberDictionaryShape, uint32_t> {
|
| public:
|
| static SeededNumberDictionary* cast(Object* obj) {
|
| ASSERT(obj->IsDictionary());
|
| @@ -4195,9 +4181,7 @@ class SeededNumberDictionary
|
|
|
|
|
| class UnseededNumberDictionary
|
| - : public Dictionary<UnseededNumberDictionary,
|
| - UnseededNumberDictionaryShape,
|
| - uint32_t> {
|
| + : public Dictionary<UnseededNumberDictionaryShape, uint32_t> {
|
| public:
|
| static UnseededNumberDictionary* cast(Object* obj) {
|
| ASSERT(obj->IsDictionary());
|
| @@ -4233,10 +4217,7 @@ class ObjectHashTableShape : public BaseShape<Object*> {
|
|
|
| // ObjectHashTable maps keys that are arbitrary objects to object values by
|
| // using the identity hash of the key for hashing purposes.
|
| -class ObjectHashTable: public HashTable<ObjectHashTable,
|
| - ObjectHashTableShape,
|
| - Object*> {
|
| - typedef HashTable<ObjectHashTable, ObjectHashTableShape, Object*> HashTable_;
|
| +class ObjectHashTable: public HashTable<ObjectHashTableShape, Object*> {
|
| public:
|
| static inline ObjectHashTable* cast(Object* obj) {
|
| ASSERT(obj->IsHashTable());
|
| @@ -4250,8 +4231,8 @@ class ObjectHashTable: public HashTable<ObjectHashTable,
|
| PretenureFlag pretenure = NOT_TENURED);
|
|
|
| // Attempt to shrink hash table after removal of key.
|
| - static inline Handle<ObjectHashTable> Shrink(Handle<ObjectHashTable> table,
|
| - Handle<Object> key);
|
| + static Handle<ObjectHashTable> Shrink(Handle<ObjectHashTable> table,
|
| + Handle<Object> key);
|
|
|
| // Looks up the value associated with the given key. The hole value is
|
| // returned in case the key is not present.
|
| @@ -4449,9 +4430,7 @@ class WeakHashTableShape : public BaseShape<Object*> {
|
| // 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<WeakHashTable,
|
| - WeakHashTableShape<2>,
|
| - Object*> {
|
| +class WeakHashTable: public HashTable<WeakHashTableShape<2>, Object*> {
|
| public:
|
| static inline WeakHashTable* cast(Object* obj) {
|
| ASSERT(obj->IsHashTable());
|
| @@ -8221,8 +8200,7 @@ class CompilationCacheShape : public BaseShape<HashTableKey*> {
|
| };
|
|
|
|
|
| -class CompilationCacheTable: public HashTable<CompilationCacheTable,
|
| - CompilationCacheShape,
|
| +class CompilationCacheTable: public HashTable<CompilationCacheShape,
|
| HashTableKey*> {
|
| public:
|
| // Find cached value for a string key, otherwise return null.
|
| @@ -8323,8 +8301,7 @@ class CodeCacheHashTableShape : public BaseShape<HashTableKey*> {
|
| };
|
|
|
|
|
| -class CodeCacheHashTable: public HashTable<CodeCacheHashTable,
|
| - CodeCacheHashTableShape,
|
| +class CodeCacheHashTable: public HashTable<CodeCacheHashTableShape,
|
| HashTableKey*> {
|
| public:
|
| Object* Lookup(Name* name, Code::Flags flags);
|
| @@ -8374,9 +8351,7 @@ class PolymorphicCodeCache: public Struct {
|
|
|
|
|
| class PolymorphicCodeCacheHashTable
|
| - : public HashTable<PolymorphicCodeCacheHashTable,
|
| - CodeCacheHashTableShape,
|
| - HashTableKey*> {
|
| + : public HashTable<CodeCacheHashTableShape, HashTableKey*> {
|
| public:
|
| Object* Lookup(MapHandleList* maps, int code_kind);
|
|
|
|
|