Reviewers: Jakob,
Message:
PTAL
Description:
Use LookupIterator in GetOldValue
BUG=v8:4137
LOG=n
Please review this at https://codereview.chromium.org/1178123003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+11, -35 lines):
M src/objects.h
M src/objects.cc
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
52c965eace4a46050511cb5c40f4258af7bf3364..65b6f6297ed59b70d2a72d2ae137eaee79ee8168
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -11841,25 +11841,22 @@ void JSArray::Expand(Handle<JSArray> array, int
required_size) {
}
-// Returns false if the passed-in index is marked non-configurable,
-// which will cause the ES5 truncation operation to halt, and thus
-// no further old values need be collected.
+// Returns false if the passed-in index is marked non-configurable, which
will
+// cause the truncation operation to halt, and thus no further old values
need
+// be collected.
static bool GetOldValue(Isolate* isolate,
Handle<JSObject> object,
uint32_t index,
List<Handle<Object> >* old_values,
List<uint32_t>* indices) {
- Maybe<PropertyAttributes> maybe =
- JSReceiver::GetOwnElementAttributes(object, index);
- DCHECK(maybe.IsJust());
- DCHECK(maybe.FromJust() != ABSENT);
- if (maybe.FromJust() == DONT_DELETE) return false;
- Handle<Object> value;
- if (!JSObject::GetOwnElementAccessorPair(object, index).is_null()) {
- value = Handle<Object>::cast(isolate->factory()->the_hole_value());
- } else {
- value = Object::GetElement(isolate, object, index).ToHandleChecked();
- }
+ LookupIterator it(isolate, object, index, LookupIterator::HIDDEN);
+ CHECK(JSReceiver::GetPropertyAttributes(&it).IsJust());
+ DCHECK(it.IsFound());
+ if (!it.IsConfigurable()) return false;
+ Handle<Object> value =
+ it.state() == LookupIterator::ACCESSOR
+ ? Handle<Object>::cast(isolate->factory()->the_hole_value())
+ : JSReceiver::GetDataProperty(&it);
old_values->Add(value);
indices->Add(index);
return true;
@@ -12362,24 +12359,6 @@ void
JSObject::EnsureCanContainElements(Handle<JSObject> object,
}
-MaybeHandle<AccessorPair> JSObject::GetOwnElementAccessorPair(
- Handle<JSObject> object,
- uint32_t index) {
- if (object->IsJSGlobalProxy()) {
- PrototypeIterator iter(object->GetIsolate(), object);
- if (iter.IsAtEnd()) return MaybeHandle<AccessorPair>();
- DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
- return GetOwnElementAccessorPair(
- Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)),
index);
- }
-
- // Check for lookup interceptor.
- if (object->HasIndexedInterceptor()) return MaybeHandle<AccessorPair>();
-
- return object->GetElementsAccessor()->GetAccessorPair(object, index);
-}
-
-
bool JSObject::HasFastArgumentsElements() {
Heap* heap = GetHeap();
if (!elements()->IsFixedArray()) return false;
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
5b14f9778aa8206807179b9ba2b982d48b8b8711..7ff116fad34a603d6081804a90eb46502c729158
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -2019,9 +2019,6 @@ class JSObject: public JSReceiver {
}
// These methods do not perform access checks!
- MUST_USE_RESULT static MaybeHandle<AccessorPair>
GetOwnElementAccessorPair(
- Handle<JSObject> object, uint32_t index);
-
static void UpdateAllocationSite(Handle<JSObject> object,
ElementsKind to_kind);
--
--
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.