Index: src/value-serializer.cc |
diff --git a/src/value-serializer.cc b/src/value-serializer.cc |
index 41cd5db227d59cea1e7915eb081ae5e27e3f175d..b0ecc6ddd5f1d10916fd4225ddf1873e68aeb210 100644 |
--- a/src/value-serializer.cc |
+++ b/src/value-serializer.cc |
@@ -784,9 +784,8 @@ ValueDeserializer::ValueDeserializer(Isolate* isolate, |
position_(data.start()), |
end_(data.start() + data.length()), |
pretenure_(data.length() > kPretenureThreshold ? TENURED : NOT_TENURED), |
- id_map_(Handle<SeededNumberDictionary>::cast( |
- isolate->global_handles()->Create( |
- *SeededNumberDictionary::New(isolate, 0)))) {} |
+ id_map_(Handle<FixedArray>::cast(isolate->global_handles()->Create( |
+ isolate_->heap()->empty_fixed_array()))) {} |
ValueDeserializer::~ValueDeserializer() { |
GlobalHandles::Destroy(Handle<Object>::cast(id_map_).location()); |
@@ -1575,15 +1574,16 @@ Maybe<uint32_t> ValueDeserializer::ReadJSObjectProperties( |
} |
bool ValueDeserializer::HasObjectWithID(uint32_t id) { |
- return id_map_->Has(isolate_, id); |
+ return id < static_cast<unsigned>(id_map_->length()) && |
+ !id_map_->get(id)->IsTheHole(isolate_); |
} |
MaybeHandle<JSReceiver> ValueDeserializer::GetObjectWithID(uint32_t id) { |
- int index = id_map_->FindEntry(isolate_, id); |
- if (index == SeededNumberDictionary::kNotFound) { |
+ if (id >= static_cast<unsigned>(id_map_->length())) { |
return MaybeHandle<JSReceiver>(); |
} |
- Object* value = id_map_->ValueAt(index); |
+ Object* value = id_map_->get(id); |
+ if (value->IsTheHole(isolate_)) return MaybeHandle<JSReceiver>(); |
DCHECK(value->IsJSReceiver()); |
return Handle<JSReceiver>(JSReceiver::cast(value), isolate_); |
} |
@@ -1591,16 +1591,13 @@ MaybeHandle<JSReceiver> ValueDeserializer::GetObjectWithID(uint32_t id) { |
void ValueDeserializer::AddObjectWithID(uint32_t id, |
Handle<JSReceiver> object) { |
DCHECK(!HasObjectWithID(id)); |
- const bool used_as_prototype = false; |
- Handle<SeededNumberDictionary> new_dictionary = |
- SeededNumberDictionary::AtNumberPut(id_map_, id, object, |
- used_as_prototype); |
+ Handle<FixedArray> new_array = FixedArray::SetAndGrow(id_map_, id, object); |
// If the dictionary was reallocated, update the global handle. |
- if (!new_dictionary.is_identical_to(id_map_)) { |
+ if (!new_array.is_identical_to(id_map_)) { |
GlobalHandles::Destroy(Handle<Object>::cast(id_map_).location()); |
- id_map_ = Handle<SeededNumberDictionary>::cast( |
- isolate_->global_handles()->Create(*new_dictionary)); |
+ id_map_ = Handle<FixedArray>::cast( |
+ isolate_->global_handles()->Create(*new_array)); |
} |
} |