| Index: src/builtins/builtins-object.cc
|
| diff --git a/src/builtins/builtins-object.cc b/src/builtins/builtins-object.cc
|
| index f7e5f3eee6a3a18d108f0787694fa44d83d42c60..5a6b877ec379f6d59db02e7df6e0d7883a827848 100644
|
| --- a/src/builtins/builtins-object.cc
|
| +++ b/src/builtins/builtins-object.cc
|
| @@ -645,13 +645,33 @@ Object* ObjectLookupAccessor(Isolate* isolate, Handle<Object> object,
|
| RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate);
|
| return isolate->heap()->undefined_value();
|
|
|
| - case LookupIterator::JSPROXY:
|
| - return isolate->heap()->undefined_value();
|
| + case LookupIterator::JSPROXY: {
|
| + PropertyDescriptor desc;
|
| + Maybe<bool> found = JSProxy::GetOwnPropertyDescriptor(
|
| + isolate, it.GetHolder<JSProxy>(), it.GetName(), &desc);
|
| + MAYBE_RETURN(found, isolate->heap()->exception());
|
| + if (found.FromJust()) {
|
| + if (component == ACCESSOR_GETTER && desc.has_get()) {
|
| + return *desc.get();
|
| + }
|
| + if (component == ACCESSOR_SETTER && desc.has_set()) {
|
| + return *desc.set();
|
| + }
|
| + return isolate->heap()->undefined_value();
|
| + }
|
| + Handle<Object> prototype;
|
| + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
|
| + isolate, prototype, JSProxy::GetPrototype(it.GetHolder<JSProxy>()));
|
| + if (prototype->IsNull(isolate)) {
|
| + return isolate->heap()->undefined_value();
|
| + }
|
| + return ObjectLookupAccessor(isolate, prototype, key, component);
|
| + }
|
|
|
| case LookupIterator::INTEGER_INDEXED_EXOTIC:
|
| - return isolate->heap()->undefined_value();
|
| case LookupIterator::DATA:
|
| - continue;
|
| + return isolate->heap()->undefined_value();
|
| +
|
| case LookupIterator::ACCESSOR: {
|
| Handle<Object> maybe_pair = it.GetAccessors();
|
| if (maybe_pair->IsAccessorPair()) {
|
|
|