| OLD | NEW |
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_OBJECTS_DICTIONARY_H_ | 5 #ifndef V8_OBJECTS_DICTIONARY_H_ |
| 6 #define V8_OBJECTS_DICTIONARY_H_ | 6 #define V8_OBJECTS_DICTIONARY_H_ |
| 7 | 7 |
| 8 #include "src/objects/hash-table.h" | 8 #include "src/objects/hash-table.h" |
| 9 | 9 |
| 10 #include "src/base/export-template.h" | 10 #include "src/base/export-template.h" |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 160 |
| 161 MUST_USE_RESULT static Handle<Derived> Add(Handle<Derived> dictionary, | 161 MUST_USE_RESULT static Handle<Derived> Add(Handle<Derived> dictionary, |
| 162 Key key, Handle<Object> value, | 162 Key key, Handle<Object> value, |
| 163 PropertyDetails details, | 163 PropertyDetails details, |
| 164 int* entry_out = nullptr); | 164 int* entry_out = nullptr); |
| 165 }; | 165 }; |
| 166 | 166 |
| 167 class NameDictionary | 167 class NameDictionary |
| 168 : public BaseNameDictionary<NameDictionary, NameDictionaryShape> { | 168 : public BaseNameDictionary<NameDictionary, NameDictionaryShape> { |
| 169 public: | 169 public: |
| 170 DECLARE_CAST(NameDictionary) | 170 DECL_CAST(NameDictionary) |
| 171 | 171 |
| 172 static const int kEntryDetailsIndex = 2; | 172 static const int kEntryDetailsIndex = 2; |
| 173 static const int kInitialCapacity = 2; | 173 static const int kInitialCapacity = 2; |
| 174 inline Name* NameAt(int entry); | 174 inline Name* NameAt(int entry); |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 class GlobalDictionaryShape : public NameDictionaryShape { | 177 class GlobalDictionaryShape : public NameDictionaryShape { |
| 178 public: | 178 public: |
| 179 static inline bool IsMatch(Handle<Name> key, Object* other); | 179 static inline bool IsMatch(Handle<Name> key, Object* other); |
| 180 static inline uint32_t HashForObject(Isolate* isolate, Object* object); | 180 static inline uint32_t HashForObject(Isolate* isolate, Object* object); |
| 181 | 181 |
| 182 static const int kEntrySize = 1; // Overrides NameDictionaryShape::kEntrySize | 182 static const int kEntrySize = 1; // Overrides NameDictionaryShape::kEntrySize |
| 183 | 183 |
| 184 template <typename Dictionary> | 184 template <typename Dictionary> |
| 185 static inline PropertyDetails DetailsAt(Dictionary* dict, int entry); | 185 static inline PropertyDetails DetailsAt(Dictionary* dict, int entry); |
| 186 | 186 |
| 187 template <typename Dictionary> | 187 template <typename Dictionary> |
| 188 static inline void DetailsAtPut(Dictionary* dict, int entry, | 188 static inline void DetailsAtPut(Dictionary* dict, int entry, |
| 189 PropertyDetails value); | 189 PropertyDetails value); |
| 190 | 190 |
| 191 static inline Object* Unwrap(Object* key); | 191 static inline Object* Unwrap(Object* key); |
| 192 static inline bool IsKey(Isolate* isolate, Object* k); | 192 static inline bool IsKey(Isolate* isolate, Object* k); |
| 193 static inline bool IsLive(Isolate* isolate, Object* key); | 193 static inline bool IsLive(Isolate* isolate, Object* key); |
| 194 }; | 194 }; |
| 195 | 195 |
| 196 class GlobalDictionary | 196 class GlobalDictionary |
| 197 : public BaseNameDictionary<GlobalDictionary, GlobalDictionaryShape> { | 197 : public BaseNameDictionary<GlobalDictionary, GlobalDictionaryShape> { |
| 198 public: | 198 public: |
| 199 DECLARE_CAST(GlobalDictionary) | 199 DECL_CAST(GlobalDictionary) |
| 200 | 200 |
| 201 inline Object* ValueAt(int entry); | 201 inline Object* ValueAt(int entry); |
| 202 inline PropertyCell* CellAt(int entry); | 202 inline PropertyCell* CellAt(int entry); |
| 203 inline void SetEntry(int entry, Object* key, Object* value, | 203 inline void SetEntry(int entry, Object* key, Object* value, |
| 204 PropertyDetails details); | 204 PropertyDetails details); |
| 205 inline Name* NameAt(int entry); | 205 inline Name* NameAt(int entry); |
| 206 void ValueAtPut(int entry, Object* value) { set(EntryToIndex(entry), value); } | 206 void ValueAtPut(int entry, Object* value) { set(EntryToIndex(entry), value); } |
| 207 }; | 207 }; |
| 208 | 208 |
| 209 class NumberDictionaryShape : public BaseDictionaryShape<uint32_t> { | 209 class NumberDictionaryShape : public BaseDictionaryShape<uint32_t> { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 | 246 |
| 247 extern template class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) | 247 extern template class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) |
| 248 HashTable<SeededNumberDictionary, SeededNumberDictionaryShape>; | 248 HashTable<SeededNumberDictionary, SeededNumberDictionaryShape>; |
| 249 | 249 |
| 250 extern template class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) | 250 extern template class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) |
| 251 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape>; | 251 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape>; |
| 252 | 252 |
| 253 class SeededNumberDictionary | 253 class SeededNumberDictionary |
| 254 : public Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape> { | 254 : public Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape> { |
| 255 public: | 255 public: |
| 256 DECLARE_CAST(SeededNumberDictionary) | 256 DECL_CAST(SeededNumberDictionary) |
| 257 | 257 |
| 258 // Type specific at put (default NONE attributes is used when adding). | 258 // Type specific at put (default NONE attributes is used when adding). |
| 259 MUST_USE_RESULT static Handle<SeededNumberDictionary> Set( | 259 MUST_USE_RESULT static Handle<SeededNumberDictionary> Set( |
| 260 Handle<SeededNumberDictionary> dictionary, uint32_t key, | 260 Handle<SeededNumberDictionary> dictionary, uint32_t key, |
| 261 Handle<Object> value, Handle<JSObject> dictionary_holder, | 261 Handle<Object> value, Handle<JSObject> dictionary_holder, |
| 262 PropertyDetails details = PropertyDetails::Empty()); | 262 PropertyDetails details = PropertyDetails::Empty()); |
| 263 | 263 |
| 264 static const int kMaxNumberKeyIndex = kPrefixStartIndex; | 264 static const int kMaxNumberKeyIndex = kPrefixStartIndex; |
| 265 void UpdateMaxNumberKey(uint32_t key, Handle<JSObject> dictionary_holder); | 265 void UpdateMaxNumberKey(uint32_t key, Handle<JSObject> dictionary_holder); |
| 266 | 266 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 294 | 294 |
| 295 // JSObjects prefer dictionary elements if the dictionary saves this much | 295 // JSObjects prefer dictionary elements if the dictionary saves this much |
| 296 // memory compared to a fast elements backing store. | 296 // memory compared to a fast elements backing store. |
| 297 static const uint32_t kPreferFastElementsSizeFactor = 3; | 297 static const uint32_t kPreferFastElementsSizeFactor = 3; |
| 298 }; | 298 }; |
| 299 | 299 |
| 300 class UnseededNumberDictionary | 300 class UnseededNumberDictionary |
| 301 : public Dictionary<UnseededNumberDictionary, | 301 : public Dictionary<UnseededNumberDictionary, |
| 302 UnseededNumberDictionaryShape> { | 302 UnseededNumberDictionaryShape> { |
| 303 public: | 303 public: |
| 304 DECLARE_CAST(UnseededNumberDictionary) | 304 DECL_CAST(UnseededNumberDictionary) |
| 305 | 305 |
| 306 // Type specific at put (default NONE attributes is used when adding). | 306 // Type specific at put (default NONE attributes is used when adding). |
| 307 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( | 307 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( |
| 308 Handle<UnseededNumberDictionary> dictionary, uint32_t key, | 308 Handle<UnseededNumberDictionary> dictionary, uint32_t key, |
| 309 Handle<Object> value); | 309 Handle<Object> value); |
| 310 | 310 |
| 311 static const int kEntryValueIndex = 1; | 311 static const int kEntryValueIndex = 1; |
| 312 }; | 312 }; |
| 313 | 313 |
| 314 } // namespace internal | 314 } // namespace internal |
| 315 } // namespace v8 | 315 } // namespace v8 |
| 316 | 316 |
| 317 #include "src/objects/object-macros-undef.h" | 317 #include "src/objects/object-macros-undef.h" |
| 318 | 318 |
| 319 #endif // V8_OBJECTS_DICTIONARY_H_ | 319 #endif // V8_OBJECTS_DICTIONARY_H_ |
| OLD | NEW |