| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 98d61909b806d4d724517aea9226fe3efb5ebcc9..82516427a4fbc7620b6cb5b2207244fef976efda 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -10123,6 +10123,7 @@ void CodeCache::Update(
|
|
|
| void CodeCache::UpdateDefaultCache(
|
| Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code) {
|
| + Isolate* isolate = code_cache->GetIsolate();
|
| // When updating the default code cache we disregard the type encoded in the
|
| // flags. This allows call constant stubs to overwrite call field
|
| // stubs, etc.
|
| @@ -10135,19 +10136,23 @@ void CodeCache::UpdateDefaultCache(
|
| {
|
| DisallowHeapAllocation no_alloc;
|
| int deleted_index = -1;
|
| + Object* null = isolate->heap()->null_value();
|
| + Object* undefined = isolate->heap()->undefined_value();
|
| + DCHECK(name->IsUniqueName());
|
| for (int i = 0; i < length; i += kCodeCacheEntrySize) {
|
| Object* key = cache->get(i);
|
| - if (key->IsNull()) {
|
| + if (key == null) {
|
| if (deleted_index < 0) deleted_index = i;
|
| continue;
|
| }
|
| - if (key->IsUndefined()) {
|
| + if (key == undefined) {
|
| if (deleted_index >= 0) i = deleted_index;
|
| cache->set(i + kCodeCacheEntryNameOffset, *name);
|
| cache->set(i + kCodeCacheEntryCodeOffset, *code);
|
| return;
|
| }
|
| - if (name->Equals(Name::cast(key))) {
|
| + DCHECK(key->IsUniqueName());
|
| + if (*name == key) {
|
| Code::Flags found =
|
| Code::cast(cache->get(i + kCodeCacheEntryCodeOffset))->flags();
|
| if (Code::RemoveTypeFromFlags(found) == flags) {
|
| @@ -10168,7 +10173,6 @@ void CodeCache::UpdateDefaultCache(
|
|
|
| // Extend the code cache with some new entries (at least one). Must be a
|
| // multiple of the entry size.
|
| - Isolate* isolate = cache->GetIsolate();
|
| int new_length = length + (length >> 1) + kCodeCacheEntrySize;
|
| new_length = new_length - new_length % kCodeCacheEntrySize;
|
| DCHECK((new_length % kCodeCacheEntrySize) == 0);
|
| @@ -10203,13 +10207,18 @@ Object* CodeCache::Lookup(Name* name, Code::Flags flags) {
|
|
|
| Object* CodeCache::LookupDefaultCache(Name* name, Code::Flags flags) {
|
| FixedArray* cache = default_cache();
|
| + Heap* heap = GetHeap();
|
| + Object* null = heap->null_value();
|
| + Object* undefined = heap->undefined_value();
|
| int length = cache->length();
|
| + DCHECK(name->IsUniqueName());
|
| for (int i = 0; i < length; i += kCodeCacheEntrySize) {
|
| Object* key = cache->get(i + kCodeCacheEntryNameOffset);
|
| // Skip deleted elements.
|
| - if (key->IsNull()) continue;
|
| - if (key->IsUndefined()) return key;
|
| - if (name->Equals(Name::cast(key))) {
|
| + if (key == null) continue;
|
| + if (key == undefined) return key;
|
| + DCHECK(key->IsUniqueName());
|
| + if (name == key) {
|
| Code* code = Code::cast(cache->get(i + kCodeCacheEntryCodeOffset));
|
| if (Code::RemoveTypeFromFlags(code->flags()) == flags) {
|
| return code;
|
|
|