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

Unified Diff: src/objects.h

Issue 9212006: [objects] NotSeededNumberDictionary Base URL: gh:v8/v8@master
Patch Set: Created 8 years, 11 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/incremental-marking.cc ('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 2f92d70b3fb649d973597b927bb012f684f8bad4..25811d16af7c621b99e417d7cc5e1c4b9960ad36 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -3036,9 +3036,16 @@ class StringDictionary: public Dictionary<StringDictionaryShape, String*> {
};
+enum NumberDictionaryKind {
+ kNotSeeded = 0,
+ kSeeded
+};
+
+
+template <NumberDictionaryKind kind>
class NumberDictionaryShape : public BaseShape<uint32_t> {
public:
- static const bool UsesSeed = true;
+ static const bool UsesSeed = kind;
static inline bool IsMatch(uint32_t key, Object* other);
static inline uint32_t Hash(uint32_t key);
@@ -3054,26 +3061,14 @@ class NumberDictionaryShape : public BaseShape<uint32_t> {
};
-class NumberDictionary: public Dictionary<NumberDictionaryShape, uint32_t> {
+class NumberDictionaryBase {
public:
- static NumberDictionary* cast(Object* obj) {
- ASSERT(obj->IsDictionary());
- return reinterpret_cast<NumberDictionary*>(obj);
- }
-
// Type specific at put (default NONE attributes is used when adding).
MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value);
MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key,
Object* value,
PropertyDetails details);
- // Set an existing entry or add a new one if needed.
- // Return the updated dictionary.
- MUST_USE_RESULT static Handle<NumberDictionary> Set(
- Handle<NumberDictionary> dictionary,
- uint32_t index,
- Handle<Object> value,
- PropertyDetails details);
MUST_USE_RESULT MaybeObject* Set(uint32_t key,
Object* value,
@@ -3094,10 +3089,69 @@ class NumberDictionary: public Dictionary<NumberDictionaryShape, uint32_t> {
// requires_slow_elements returns false.
inline uint32_t max_number_key();
+ protected:
// Bit masks.
static const int kRequiresSlowElementsMask = 1;
static const int kRequiresSlowElementsTagSize = 1;
static const uint32_t kRequiresSlowElementsLimit = (1 << 29) - 1;
+
+ private:
+ // Internal function for easier conversion
+ inline NumberDictionary* as_dict() {
+ return reinterpret_cast<NumberDictionary*>(this);
+ }
+};
+
+
+class NumberDictionary :
+ public Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>,
+ public NumberDictionaryBase {
+ public:
+ static NumberDictionary* cast(Object* obj) {
+ ASSERT(obj->IsDictionary());
+ return reinterpret_cast<NumberDictionary*>(obj);
+ }
+
+ MUST_USE_RESULT MaybeObject* Set(uint32_t key,
+ Object* value,
+ PropertyDetails details) {
+ return NumberDictionaryBase::Set(key, value, details);
+ }
+
+ // Set an existing entry or add a new one if needed.
+ // Return the updated dictionary.
+ MUST_USE_RESULT static Handle<NumberDictionary> Set(
+ Handle<NumberDictionary> dictionary,
+ uint32_t index,
+ Handle<Object> value,
+ PropertyDetails details);
+
+ friend class NumberDictionaryBase;
+};
+
+
+class NotSeededNumberDictionary :
+ public Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>,
+ public NumberDictionaryBase {
+ public:
+ static NotSeededNumberDictionary* cast(Object* obj) {
+ ASSERT(obj->IsDictionary());
+ return reinterpret_cast<NotSeededNumberDictionary*>(obj);
+ }
+
+ MUST_USE_RESULT MaybeObject* Set(uint32_t key,
+ Object* value,
+ PropertyDetails details) {
+ return NumberDictionaryBase::Set(key, value, details);
+ }
+
+ // Set an existing entry or add a new one if needed.
+ // Return the updated dictionary.
+ MUST_USE_RESULT static Handle<NotSeededNumberDictionary> Set(
+ Handle<NotSeededNumberDictionary> dictionary,
+ uint32_t index,
+ Handle<Object> value,
+ PropertyDetails details);
};
« no previous file with comments | « src/incremental-marking.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698