Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 0fbefd066554f8ef8730919de84259fdf16d70a0..8254ee7e9efcab696058f80d976d832c5bb27f9e 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -17626,11 +17626,23 @@ |
Isolate* isolate = cache->GetIsolate(); |
Handle<SharedFunctionInfo> shared(context->closure()->shared()); |
StringSharedKey key(src, shared, language_mode, RelocInfo::kNoPosition); |
- Handle<Object> k = key.AsHandle(isolate); |
+ { |
+ Handle<Object> k = key.AsHandle(isolate); |
+ DisallowHeapAllocation no_allocation_scope; |
+ int entry = cache->FindEntry(&key); |
+ if (entry != kNotFound) { |
+ cache->set(EntryToIndex(entry), *k); |
+ cache->set(EntryToIndex(entry) + 1, *value); |
+ return cache; |
+ } |
+ } |
+ |
cache = EnsureCapacity(cache, 1, &key); |
int entry = cache->FindInsertionEntry(key.Hash()); |
+ Handle<Object> k = |
+ isolate->factory()->NewNumber(static_cast<double>(key.Hash())); |
cache->set(EntryToIndex(entry), *k); |
- cache->set(EntryToIndex(entry) + 1, *value); |
+ cache->set(EntryToIndex(entry) + 1, Smi::FromInt(kHashGenerations)); |
cache->ElementAdded(); |
return cache; |
} |