Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(899)

Unified Diff: src/objects.h

Issue 1163673003: Introducing GlobalDictionary, a backing store for global objects. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressing comments Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/globals.h ('k') | src/objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index a973f12663683f16b2befb784f89fef84fc6facc..eacd70701f211b915f85d65acbc5128abf81b985 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -1052,6 +1052,7 @@ class Object {
INLINE(bool IsSpecFunction()) const;
INLINE(bool IsTemplateInfo()) const;
INLINE(bool IsNameDictionary() const);
+ INLINE(bool IsGlobalDictionary() const);
INLINE(bool IsSeededNumberDictionary() const);
INLINE(bool IsUnseededNumberDictionary() const);
INLINE(bool IsOrderedHashSet() const);
@@ -1721,7 +1722,10 @@ class JSObject: public JSReceiver {
DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties.
inline void initialize_properties();
inline bool HasFastProperties();
- inline NameDictionary* property_dictionary(); // Gets slow properties.
+ // Gets slow properties for non-global objects.
+ inline NameDictionary* property_dictionary();
+ // Gets global object properties.
+ inline GlobalDictionary* global_dictionary();
// [elements]: The elements (properties with names that are integers).
//
@@ -3590,30 +3594,29 @@ enum class DictionaryEntryType { kObjects, kCells };
template <typename Derived, typename Shape, typename Key>
class Dictionary: public HashTable<Derived, Shape, Key> {
- protected:
typedef HashTable<Derived, Shape, Key> DerivedHashTable;
public:
// Returns the value at entry.
Object* ValueAt(int entry) {
- return this->get(DerivedHashTable::EntryToIndex(entry) + 1);
+ return this->get(Derived::EntryToIndex(entry) + 1);
}
// Set the value for entry.
void ValueAtPut(int entry, Object* value) {
- this->set(DerivedHashTable::EntryToIndex(entry) + 1, value);
+ this->set(Derived::EntryToIndex(entry) + 1, value);
}
// Returns the property details for the property at entry.
PropertyDetails DetailsAt(int entry) {
DCHECK(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(Derived::EntryToIndex(entry) + 2)));
}
// Set the details for entry.
void DetailsAtPut(int entry, PropertyDetails value) {
- this->set(DerivedHashTable::EntryToIndex(entry) + 2, value.AsSmi());
+ this->set(Derived::EntryToIndex(entry) + 2, value.AsSmi());
}
// Delete a property from the dictionary.
@@ -3703,6 +3706,17 @@ class Dictionary: public HashTable<Derived, Shape, Key> {
}
}
+ // Copies enumerable keys to preallocated fixed array.
+ template <DictionaryEntryType type>
+ void CopyEnumKeysTo(FixedArray* storage);
+ void CopyEnumKeysTo(Object* holder, FixedArray* storage) {
+ if (holder->IsGlobalObject()) {
+ return CopyEnumKeysTo<DictionaryEntryType::kCells>(storage);
+ } else {
+ return CopyEnumKeysTo<DictionaryEntryType::kObjects>(storage);
+ }
+ }
+
// Accessors for next enumeration index.
void SetNextEnumerationIndex(int index) {
DCHECK(index != 0);
@@ -3772,6 +3786,17 @@ class Dictionary: public HashTable<Derived, Shape, Key> {
};
+template <typename Derived, typename Shape>
+class NameDictionaryBase : public Dictionary<Derived, Shape, Handle<Name> > {
+ typedef Dictionary<Derived, Shape, Handle<Name> > DerivedDictionary;
+
+ public:
+ // Find entry for key, otherwise return kNotFound. Optimized version of
+ // HashTable::FindEntry.
+ int FindEntry(Handle<Name> key);
+};
+
+
class NameDictionaryShape : public BaseShape<Handle<Name> > {
public:
static inline bool IsMatch(Handle<Name> key, Object* other);
@@ -3784,32 +3809,29 @@ class NameDictionaryShape : public BaseShape<Handle<Name> > {
};
-class NameDictionary: public Dictionary<NameDictionary,
- NameDictionaryShape,
- Handle<Name> > {
- typedef Dictionary<
- NameDictionary, NameDictionaryShape, Handle<Name> > DerivedDictionary;
+class NameDictionary
+ : public NameDictionaryBase<NameDictionary, NameDictionaryShape> {
+ typedef NameDictionaryBase<NameDictionary, NameDictionaryShape>
+ DerivedDictionary;
public:
DECLARE_CAST(NameDictionary)
- // Copies enumerable keys to preallocated fixed array.
- template <DictionaryEntryType type>
- void CopyEnumKeysTo(FixedArray* storage);
- void CopyEnumKeysTo(Object* holder, FixedArray* storage) {
- if (holder->IsGlobalObject()) {
- return CopyEnumKeysTo<DictionaryEntryType::kCells>(storage);
- } else {
- return CopyEnumKeysTo<DictionaryEntryType::kObjects>(storage);
- }
- }
-
inline static Handle<FixedArray> DoGenerateNewEnumerationIndices(
Handle<NameDictionary> dictionary);
+};
- // Find entry for key, otherwise return kNotFound. Optimized version of
- // HashTable::FindEntry.
- int FindEntry(Handle<Name> key);
+
+class GlobalDictionaryShape : public NameDictionaryShape {
+ public:
+ static const int kEntrySize = 3; // Overrides NameDictionaryShape::kEntrySize
+};
+
+
+class GlobalDictionary
+ : public NameDictionaryBase<GlobalDictionary, GlobalDictionaryShape> {
+ public:
+ DECLARE_CAST(GlobalDictionary)
};
« no previous file with comments | « src/globals.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698