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()); |
Jakob Kummerow
2015/06/11 14:35:24
Can this be a DCHECK?
Toon Verwaest
2015/06/11 14:46:26
No, in that case it wouldn't run in release mode.
|
+ 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; |