Author: [email protected]
Date: Tue Jun 16 03:06:24 2009
New Revision: 2184

Modified:
    branches/bleeding_edge/src/ic.cc

Log:

Review URL: http://codereview.chromium.org/126158

Modified: branches/bleeding_edge/src/ic.cc
==============================================================================
--- branches/bleeding_edge/src/ic.cc    (original)
+++ branches/bleeding_edge/src/ic.cc    Tue Jun 16 03:06:24 2009
@@ -863,6 +863,25 @@
  }


+static bool LookupForStoreIC(JSObject* object,
+                             String* name,
+                             LookupResult* lookup) {
+  object->LocalLookup(name, lookup);
+  if (!StoreICableLookup(lookup)) {
+    return false;
+  }
+
+  if (lookup->type() == INTERCEPTOR) {
+    if (object->GetNamedInterceptor()->setter()->IsUndefined()) {
+      object->LocalLookupRealNamedProperty(name, lookup);
+      return StoreICableLookup(lookup);
+    }
+  }
+
+  return true;
+}
+
+
  Object* StoreIC::Store(State state,
                         Handle<Object> object,
                         Handle<String> name,
@@ -889,8 +908,7 @@
    // Lookup the property locally in the receiver.
    if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
      LookupResult lookup;
-    receiver->LocalLookup(*name, &lookup);
-    if (StoreICableLookup(&lookup)) {
+    if (LookupForStoreIC(*receiver, *name, &lookup)) {
        UpdateCaches(&lookup, state, receiver, name, value);
      }
    }

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to