| Index: src/accessors.cc
|
| diff --git a/src/accessors.cc b/src/accessors.cc
|
| index b88ebc3d7910cdd41038e5725f53bd04f67f087c..a1b685050e5be7eaee03bf37cd428fa5876cc7e8 100644
|
| --- a/src/accessors.cc
|
| +++ b/src/accessors.cc
|
| @@ -19,13 +19,9 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -
|
| Handle<AccessorInfo> Accessors::MakeAccessor(
|
| - Isolate* isolate,
|
| - Handle<Name> name,
|
| - AccessorNameGetterCallback getter,
|
| - AccessorNameSetterCallback setter,
|
| - PropertyAttributes attributes) {
|
| + Isolate* isolate, Handle<Name> name, AccessorNameGetterCallback getter,
|
| + AccessorNameBooleanSetterCallback setter, PropertyAttributes attributes) {
|
| Factory* factory = isolate->factory();
|
| Handle<AccessorInfo> info = factory->NewAccessorInfo();
|
| info->set_property_attributes(attributes);
|
| @@ -106,7 +102,7 @@ MUST_USE_RESULT MaybeHandle<Object> ReplaceAccessorWithDataProperty(
|
|
|
| void Accessors::ReconfigureToDataProperty(
|
| v8::Local<v8::Name> key, v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| + const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| Handle<Object> receiver = Utils::OpenHandle(*info.This());
|
| @@ -116,7 +112,11 @@ void Accessors::ReconfigureToDataProperty(
|
| Handle<Object> value = Utils::OpenHandle(*val);
|
| MaybeHandle<Object> result =
|
| ReplaceAccessorWithDataProperty(isolate, receiver, holder, name, value);
|
| - if (result.is_null()) isolate->OptionalRescheduleException(false);
|
| + if (result.is_null()) {
|
| + isolate->OptionalRescheduleException(false);
|
| + } else {
|
| + info.GetReturnValue().Set(true);
|
| + }
|
| }
|
|
|
| //
|
| @@ -158,11 +158,9 @@ void Accessors::ArrayLengthGetter(
|
| info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate)));
|
| }
|
|
|
| -
|
| void Accessors::ArrayLengthSetter(
|
| - v8::Local<v8::Name> name,
|
| - v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| + v8::Local<v8::Name> name, v8::Local<v8::Value> val,
|
| + const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
|
|
| @@ -178,17 +176,21 @@ void Accessors::ArrayLengthSetter(
|
|
|
| JSArray::SetLength(array, length);
|
|
|
| - if (info.ShouldThrowOnError()) {
|
| - uint32_t actual_new_len = 0;
|
| - CHECK(array->length()->ToArrayLength(&actual_new_len));
|
| - // Throw TypeError if there were non-deletable elements.
|
| - if (actual_new_len != length) {
|
| + uint32_t actual_new_len = 0;
|
| + CHECK(array->length()->ToArrayLength(&actual_new_len));
|
| + // Fail if there were non-deletable elements.
|
| + if (actual_new_len != length) {
|
| + if (info.ShouldThrowOnError()) {
|
| Factory* factory = isolate->factory();
|
| isolate->Throw(*factory->NewTypeError(
|
| MessageTemplate::kStrictDeleteProperty,
|
| factory->NewNumberFromUint(actual_new_len - 1), array));
|
| isolate->OptionalRescheduleException(false);
|
| + } else {
|
| + info.GetReturnValue().Set(false);
|
| }
|
| + } else {
|
| + info.GetReturnValue().Set(true);
|
| }
|
| }
|
|
|
| @@ -223,7 +225,7 @@ void Accessors::ModuleNamespaceEntryGetter(
|
|
|
| void Accessors::ModuleNamespaceEntrySetter(
|
| v8::Local<v8::Name> name, v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| + const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| Factory* factory = isolate->factory();
|
| @@ -236,7 +238,7 @@ void Accessors::ModuleNamespaceEntrySetter(
|
| i::Object::TypeOf(isolate, holder), holder));
|
| isolate->OptionalRescheduleException(false);
|
| } else {
|
| - info.GetReturnValue().Set(Utils::ToLocal(factory->ToBoolean(false)));
|
| + info.GetReturnValue().Set(false);
|
| }
|
| }
|
|
|
| @@ -742,11 +744,9 @@ void Accessors::FunctionPrototypeGetter(
|
| info.GetReturnValue().Set(Utils::ToLocal(result));
|
| }
|
|
|
| -
|
| void Accessors::FunctionPrototypeSetter(
|
| - v8::Local<v8::Name> name,
|
| - v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| + v8::Local<v8::Name> name, v8::Local<v8::Value> val,
|
| + const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| Handle<Object> value = Utils::OpenHandle(*val);
|
| @@ -754,6 +754,8 @@ void Accessors::FunctionPrototypeSetter(
|
| Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
|
| if (SetFunctionPrototype(isolate, object, value).is_null()) {
|
| isolate->OptionalRescheduleException(false);
|
| + } else {
|
| + info.GetReturnValue().Set(true);
|
| }
|
| }
|
|
|
| @@ -1251,9 +1253,9 @@ void Accessors::ErrorStackGetter(
|
| info.GetReturnValue().Set(value);
|
| }
|
|
|
| -void Accessors::ErrorStackSetter(v8::Local<v8::Name> name,
|
| - v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| +void Accessors::ErrorStackSetter(
|
| + v8::Local<v8::Name> name, v8::Local<v8::Value> val,
|
| + const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| Handle<JSObject> obj =
|
|
|