*NumberDictionary::Set() handlified.
R=yangguo@chromium.org Review URL: https://codereview.chromium.org/249973002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20927 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
ec613e229d
commit
7c1a0e81ef
@ -6643,6 +6643,10 @@ MaybeObject* NumberDictionaryShape::AsObject(Heap* heap, uint32_t key) {
|
||||
return heap->NumberFromUint32(key);
|
||||
}
|
||||
|
||||
Handle<Object> NumberDictionaryShape::AsHandle(Isolate* isolate, uint32_t key) {
|
||||
return isolate->factory()->NewNumberFromUint(key);
|
||||
}
|
||||
|
||||
|
||||
bool NameDictionaryShape::IsMatch(Name* key, Object* other) {
|
||||
// We know that all entries in a hash table had their hash keys created.
|
||||
|
@ -16063,6 +16063,16 @@ MaybeObject* UnseededNumberDictionary::AddNumberEntry(uint32_t key,
|
||||
}
|
||||
|
||||
|
||||
Handle<UnseededNumberDictionary> UnseededNumberDictionary::AddNumberEntry(
|
||||
Handle<UnseededNumberDictionary> dictionary,
|
||||
uint32_t key,
|
||||
Handle<Object> value) {
|
||||
CALL_HEAP_FUNCTION(dictionary->GetIsolate(),
|
||||
dictionary->AddNumberEntry(key, *value),
|
||||
UnseededNumberDictionary);
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* SeededNumberDictionary::AtNumberPut(uint32_t key, Object* value) {
|
||||
UpdateMaxNumberKey(key);
|
||||
return AtPut(key, value);
|
||||
@ -16077,53 +16087,34 @@ MaybeObject* UnseededNumberDictionary::AtNumberPut(uint32_t key,
|
||||
|
||||
Handle<SeededNumberDictionary> SeededNumberDictionary::Set(
|
||||
Handle<SeededNumberDictionary> dictionary,
|
||||
uint32_t index,
|
||||
uint32_t key,
|
||||
Handle<Object> value,
|
||||
PropertyDetails details) {
|
||||
CALL_HEAP_FUNCTION(dictionary->GetIsolate(),
|
||||
dictionary->Set(index, *value, details),
|
||||
SeededNumberDictionary);
|
||||
int entry = dictionary->FindEntry(key);
|
||||
if (entry == kNotFound) {
|
||||
return AddNumberEntry(dictionary, key, value, details);
|
||||
}
|
||||
// Preserve enumeration index.
|
||||
details = PropertyDetails(details.attributes(),
|
||||
details.type(),
|
||||
dictionary->DetailsAt(entry).dictionary_index());
|
||||
Handle<Object> object_key =
|
||||
SeededNumberDictionaryShape::AsHandle(dictionary->GetIsolate(), key);
|
||||
dictionary->SetEntry(entry, *object_key, *value, details);
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
|
||||
Handle<UnseededNumberDictionary> UnseededNumberDictionary::Set(
|
||||
Handle<UnseededNumberDictionary> dictionary,
|
||||
uint32_t index,
|
||||
uint32_t key,
|
||||
Handle<Object> value) {
|
||||
CALL_HEAP_FUNCTION(dictionary->GetIsolate(),
|
||||
dictionary->Set(index, *value),
|
||||
UnseededNumberDictionary);
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* SeededNumberDictionary::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).dictionary_index());
|
||||
MaybeObject* maybe_object_key =
|
||||
SeededNumberDictionaryShape::AsObject(GetHeap(), key);
|
||||
Object* object_key;
|
||||
if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key;
|
||||
SetEntry(entry, object_key, value, details);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* UnseededNumberDictionary::Set(uint32_t key,
|
||||
Object* value) {
|
||||
int entry = FindEntry(key);
|
||||
if (entry == kNotFound) return AddNumberEntry(key, value);
|
||||
MaybeObject* maybe_object_key =
|
||||
UnseededNumberDictionaryShape::AsObject(GetHeap(), key);
|
||||
Object* object_key;
|
||||
if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key;
|
||||
SetEntry(entry, object_key, value);
|
||||
return this;
|
||||
int entry = dictionary->FindEntry(key);
|
||||
if (entry == kNotFound) return AddNumberEntry(dictionary, key, value);
|
||||
Handle<Object> object_key =
|
||||
UnseededNumberDictionaryShape::AsHandle(dictionary->GetIsolate(), key);
|
||||
dictionary->SetEntry(entry, *object_key, *value);
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4152,8 +4152,10 @@ class NameDictionary: public Dictionary<NameDictionary,
|
||||
class NumberDictionaryShape : public BaseShape<uint32_t> {
|
||||
public:
|
||||
static inline bool IsMatch(uint32_t key, Object* other);
|
||||
// TODO(ishell): This should be eventually replaced with AsHandle().
|
||||
MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap,
|
||||
uint32_t key);
|
||||
static inline Handle<Object> AsHandle(Isolate* isolate, uint32_t key);
|
||||
static const int kEntrySize = 3;
|
||||
static const bool kIsEnumerable = false;
|
||||
};
|
||||
@ -4205,7 +4207,7 @@ class SeededNumberDictionary
|
||||
// Return the updated dictionary.
|
||||
MUST_USE_RESULT static Handle<SeededNumberDictionary> Set(
|
||||
Handle<SeededNumberDictionary> dictionary,
|
||||
uint32_t index,
|
||||
uint32_t key,
|
||||
Handle<Object> value,
|
||||
PropertyDetails details);
|
||||
|
||||
@ -4248,15 +4250,17 @@ class UnseededNumberDictionary
|
||||
// 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);
|
||||
MUST_USE_RESULT static Handle<UnseededNumberDictionary> AddNumberEntry(
|
||||
Handle<UnseededNumberDictionary> dictionary,
|
||||
uint32_t key,
|
||||
Handle<Object> value);
|
||||
|
||||
// Set an existing entry or add a new one if needed.
|
||||
// Return the updated dictionary.
|
||||
MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set(
|
||||
Handle<UnseededNumberDictionary> dictionary,
|
||||
uint32_t index,
|
||||
uint32_t key,
|
||||
Handle<Object> value);
|
||||
|
||||
MUST_USE_RESULT MaybeObject* Set(uint32_t key, Object* value);
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user