| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 65964d753baefb57e3c33f56e23522dee9216bd8..2e715df61c31ecfa66e28c2ef0391b1d633ba97a 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -3672,13 +3672,6 @@ Maybe<bool> v8::Object::DefineOwnProperty(v8::Local<v8::Context> context,
|
| i::Handle<i::Name> key_obj = Utils::OpenHandle(*key);
|
| i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
|
|
|
| - if (self->IsAccessCheckNeeded() &&
|
| - !isolate->MayAccess(handle(isolate->context()),
|
| - i::Handle<i::JSObject>::cast(self))) {
|
| - isolate->ReportFailedAccessCheck(i::Handle<i::JSObject>::cast(self));
|
| - return Nothing<bool>();
|
| - }
|
| -
|
| i::PropertyDescriptor desc;
|
| desc.set_writable(!(attributes & v8::ReadOnly));
|
| desc.set_enumerable(!(attributes & v8::DontEnum));
|
| @@ -3691,6 +3684,50 @@ Maybe<bool> v8::Object::DefineOwnProperty(v8::Local<v8::Context> context,
|
| return success;
|
| }
|
|
|
| +Maybe<bool> v8::Object::DefineProperty(v8::Local<v8::Context> context,
|
| + v8::Local<Name> key,
|
| + const PropertyDescriptor& descriptor) {
|
| + PREPARE_FOR_EXECUTION_PRIMITIVE(context, Object, DefineProperty, bool);
|
| + auto self = Utils::OpenHandle(this);
|
| + auto key_obj = Utils::OpenHandle(*key);
|
| +
|
| + i::PropertyDescriptor desc;
|
| + if (descriptor.has_value()) {
|
| + if (descriptor.value().IsEmpty()) {
|
| + desc.set_value(isolate->factory()->undefined_value());
|
| + } else {
|
| + desc.set_value(Utils::OpenHandle(*descriptor.value()));
|
| + }
|
| + }
|
| + if (descriptor.has_get()) {
|
| + if (descriptor.get().IsEmpty()) {
|
| + desc.set_get(isolate->factory()->undefined_value());
|
| + } else {
|
| + desc.set_get(Utils::OpenHandle(*descriptor.get()));
|
| + }
|
| + }
|
| + if (descriptor.has_set()) {
|
| + if (descriptor.set().IsEmpty()) {
|
| + desc.set_set(isolate->factory()->undefined_value());
|
| + } else {
|
| + desc.set_set(Utils::OpenHandle(*descriptor.set()));
|
| + }
|
| + }
|
| + if (descriptor.has_enumerable()) {
|
| + desc.set_enumerable(descriptor.enumerable());
|
| + }
|
| + if (descriptor.has_configurable()) {
|
| + desc.set_configurable(descriptor.configurable());
|
| + }
|
| + if (descriptor.has_writable()) {
|
| + desc.set_writable(descriptor.writable());
|
| + }
|
| +
|
| + auto success = i::JSReceiver::DefineOwnProperty(isolate, self, key_obj, &desc,
|
| + i::Object::DONT_THROW);
|
| + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
|
| + return success;
|
| +}
|
|
|
| MUST_USE_RESULT
|
| static i::MaybeHandle<i::Object> DefineObjectProperty(
|
|
|