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

Unified Diff: src/objects.cc

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/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index f8939660acc4ba7c214f9a26bb7249213a948fe7..ad4fa9582de65d5eb5bbe35c5ae94644199daa87 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -11024,39 +11024,62 @@ template class HashTable<ObjectHashTableShape<2>, Object*>;
template class Dictionary<StringDictionaryShape, String*>;
-template class Dictionary<NumberDictionaryShape, uint32_t>;
+template class Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>;
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::Allocate(
- int);
+template class Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>;
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ Allocate(int);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ Allocate(int);
template MaybeObject* Dictionary<StringDictionaryShape, String*>::Allocate(
int);
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::AtPut(
- uint32_t, Object*);
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ AtPut(uint32_t, Object*);
-template Object* Dictionary<NumberDictionaryShape, uint32_t>::SlowReverseLookup(
- Object*);
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ AtPut(uint32_t, Object*);
+
+template Object* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ SlowReverseLookup(Object*);
+
+template Object* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ SlowReverseLookup(Object*);
template Object* Dictionary<StringDictionaryShape, String*>::SlowReverseLookup(
Object*);
-template void Dictionary<NumberDictionaryShape, uint32_t>::CopyKeysTo(
- FixedArray*,
- PropertyAttributes,
- Dictionary<NumberDictionaryShape, uint32_t>::SortMode);
+template void Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ CopyKeysTo(FixedArray*,
+ PropertyAttributes,
+ Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::SortMode);
+
+template void Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ CopyKeysTo(
+ FixedArray*,
+ PropertyAttributes,
+ Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::SortMode);
template Object* Dictionary<StringDictionaryShape, String*>::DeleteProperty(
int, JSObject::DeleteMode);
-template Object* Dictionary<NumberDictionaryShape, uint32_t>::DeleteProperty(
- int, JSObject::DeleteMode);
+template Object* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ DeleteProperty(int, JSObject::DeleteMode);
+
+template Object* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ DeleteProperty(int, JSObject::DeleteMode);
template MaybeObject* Dictionary<StringDictionaryShape, String*>::Shrink(
String*);
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::Shrink(
- uint32_t);
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ Shrink(uint32_t);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ Shrink(uint32_t);
template void Dictionary<StringDictionaryShape, String*>::CopyKeysTo(
FixedArray*,
@@ -11074,32 +11097,53 @@ template MaybeObject*
Dictionary<StringDictionaryShape, String*>::GenerateNewEnumerationIndices();
template int
-Dictionary<NumberDictionaryShape, uint32_t>::NumberOfElementsFilterAttributes(
- PropertyAttributes);
+Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ NumberOfElementsFilterAttributes(PropertyAttributes);
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::Add(
+template int
+Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ NumberOfElementsFilterAttributes(PropertyAttributes);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::Add(
uint32_t, Object*, PropertyDetails);
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ Add(uint32_t, Object*, PropertyDetails);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ EnsureCapacity(int, uint32_t);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
EnsureCapacity(int, uint32_t);
template MaybeObject* Dictionary<StringDictionaryShape, String*>::
EnsureCapacity(int, String*);
-template MaybeObject* Dictionary<NumberDictionaryShape, uint32_t>::AddEntry(
- uint32_t, Object*, PropertyDetails, uint32_t);
+template MaybeObject* Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ AddEntry(uint32_t, Object*, PropertyDetails, uint32_t);
+
+template MaybeObject* Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ AddEntry(uint32_t, Object*, PropertyDetails, uint32_t);
template MaybeObject* Dictionary<StringDictionaryShape, String*>::AddEntry(
String*, Object*, PropertyDetails, uint32_t);
template
-int Dictionary<NumberDictionaryShape, uint32_t>::NumberOfEnumElements();
+int Dictionary<NumberDictionaryShape<kSeeded>, uint32_t>::
+ NumberOfEnumElements();
+
+template
+int Dictionary<NumberDictionaryShape<kNotSeeded>, uint32_t>::
+ NumberOfEnumElements();
template
int Dictionary<StringDictionaryShape, String*>::NumberOfEnumElements();
template
-int HashTable<NumberDictionaryShape, uint32_t>::FindEntry(uint32_t);
+int HashTable<NumberDictionaryShape<kSeeded>, uint32_t>::FindEntry(uint32_t);
+
+template
+int HashTable<NumberDictionaryShape<kNotSeeded>, uint32_t>::FindEntry(uint32_t);
// Collates undefined and unexisting elements below limit from position
@@ -12064,7 +12108,7 @@ MaybeObject* Dictionary<Shape, Key>::AddEntry(Key key,
}
-void NumberDictionary::UpdateMaxNumberKey(uint32_t key) {
+void NumberDictionaryBase::UpdateMaxNumberKey(uint32_t key) {
// If the dictionary requires slow elements an element has already
// been added at a high index.
if (requires_slow_elements()) return;
@@ -12075,26 +12119,47 @@ void NumberDictionary::UpdateMaxNumberKey(uint32_t key) {
return;
}
// Update max key value.
- Object* max_index_object = get(kMaxNumberKeyIndex);
+ Object* max_index_object = as_dict()->get(
+ NumberDictionary::kMaxNumberKeyIndex);
if (!max_index_object->IsSmi() || max_number_key() < key) {
- FixedArray::set(kMaxNumberKeyIndex,
- Smi::FromInt(key << kRequiresSlowElementsTagSize));
+ as_dict()->set(NumberDictionary::kMaxNumberKeyIndex,
+ Smi::FromInt(key << kRequiresSlowElementsTagSize));
}
}
-MaybeObject* NumberDictionary::AddNumberEntry(uint32_t key,
- Object* value,
- PropertyDetails details) {
+MaybeObject* NumberDictionaryBase::AddNumberEntry(uint32_t key,
+ Object* value,
+ PropertyDetails details) {
UpdateMaxNumberKey(key);
- SLOW_ASSERT(this->FindEntry(key) == kNotFound);
- return Add(key, value, details);
+ SLOW_ASSERT(as_dict()->FindEntry(key) == NumberDictionary::kNotFound);
+ return as_dict()->Add(key, value, details);
}
-MaybeObject* NumberDictionary::AtNumberPut(uint32_t key, Object* value) {
+MaybeObject* NumberDictionaryBase::AtNumberPut(uint32_t key, Object* value) {
UpdateMaxNumberKey(key);
- return AtPut(key, value);
+ return as_dict()->AtPut(key, value);
+}
+
+
+MaybeObject* NumberDictionaryBase::Set(uint32_t key,
+ Object* value,
+ PropertyDetails details) {
+ int entry = as_dict()->FindEntry(key);
+ if (entry == NumberDictionary::kNotFound) {
+ return AddNumberEntry(key, value, details);
+ }
+
+ // Preserve enumeration index.
+ details = PropertyDetails(details.attributes(),
+ details.type(),
+ as_dict()->DetailsAt(entry).index());
+ MaybeObject* maybe_object_key = NumberDictionaryShape<kSeeded>::AsObject(key);
+ Object* object_key;
+ if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key;
+ as_dict()->SetEntry(entry, object_key, value, details);
+ return as_dict();
}
@@ -12109,24 +12174,17 @@ Handle<NumberDictionary> NumberDictionary::Set(
}
-MaybeObject* NumberDictionary::Set(uint32_t key,
- Object* value,
- PropertyDetails details) {
- int entry = FindEntry(key);
- if (entry == kNotFound) return AddNumberEntry(key, value, details);
- // Preserve enumeration index.
- details = PropertyDetails(details.attributes(),
- details.type(),
- DetailsAt(entry).index());
- MaybeObject* maybe_object_key = NumberDictionaryShape::AsObject(key);
- Object* object_key;
- if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key;
- SetEntry(entry, object_key, value, details);
- return this;
+Handle<NotSeededNumberDictionary> NotSeededNumberDictionary::Set(
+ Handle<NotSeededNumberDictionary> dictionary,
+ uint32_t index,
+ Handle<Object> value,
+ PropertyDetails details) {
+ CALL_HEAP_FUNCTION(dictionary->GetIsolate(),
+ dictionary->Set(index, *value, details),
+ NotSeededNumberDictionary);
}
-
template<typename Shape, typename Key>
int Dictionary<Shape, Key>::NumberOfElementsFilterAttributes(
PropertyAttributes filter) {
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698