From b29040a3f65443b867f0cdf2ca585295e45d9fcd Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Wed, 20 Aug 2014 16:25:40 +0000 Subject: [PATCH] Get rid of last non-JSReceiver::Lookup usage of LookupOwn BUG= Review URL: https://codereview.chromium.org/489063002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23250 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/lookup.h | 1 + src/objects.h | 2 +- src/runtime.cc | 12 ++++++------ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lookup.h b/src/lookup.h index 5fbc10b..08dc54c 100644 --- a/src/lookup.h +++ b/src/lookup.h @@ -23,6 +23,7 @@ class LookupIterator V8_FINAL BASE_EMBEDDED { // Convience combinations of bits. CHECK_PROPERTY = 0, + CHECK_OWN = CHECK_ACCESS_CHECK | CHECK_INTERCEPTOR, CHECK_HIDDEN_SKIP_INTERCEPTOR = CHECK_HIDDEN_PROPERTY | CHECK_ACCESS_CHECK, CHECK_DERIVED_SKIP_INTERCEPTOR = CHECK_HIDDEN_SKIP_INTERCEPTOR | CHECK_DERIVED_PROPERTY, diff --git a/src/objects.h b/src/objects.h index 927782d..ae118b4 100644 --- a/src/objects.h +++ b/src/objects.h @@ -1999,7 +1999,6 @@ class JSReceiver: public HeapObject { // Lookup a property. If found, the result is valid and has // detailed information. - void LookupOwn(Handle name, LookupResult* result); void Lookup(Handle name, LookupResult* result); enum KeyCollectionType { OWN_ONLY, INCLUDE_PROTOS }; @@ -2011,6 +2010,7 @@ class JSReceiver: public HeapObject { KeyCollectionType type); private: + void LookupOwn(Handle name, LookupResult* result); DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); }; diff --git a/src/runtime.cc b/src/runtime.cc index 4aeef9d..79c9d49 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -4870,18 +4870,18 @@ RUNTIME_FUNCTION(Runtime_KeyedGetProperty) { } // Lookup cache miss. Perform lookup and update the cache if // appropriate. - LookupResult result(isolate); - receiver->LookupOwn(key, &result); - if (result.IsField()) { - FieldIndex field_index = result.GetFieldIndex(); + LookupIterator it(receiver, key, LookupIterator::CHECK_OWN); + if (it.IsFound() && it.state() == LookupIterator::PROPERTY && + it.HasProperty() && it.property_details().type() == FIELD) { + FieldIndex field_index = it.GetFieldIndex(); // Do not track double fields in the keyed lookup cache. Reading // double values requires boxing. - if (!result.representation().IsDouble()) { + if (!it.representation().IsDouble()) { keyed_lookup_cache->Update(receiver_map, key, field_index.GetKeyedLookupCacheIndex()); } AllowHeapAllocation allow_allocation; - return *JSObject::FastPropertyAt(receiver, result.representation(), + return *JSObject::FastPropertyAt(receiver, it.representation(), field_index); } } else { -- 2.7.4