| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 3f028c62824a35653bdc4ef03b265f6eedd4413e..8bc0a63da210d1894156de0fab05a64cbb7ec391 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -723,6 +723,9 @@ MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate,
|
| Handle<Name> name,
|
| Handle<Object> receiver,
|
| LanguageMode language_mode) {
|
| + // Do not delegate to trap for internal slots
|
| + if (name->IsPrivate()) return isolate->factory()->undefined_value();
|
| +
|
| Handle<Name> trap_name = isolate->factory()->get_string();
|
| // 1. Assert: IsPropertyKey(P) is true.
|
| // 2. Let handler be the value of the [[ProxyHandler]] internal slot of O.
|
| @@ -733,6 +736,7 @@ MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate,
|
| NewTypeError(MessageTemplate::kProxyRevoked, trap_name),
|
| Object);
|
| }
|
| +
|
| // 4. Assert: Type(handler) is Object.
|
| DCHECK(handler->IsJSReceiver());
|
| DCHECK(proxy->target()->IsJSReceiver());
|
| @@ -4574,6 +4578,9 @@ Handle<Map> JSObject::GetElementsTransitionMap(Handle<JSObject> object,
|
|
|
| Maybe<bool> JSProxy::HasProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| Handle<Name> name) {
|
| + // Do not delegate to trap for internal slots
|
| + if (name->IsPrivate()) return Just(false);
|
| +
|
| // 1. (Assert)
|
| // 2. Let handler be the value of the [[ProxyHandler]] internal slot of O.
|
| Handle<Object> handler(proxy->handler(), isolate);
|
| @@ -4583,6 +4590,7 @@ Maybe<bool> JSProxy::HasProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| MessageTemplate::kProxyRevoked, isolate->factory()->has_string()));
|
| return Nothing<bool>();
|
| }
|
| +
|
| // 4. Assert: Type(handler) is Object.
|
| DCHECK(handler->IsJSReceiver());
|
| DCHECK(proxy->target()->IsJSReceiver());
|
| @@ -4641,6 +4649,9 @@ Maybe<bool> JSProxy::HasProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| Maybe<bool> JSProxy::SetProperty(Handle<JSProxy> proxy, Handle<Name> name,
|
| Handle<Object> value, Handle<Object> receiver,
|
| LanguageMode language_mode) {
|
| + // Do not delegate to trap for internal slots
|
| + if (name->IsPrivate()) return Just(false);
|
| +
|
| Isolate* isolate = proxy->GetIsolate();
|
| Factory* factory = isolate->factory();
|
| Handle<String> trap_name = factory->set_string();
|
| @@ -4703,6 +4714,9 @@ Maybe<bool> JSProxy::SetProperty(Handle<JSProxy> proxy, Handle<Name> name,
|
| Maybe<bool> JSProxy::DeletePropertyOrElement(Handle<JSProxy> proxy,
|
| Handle<Name> name,
|
| LanguageMode language_mode) {
|
| + // Do not delegate to trap for internal slots
|
| + if (name->IsPrivate()) return Just(true);
|
| +
|
| ShouldThrow should_throw =
|
| is_sloppy(language_mode) ? DONT_THROW : THROW_ON_ERROR;
|
| Isolate* isolate = proxy->GetIsolate();
|
| @@ -6806,6 +6820,9 @@ bool JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a,
|
| bool JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| Handle<Object> key, PropertyDescriptor* desc,
|
| ShouldThrow should_throw) {
|
| + // Do not delegate to trap for internal slots
|
| + if (key->IsSymbol() && Symbol::cast(*key)->is_private()) return false;
|
| +
|
| Handle<String> trap_name = isolate->factory()->defineProperty_string();
|
| // 1. Assert: IsPropertyKey(P) is true.
|
| DCHECK(key->IsName() || key->IsNumber());
|
| @@ -6817,6 +6834,7 @@ bool JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| MessageTemplate::kProxyRevoked, trap_name));
|
| return false;
|
| }
|
| +
|
| // 4. Assert: Type(handler) is Object.
|
| DCHECK(handler->IsJSReceiver());
|
| // If the handler is not null, the target can't be null either.
|
| @@ -6990,6 +7008,9 @@ bool JSReceiver::GetOwnPropertyDescriptor(LookupIterator* it,
|
| bool JSProxy::GetOwnPropertyDescriptor(Isolate* isolate, Handle<JSProxy> proxy,
|
| Handle<Name> name,
|
| PropertyDescriptor* desc) {
|
| + // Do not delegate to trap for internal slots
|
| + if (name->IsPrivate()) return false;
|
| +
|
| Handle<String> trap_name =
|
| isolate->factory()->getOwnPropertyDescriptor_string();
|
| // 1. (Assert)
|
|
|