Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 9a5353fe630eaba44fecc4d3ce558c1babd343d5..d94aa598069e6eeb027ff958ce970a34b44ae3a4 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -3194,14 +3194,21 @@ MaybeHandle<Object> Object::SetPropertyInternal(LookupIterator* it, |
} |
break; |
- case LookupIterator::ACCESSOR: |
+ case LookupIterator::ACCESSOR: { |
if (it->property_details().IsReadOnly()) { |
return WriteToReadOnlyProperty(it, value, language_mode); |
} |
+ Handle<Object> accessors = it->GetAccessors(); |
+ if (accessors->IsAccessorInfo() && |
+ !it->HolderIsReceiverOrHiddenPrototype() && |
+ AccessorInfo::cast(*accessors)->is_special_data_property()) { |
+ done = true; |
+ break; |
+ } |
return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value, |
- it->GetHolder<JSObject>(), |
- it->GetAccessors(), language_mode); |
- |
+ it->GetHolder<JSObject>(), accessors, |
+ language_mode); |
+ } |
case LookupIterator::INTEGER_INDEXED_EXOTIC: |
done = true; |
break; |