Revision: 22594
Author:   [email protected]
Date:     Thu Jul 24 11:33:46 2014 UTC
Log: Introduce NonJSProxyHolder returning Handle<JSObject> and return Handle<JSReceiver> for GetHolder

BUG=
[email protected]

Review URL: https://codereview.chromium.org/415953005
http://code.google.com/p/v8/source/detail?r=22594

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

=======================================
--- /branches/bleeding_edge/src/lookup.cc       Fri Jul 18 13:47:25 2014 UTC
+++ /branches/bleeding_edge/src/lookup.cc       Thu Jul 24 11:33:46 2014 UTC
@@ -100,7 +100,7 @@
 bool LookupIterator::HasAccess(v8::AccessType access_type) const {
   ASSERT_EQ(ACCESS_CHECK, state_);
   ASSERT(is_guaranteed_to_have_holder());
-  return isolate_->MayNamedAccess(GetHolder(), name_, access_type);
+ return isolate_->MayNamedAccess(GetHolder<JSObject>(), name_, access_type);
 }


@@ -109,11 +109,11 @@
   ASSERT(is_guaranteed_to_have_holder());

   if (property_encoding_ == DICTIONARY) {
-    Handle<JSObject> holder = GetHolder();
+    Handle<JSObject> holder = GetHolder<JSObject>();
     number_ = holder->property_dictionary()->FindEntry(name_);
     if (number_ == NameDictionary::kNotFound) return false;

- property_details_ = GetHolder()->property_dictionary()->DetailsAt(number_);
+    property_details_ = holder->property_dictionary()->DetailsAt(number_);
     // Holes in dictionary cells are absent values.
     if (holder->IsGlobalObject() &&
         (property_details_.IsDeleted() || FetchValue()->IsTheHole())) {
@@ -149,7 +149,7 @@
   ASSERT(HolderIsReceiver());
   if (property_encoding_ == DICTIONARY) return;
   holder_map_ = Map::PrepareForDataProperty(holder_map_, number_, value);
-  JSObject::MigrateToMap(GetHolder(), holder_map_);
+  JSObject::MigrateToMap(GetHolder<JSObject>(), holder_map_);
   // Reload property information.
   if (holder_map_->is_dictionary_map()) {
     property_encoding_ = DICTIONARY;
@@ -218,10 +218,11 @@

 Handle<Object> LookupIterator::FetchValue() const {
   Object* result = NULL;
+  Handle<JSObject> holder = GetHolder<JSObject>();
   switch (property_encoding_) {
     case DICTIONARY:
-      result = GetHolder()->property_dictionary()->ValueAt(number_);
-      if (GetHolder()->IsGlobalObject()) {
+      result = holder->property_dictionary()->ValueAt(number_);
+      if (holder->IsGlobalObject()) {
         result = PropertyCell::cast(result)->value();
       }
       break;
@@ -230,7 +231,7 @@
         FieldIndex field_index = FieldIndex::ForDescriptor(
             *holder_map_, number_);
         return JSObject::FastPropertyAt(
-            GetHolder(), property_details_.representation(), field_index);
+            holder, property_details_.representation(), field_index);
       }
       result = holder_map_->instance_descriptors()->GetValue(number_);
   }
@@ -256,8 +257,8 @@
 void LookupIterator::WriteDataValue(Handle<Object> value) {
   ASSERT(is_guaranteed_to_have_holder());
   ASSERT(has_property_);
+  Handle<JSObject> holder = GetHolder<JSObject>();
   if (property_encoding_ == DICTIONARY) {
-    Handle<JSObject> holder = GetHolder();
     NameDictionary* property_dictionary = holder->property_dictionary();
     if (holder->IsGlobalObject()) {
       Handle<PropertyCell> cell(
@@ -267,7 +268,7 @@
       property_dictionary->ValueAtPut(number_, *value);
     }
   } else if (property_details_.type() == v8::internal::FIELD) {
-    GetHolder()->WriteToField(number_, *value);
+    holder->WriteToField(number_, *value);
   } else {
     ASSERT_EQ(v8::internal::CONSTANT, property_details_.type());
   }
=======================================
--- /branches/bleeding_edge/src/lookup.h        Fri Jul 18 13:47:25 2014 UTC
+++ /branches/bleeding_edge/src/lookup.h        Thu Jul 24 11:33:46 2014 UTC
@@ -93,9 +93,10 @@
     return Handle<Object>::cast(maybe_receiver_.ToHandleChecked());
   }
   Handle<Map> holder_map() const { return holder_map_; }
-  Handle<JSObject> GetHolder() const {
-    ASSERT(IsFound() && state_ != JSPROXY);
-    return Handle<JSObject>::cast(maybe_holder_.ToHandleChecked());
+  template <class T>
+  Handle<T> GetHolder() const {
+    ASSERT(IsFound());
+    return Handle<T>::cast(maybe_holder_.ToHandleChecked());
   }
   Handle<JSReceiver> GetRoot() const;
   bool HolderIsReceiver() const;
@@ -140,11 +141,6 @@
   void WriteDataValue(Handle<Object> value);

   void InternalizeName();
-
-  /* JSPROXY */
-  Handle<JSProxy> GetJSProxy() const {
-    return Handle<JSProxy>::cast(maybe_holder_.ToHandleChecked());
-  }

  private:
   Handle<Map> GetReceiverMap() const;
=======================================
--- /branches/bleeding_edge/src/objects.cc      Wed Jul 23 09:49:00 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc      Thu Jul 24 11:33:46 2014 UTC
@@ -135,11 +135,11 @@
       case LookupIterator::NOT_FOUND:
         UNREACHABLE();
       case LookupIterator::JSPROXY:
-        return JSProxy::GetPropertyWithHandler(
-            it->GetJSProxy(), it->GetReceiver(), it->name());
+        return JSProxy::GetPropertyWithHandler(it->GetHolder<JSProxy>(),
+ it->GetReceiver(), it->name());
       case LookupIterator::INTERCEPTOR: {
MaybeHandle<Object> maybe_result = JSObject::GetPropertyWithInterceptor(
-            it->GetHolder(), it->GetReceiver(), it->name());
+            it->GetHolder<JSObject>(), it->GetReceiver(), it->name());
         if (!maybe_result.is_null()) return maybe_result;
         if (it->isolate()->has_pending_exception()) return maybe_result;
         break;
@@ -151,9 +151,9 @@
         if (it->HasProperty()) {
           switch (it->property_kind()) {
             case LookupIterator::ACCESSOR:
-              return GetPropertyWithAccessor(
-                  it->GetReceiver(), it->name(),
-                  it->GetHolder(), it->GetAccessors());
+              return GetPropertyWithAccessor(it->GetReceiver(), it->name(),
+                                             it->GetHolder<JSObject>(),
+                                             it->GetAccessors());
             case LookupIterator::DATA:
               return it->GetDataValue();
           }
@@ -582,10 +582,11 @@

 MaybeHandle<Object> JSObject::GetPropertyWithFailedAccessCheck(
     LookupIterator* it) {
-  Handle<JSObject> checked = Handle<JSObject>::cast(it->GetHolder());
+  Handle<JSObject> checked = it->GetHolder<JSObject>();
   if (FindAllCanReadHolder(it)) {
-    return GetPropertyWithAccessor(
- it->GetReceiver(), it->name(), it->GetHolder(), it->GetAccessors());
+    return GetPropertyWithAccessor(it->GetReceiver(), it->name(),
+                                   it->GetHolder<JSObject>(),
+                                   it->GetAccessors());
   }
   it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_GET);
   RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(it->isolate(), Object);
@@ -595,7 +596,7 @@

 PropertyAttributes JSObject::GetPropertyAttributesWithFailedAccessCheck(
     LookupIterator* it) {
-  Handle<JSObject> checked = Handle<JSObject>::cast(it->GetHolder());
+  Handle<JSObject> checked = it->GetHolder<JSObject>();
   if (FindAllCanReadHolder(it)) return it->property_details().attributes();
   it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_HAS);
   // TODO(yangguo): Issue 3269, check for scheduled exception missing?
@@ -621,11 +622,11 @@

 MaybeHandle<Object> JSObject::SetPropertyWithFailedAccessCheck(
     LookupIterator* it, Handle<Object> value, StrictMode strict_mode) {
-  Handle<JSObject> checked = Handle<JSObject>::cast(it->GetHolder());
+  Handle<JSObject> checked = it->GetHolder<JSObject>();
   if (FindAllCanWriteHolder(it)) {
     return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value,
-                                   it->GetHolder(), it->GetAccessors(),
-                                   strict_mode);
+                                   it->GetHolder<JSObject>(),
+                                   it->GetAccessors(), strict_mode);
   }

   it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_SET);
@@ -2941,7 +2942,7 @@
   if (it->name()->IsSymbol()) return value;

   Handle<String> name_string = Handle<String>::cast(it->name());
-  Handle<JSObject> holder = it->GetHolder();
+  Handle<JSObject> holder = it->GetHolder<JSObject>();
   Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor());
   if (interceptor->setter()->IsUndefined()) return MaybeHandle<Object>();

@@ -2993,7 +2994,7 @@

       case LookupIterator::JSPROXY:
         if (it->HolderIsReceiver()) {
-          return JSProxy::SetPropertyWithHandler(it->GetJSProxy(),
+          return JSProxy::SetPropertyWithHandler(it->GetHolder<JSProxy>(),
it->GetReceiver(), it->name(),
                                                  value, strict_mode);
         } else {
@@ -3001,8 +3002,8 @@
           bool has_result = false;
           MaybeHandle<Object> maybe_result =
               JSProxy::SetPropertyViaPrototypesWithHandler(
-                  it->GetJSProxy(), it->GetReceiver(), it->name(), value,
-                  strict_mode, &has_result);
+                  it->GetHolder<JSProxy>(), it->GetReceiver(), it->name(),
+                  value, strict_mode, &has_result);
           if (has_result) return maybe_result;
           done = true;
         }
@@ -3017,7 +3018,7 @@
         } else {
           Maybe<PropertyAttributes> maybe_attributes =
               JSObject::GetPropertyAttributesWithInterceptor(
-                  it->GetHolder(), it->GetReceiver(), it->name());
+ it->GetHolder<JSObject>(), it->GetReceiver(), it->name());
           RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(it->isolate(), Object);
           done = maybe_attributes.has_value;
           if (done && (maybe_attributes.value & READ_ONLY) != 0) {
@@ -3036,7 +3037,7 @@
             if (it->HolderIsReceiver() ||
                 !it->GetAccessors()->IsDeclaredAccessorInfo()) {
               return SetPropertyWithAccessor(it->GetReceiver(), it->name(),
-                                             value, it->GetHolder(),
+ value, it->GetHolder<JSObject>(), it->GetAccessors(), strict_mode);
             }
             break;
@@ -4333,11 +4334,11 @@
         UNREACHABLE();
       case LookupIterator::JSPROXY:
         return JSProxy::GetPropertyAttributesWithHandler(
-            it->GetJSProxy(), it->GetReceiver(), it->name());
+            it->GetHolder<JSProxy>(), it->GetReceiver(), it->name());
       case LookupIterator::INTERCEPTOR: {
         Maybe<PropertyAttributes> result =
             JSObject::GetPropertyAttributesWithInterceptor(
-                it->GetHolder(), it->GetReceiver(), it->name());
+                it->GetHolder<JSObject>(), it->GetReceiver(), it->name());
         if (result.has_value) return result.value;
         break;
       }

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to