| Index: src/accessors.cc | 
| diff --git a/src/accessors.cc b/src/accessors.cc | 
| index 31139b79614aaecb47559a3928fd299071be3d26..bcc4f05c0937c4ad95bd06e4e6ff3b36ec7a5414 100644 | 
| --- a/src/accessors.cc | 
| +++ b/src/accessors.cc | 
| @@ -34,6 +34,7 @@ Handle<AccessorInfo> Accessors::MakeAccessor( | 
| info->set_is_special_data_property(true); | 
| info->set_name(*name); | 
| Handle<Object> get = v8::FromCData(isolate, getter); | 
| +  if (setter == nullptr) setter = &ReconfigureToDataProperty; | 
| Handle<Object> set = v8::FromCData(isolate, setter); | 
| info->set_getter(*get); | 
| info->set_setter(*set); | 
| @@ -125,6 +126,51 @@ bool Accessors::IsJSArrayBufferViewFieldAccessor(Handle<Map> map, | 
| } | 
| } | 
|  | 
| +MUST_USE_RESULT static MaybeHandle<Object> ReplaceAccessorWithDataProperty( | 
| +    Isolate* isolate, Handle<JSObject> receiver, Handle<JSObject> holder, | 
| +    Handle<Name> name, Handle<Object> value, bool observe) { | 
| +  LookupIterator it(receiver, name, holder, | 
| +                    LookupIterator::OWN_SKIP_INTERCEPTOR); | 
| +  // Skip any access checks we might hit. This accessor should never hit in a | 
| +  // situation where the caller does not have access. | 
| +  if (it.state() == LookupIterator::ACCESS_CHECK) { | 
| +    CHECK(it.HasAccess()); | 
| +    it.Next(); | 
| +  } | 
| +  CHECK_EQ(LookupIterator::ACCESSOR, it.state()); | 
| + | 
| +  Handle<Object> old_value; | 
| +  bool is_observed = observe && receiver->map()->is_observed(); | 
| +  if (is_observed) { | 
| +    MaybeHandle<Object> maybe_old = | 
| +        Object::GetPropertyWithAccessor(&it, SLOPPY); | 
| +    if (!maybe_old.ToHandle(&old_value)) return maybe_old; | 
| +  } | 
| + | 
| +  it.ReconfigureDataProperty(value, it.property_attributes()); | 
| + | 
| +  if (is_observed && !old_value->SameValue(*value)) { | 
| +    return JSObject::EnqueueChangeRecord(receiver, "update", name, old_value); | 
| +  } | 
| + | 
| +  return value; | 
| +} | 
| + | 
| +void Accessors::ReconfigureToDataProperty( | 
| +    v8::Local<v8::Name> key, v8::Local<v8::Value> val, | 
| +    const v8::PropertyCallbackInfo<void>& info) { | 
| +  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); | 
| +  HandleScope scope(isolate); | 
| +  Handle<JSObject> receiver = | 
| +      Handle<JSObject>::cast(Utils::OpenHandle(*info.This())); | 
| +  Handle<JSObject> holder = | 
| +      Handle<JSObject>::cast(Utils::OpenHandle(*info.Holder())); | 
| +  Handle<Name> name = Utils::OpenHandle(*key); | 
| +  Handle<Object> value = Utils::OpenHandle(*val); | 
| +  MaybeHandle<Object> result = ReplaceAccessorWithDataProperty( | 
| +      isolate, receiver, holder, name, value, false); | 
| +  if (result.is_null()) isolate->OptionalRescheduleException(false); | 
| +} | 
|  | 
| // | 
| // Accessors::ArgumentsIterator | 
| @@ -141,29 +187,11 @@ void Accessors::ArgumentsIteratorGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ArgumentsIteratorSetter( | 
| -    v8::Local<v8::Name> name, v8::Local<v8::Value> val, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); | 
| -  HandleScope scope(isolate); | 
| -  Handle<JSObject> object_handle = | 
| -      Handle<JSObject>::cast(Utils::OpenHandle(*info.This())); | 
| -  Handle<Object> value_handle = Utils::OpenHandle(*val); | 
| -  Handle<Name> name_handle = Utils::OpenHandle(*name); | 
| - | 
| -  if (JSObject::DefinePropertyOrElementIgnoreAttributes( | 
| -          object_handle, name_handle, value_handle, NONE) | 
| -          .is_null()) { | 
| -    isolate->OptionalRescheduleException(false); | 
| -  } | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ArgumentsIteratorInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<Name> name = isolate->factory()->iterator_symbol(); | 
| -  return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, | 
| -                      &ArgumentsIteratorSetter, attributes); | 
| +  return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, nullptr, | 
| +                      attributes); | 
| } | 
|  | 
|  | 
| @@ -257,21 +285,10 @@ void Accessors::StringLengthGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::StringLengthSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::StringLengthInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->length_string(), | 
| -                      &StringLengthGetter, | 
| -                      &StringLengthSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->length_string(), | 
| +                      &StringLengthGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -293,22 +310,11 @@ void Accessors::ScriptColumnOffsetGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptColumnOffsetSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("column_offset"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptColumnOffsetGetter, | 
| -                      &ScriptColumnOffsetSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -330,23 +336,11 @@ void Accessors::ScriptIdGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptIdSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptIdInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name( | 
| isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptIdGetter, | 
| -                      &ScriptIdSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -367,21 +361,10 @@ void Accessors::ScriptNameGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptNameSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptNameInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->name_string(), | 
| -                      &ScriptNameGetter, | 
| -                      &ScriptNameSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->name_string(), | 
| +                      &ScriptNameGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -402,21 +385,10 @@ void Accessors::ScriptSourceGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptSourceSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptSourceInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->source_string(), | 
| -                      &ScriptSourceGetter, | 
| -                      &ScriptSourceSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->source_string(), | 
| +                      &ScriptSourceGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -438,22 +410,11 @@ void Accessors::ScriptLineOffsetGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptLineOffsetSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("line_offset"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptLineOffsetGetter, | 
| -                      &ScriptLineOffsetSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -476,23 +437,11 @@ void Accessors::ScriptTypeGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptTypeSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptTypeInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name( | 
| isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptTypeGetter, | 
| -                      &ScriptTypeSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -514,22 +463,11 @@ void Accessors::ScriptCompilationTypeGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptCompilationTypeSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("compilation_type"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptCompilationTypeGetter, | 
| -                      &ScriptCompilationTypeSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -559,22 +497,11 @@ void Accessors::ScriptLineEndsGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptLineEndsSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptLineEndsInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("line_ends"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptLineEndsGetter, | 
| -                      &ScriptLineEndsSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -596,21 +523,10 @@ void Accessors::ScriptSourceUrlGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptSourceUrlSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->source_url_string(), | 
| -                      &ScriptSourceUrlGetter, | 
| -                      &ScriptSourceUrlSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->source_url_string(), | 
| +                      &ScriptSourceUrlGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -632,21 +548,10 @@ void Accessors::ScriptSourceMappingUrlGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptSourceMappingUrlSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->source_mapping_url_string(), | 
| -                      &ScriptSourceMappingUrlGetter, | 
| -                      &ScriptSourceMappingUrlSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->source_mapping_url_string(), | 
| +                      &ScriptSourceMappingUrlGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -669,19 +574,12 @@ void Accessors::ScriptIsEmbedderDebugScriptGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptIsEmbedderDebugScriptSetter( | 
| -    v8::Local<v8::Name> name, v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptIsEmbedderDebugScriptInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("is_debugger_script"))); | 
| return MakeAccessor(isolate, name, &ScriptIsEmbedderDebugScriptGetter, | 
| -                      &ScriptIsEmbedderDebugScriptSetter, attributes); | 
| +                      nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -702,22 +600,11 @@ void Accessors::ScriptContextDataGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptContextDataSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptContextDataInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("context_data"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptContextDataGetter, | 
| -                      &ScriptContextDataSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -749,22 +636,11 @@ void Accessors::ScriptEvalFromScriptGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptEvalFromScriptSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("eval_from_script"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptEvalFromScriptGetter, | 
| -                      &ScriptEvalFromScriptSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptEvalFromScriptGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -795,23 +671,12 @@ void Accessors::ScriptEvalFromScriptPositionGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptEvalFromScriptPositionSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("eval_from_script_position"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptEvalFromScriptPositionGetter, | 
| -                      &ScriptEvalFromScriptPositionSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, name, &ScriptEvalFromScriptPositionGetter, | 
| +                      nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -841,22 +706,11 @@ void Accessors::ScriptEvalFromFunctionNameGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::ScriptEvalFromFunctionNameSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> value, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| Handle<String> name(isolate->factory()->InternalizeOneByteString( | 
| STATIC_CHAR_VECTOR("eval_from_function_name"))); | 
| -  return MakeAccessor(isolate, | 
| -                      name, | 
| -                      &ScriptEvalFromFunctionNameGetter, | 
| -                      &ScriptEvalFromFunctionNameSetter, | 
| +  return MakeAccessor(isolate, name, &ScriptEvalFromFunctionNameGetter, nullptr, | 
| attributes); | 
| } | 
|  | 
| @@ -974,59 +828,27 @@ void Accessors::FunctionLengthGetter( | 
| info.GetReturnValue().Set(Utils::ToLocal(result)); | 
| } | 
|  | 
| - | 
| -MUST_USE_RESULT static MaybeHandle<Object> ReplaceAccessorWithDataProperty( | 
| -    Isolate* isolate, Handle<JSObject> object, Handle<Name> name, | 
| -    Handle<Object> value, bool is_observed, Handle<Object> old_value) { | 
| -  LookupIterator it(object, name); | 
| -  CHECK_EQ(LookupIterator::ACCESSOR, it.state()); | 
| -  DCHECK(it.HolderIsReceiverOrHiddenPrototype()); | 
| -  it.ReconfigureDataProperty(value, it.property_details().attributes()); | 
| - | 
| -  if (is_observed && !old_value->SameValue(*value)) { | 
| -    return JSObject::EnqueueChangeRecord(object, "update", name, old_value); | 
| -  } | 
| - | 
| -  return value; | 
| -} | 
| - | 
| - | 
| -MUST_USE_RESULT static MaybeHandle<Object> SetFunctionLength( | 
| -    Isolate* isolate, Handle<JSFunction> function, Handle<Object> value) { | 
| -  Handle<Object> old_value; | 
| -  bool is_observed = function->map()->is_observed(); | 
| -  if (is_observed) { | 
| -    old_value = handle(Smi::FromInt(function->shared()->length()), isolate); | 
| -  } | 
| - | 
| -  return ReplaceAccessorWithDataProperty(isolate, function, | 
| -                                         isolate->factory()->length_string(), | 
| -                                         value, is_observed, old_value); | 
| -} | 
| - | 
| - | 
| -void Accessors::FunctionLengthSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> val, | 
| +void Accessors::ObservedReconfigureToDataProperty( | 
| +    v8::Local<v8::Name> key, v8::Local<v8::Value> val, | 
| const v8::PropertyCallbackInfo<void>& info) { | 
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); | 
| HandleScope scope(isolate); | 
| +  Handle<JSObject> receiver = | 
| +      Handle<JSObject>::cast(Utils::OpenHandle(*info.This())); | 
| +  Handle<JSObject> holder = | 
| +      Handle<JSObject>::cast(Utils::OpenHandle(*info.Holder())); | 
| +  Handle<Name> name = Utils::OpenHandle(*key); | 
| Handle<Object> value = Utils::OpenHandle(*val); | 
| - | 
| -  Handle<JSFunction> object = | 
| -      Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); | 
| -  if (SetFunctionLength(isolate, object, value).is_null()) { | 
| -    isolate->OptionalRescheduleException(false); | 
| -  } | 
| +  MaybeHandle<Object> result = ReplaceAccessorWithDataProperty( | 
| +      isolate, receiver, holder, name, value, true); | 
| +  if (result.is_null()) isolate->OptionalRescheduleException(false); | 
| } | 
|  | 
|  | 
| Handle<AccessorInfo> Accessors::FunctionLengthInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->length_string(), | 
| -                      &FunctionLengthGetter, | 
| -                      &FunctionLengthSetter, | 
| +  return MakeAccessor(isolate, isolate->factory()->length_string(), | 
| +                      &FunctionLengthGetter, &ObservedReconfigureToDataProperty, | 
| attributes); | 
| } | 
|  | 
| @@ -1052,43 +874,10 @@ void Accessors::FunctionNameGetter( | 
| info.GetReturnValue().Set(Utils::ToLocal(result)); | 
| } | 
|  | 
| - | 
| -MUST_USE_RESULT static MaybeHandle<Object> SetFunctionName( | 
| -    Isolate* isolate, Handle<JSFunction> function, Handle<Object> value) { | 
| -  Handle<Object> old_value; | 
| -  bool is_observed = function->map()->is_observed(); | 
| -  if (is_observed) { | 
| -    old_value = handle(function->shared()->name(), isolate); | 
| -  } | 
| - | 
| -  return ReplaceAccessorWithDataProperty(isolate, function, | 
| -                                         isolate->factory()->name_string(), | 
| -                                         value, is_observed, old_value); | 
| -} | 
| - | 
| - | 
| -void Accessors::FunctionNameSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> val, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); | 
| -  HandleScope scope(isolate); | 
| -  Handle<Object> value = Utils::OpenHandle(*val); | 
| - | 
| -  Handle<JSFunction> object = | 
| -      Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); | 
| -  if (SetFunctionName(isolate, object, value).is_null()) { | 
| -    isolate->OptionalRescheduleException(false); | 
| -  } | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::FunctionNameInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->name_string(), | 
| -                      &FunctionNameGetter, | 
| -                      &FunctionNameSetter, | 
| +  return MakeAccessor(isolate, isolate->factory()->name_string(), | 
| +                      &FunctionNameGetter, &ObservedReconfigureToDataProperty, | 
| attributes); | 
| } | 
|  | 
| @@ -1216,22 +1005,10 @@ void Accessors::FunctionArgumentsGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::FunctionArgumentsSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> val, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  // Function arguments is non writable, non configurable. | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::FunctionArgumentsInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->arguments_string(), | 
| -                      &FunctionArgumentsGetter, | 
| -                      &FunctionArgumentsSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->arguments_string(), | 
| +                      &FunctionArgumentsGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
| @@ -1361,22 +1138,10 @@ void Accessors::FunctionCallerGetter( | 
| } | 
|  | 
|  | 
| -void Accessors::FunctionCallerSetter( | 
| -    v8::Local<v8::Name> name, | 
| -    v8::Local<v8::Value> val, | 
| -    const v8::PropertyCallbackInfo<void>& info) { | 
| -  // Function caller is non writable, non configurable. | 
| -  UNREACHABLE(); | 
| -} | 
| - | 
| - | 
| Handle<AccessorInfo> Accessors::FunctionCallerInfo( | 
| Isolate* isolate, PropertyAttributes attributes) { | 
| -  return MakeAccessor(isolate, | 
| -                      isolate->factory()->caller_string(), | 
| -                      &FunctionCallerGetter, | 
| -                      &FunctionCallerSetter, | 
| -                      attributes); | 
| +  return MakeAccessor(isolate, isolate->factory()->caller_string(), | 
| +                      &FunctionCallerGetter, nullptr, attributes); | 
| } | 
|  | 
|  | 
|  |