Author: [email protected]
Date: Mon Jul  6 04:00:53 2009
New Revision: 2363

Modified:
    branches/bleeding_edge/src/objects.cc
    branches/bleeding_edge/src/objects.h

Log:
Use attributes to communicate failed lookup instead of retval.

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

Modified: branches/bleeding_edge/src/objects.cc
==============================================================================
--- branches/bleeding_edge/src/objects.cc       (original)
+++ branches/bleeding_edge/src/objects.cc       Mon Jul  6 04:00:53 2009
@@ -5825,11 +5825,10 @@
  }


-bool JSObject::GetPropertyWithInterceptorProper(
+Object* JSObject::GetPropertyWithInterceptorProper(
      JSObject* receiver,
      String* name,
-    PropertyAttributes* attributes,
-    Object** result_object) {
+    PropertyAttributes* attributes) {
    HandleScope scope;
    Handle<InterceptorInfo> interceptor(GetNamedInterceptor());
    Handle<JSObject> receiver_handle(receiver);
@@ -5850,17 +5849,14 @@
        VMState state(EXTERNAL);
        result = getter(v8::Utils::ToLocal(name_handle), info);
      }
-    if (Top::has_scheduled_exception()) {
-      return false;
-    }
-    if (!result.IsEmpty()) {
+    if (!Top::has_scheduled_exception() && !result.IsEmpty()) {
        *attributes = NONE;
-      *result_object = *v8::Utils::OpenHandle(*result);
-      return true;
+      return *v8::Utils::OpenHandle(*result);
      }
    }

-  return false;
+  *attributes = ABSENT;
+  return Heap::undefined_value();
  }


@@ -5874,12 +5870,13 @@
    Handle<JSObject> holder_handle(this);
    Handle<String> name_handle(name);

-  Object* result = NULL;
-  if (GetPropertyWithInterceptorProper(receiver, name, attributes,  
&result)) {
+  Object* result = GetPropertyWithInterceptorProper(receiver,
+                                                    name,
+                                                    attributes);
+  if (*attributes != ABSENT) {
      return result;
-  } else {
-    RETURN_IF_SCHEDULED_EXCEPTION();
    }
+  RETURN_IF_SCHEDULED_EXCEPTION();

    int property_index = lookup_hint->value();
    if (property_index >= 0) {
@@ -5924,12 +5921,11 @@
    Handle<JSObject> holder_handle(this);
    Handle<String> name_handle(name);

-  Object* result = NULL;
-  if (GetPropertyWithInterceptorProper(receiver, name, attributes,  
&result)) {
+  Object* result = GetPropertyWithInterceptorProper(receiver, name,  
attributes);
+  if (*attributes != ABSENT) {
      return result;
-  } else {
-    RETURN_IF_SCHEDULED_EXCEPTION();
    }
+  RETURN_IF_SCHEDULED_EXCEPTION();

    result = holder_handle->GetPropertyPostInterceptor(
        *receiver_handle,

Modified: branches/bleeding_edge/src/objects.h
==============================================================================
--- branches/bleeding_edge/src/objects.h        (original)
+++ branches/bleeding_edge/src/objects.h        Mon Jul  6 04:00:53 2009
@@ -1593,13 +1593,11 @@

    void LookupInDescriptor(String* name, LookupResult* result);

-  // Attempts to get property with a named interceptor getter.  Returns
-  // |true| and stores result into |result| if succesful, otherwise
-  // returns |false|
-  bool GetPropertyWithInterceptorProper(JSObject* receiver,
-                                        String* name,
-                                        PropertyAttributes* attributes,
-                                        Object** result);
+  // Attempts to get property with a named interceptor getter.
+  // Sets |attributes| to ABSENT if interceptor didn't return anything
+  Object* GetPropertyWithInterceptorProper(JSObject* receiver,
+                                           String* name,
+                                           PropertyAttributes* attributes);

    DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject);
  };

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

Reply via email to