Get rid of last non-JSReceiver::Lookup usage of LookupOwn
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 20 Aug 2014 16:25:40 +0000 (16:25 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 20 Aug 2014 16:25:40 +0000 (16:25 +0000)
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
src/objects.h
src/runtime.cc

index 5fbc10b..08dc54c 100644 (file)
@@ -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,
index 927782d..ae118b4 100644 (file)
@@ -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> name, LookupResult* result);
   void Lookup(Handle<Name> name, LookupResult* result);
 
   enum KeyCollectionType { OWN_ONLY, INCLUDE_PROTOS };
@@ -2011,6 +2010,7 @@ class JSReceiver: public HeapObject {
       KeyCollectionType type);
 
  private:
+  void LookupOwn(Handle<Name> name, LookupResult* result);
   DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver);
 };
 
index 4aeef9d..79c9d49 100644 (file)
@@ -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 {