| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 8d4d545f3fe0119e388433ff0ce1886c9f26ebba..fa684c06d689ff586954880cb89265cd76c33c0d 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1194,16 +1194,20 @@ MaybeHandle<Object> Object::SetElement(Isolate* isolate, Handle<Object> object,
|
| }
|
|
|
|
|
| -Handle<Object> Object::GetPrototype(Isolate* isolate, Handle<Object> obj) {
|
| +MaybeHandle<Object> Object::GetPrototype(Isolate* isolate,
|
| + Handle<Object> receiver) {
|
| // We don't expect access checks to be needed on JSProxy objects.
|
| - DCHECK(!obj->IsAccessCheckNeeded() || obj->IsJSObject());
|
| + DCHECK(!receiver->IsAccessCheckNeeded() || receiver->IsJSObject());
|
| Handle<Context> context(isolate->context());
|
| - if (obj->IsAccessCheckNeeded() &&
|
| - !isolate->MayAccess(context, Handle<JSObject>::cast(obj))) {
|
| + if (receiver->IsAccessCheckNeeded() &&
|
| + !isolate->MayAccess(context, Handle<JSObject>::cast(receiver))) {
|
| return isolate->factory()->null_value();
|
| }
|
| -
|
| - PrototypeIterator iter(isolate, obj, PrototypeIterator::START_AT_RECEIVER);
|
| + if (receiver->IsJSProxy()) {
|
| + return JSProxy::GetPrototype(Handle<JSProxy>::cast(receiver));
|
| + }
|
| + PrototypeIterator iter(isolate, receiver,
|
| + PrototypeIterator::START_AT_RECEIVER);
|
| do {
|
| iter.AdvanceIgnoringProxies();
|
| if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) {
|
| @@ -6405,6 +6409,8 @@ int JSFunction::NumberOfLiterals() {
|
| ACCESSORS(JSProxy, target, Object, kTargetOffset)
|
| ACCESSORS(JSProxy, handler, Object, kHandlerOffset)
|
| ACCESSORS(JSProxy, hash, Object, kHashOffset)
|
| +bool JSProxy::has_handler() { return !handler()->IsNull(); }
|
| +
|
| ACCESSORS(JSFunctionProxy, call_trap, JSReceiver, kCallTrapOffset)
|
| ACCESSORS(JSFunctionProxy, construct_trap, Object, kConstructTrapOffset)
|
|
|
|
|