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); |
} |