Index: src/accessors.cc |
diff --git a/src/accessors.cc b/src/accessors.cc |
index 09a38e10063d12550292e5bf6bcb06a85c408e4f..c6f52fa95529700c59e27bcf0480fbfee77a071a 100644 |
--- a/src/accessors.cc |
+++ b/src/accessors.cc |
@@ -21,7 +21,8 @@ namespace internal { |
Handle<AccessorInfo> Accessors::MakeAccessor( |
Isolate* isolate, Handle<Name> name, AccessorNameGetterCallback getter, |
- AccessorNameBooleanSetterCallback setter, PropertyAttributes attributes) { |
+ AccessorNameBooleanSetterCallback setter, PropertyAttributes attributes, |
+ bool replace_on_access) { |
Factory* factory = isolate->factory(); |
Handle<AccessorInfo> info = factory->NewAccessorInfo(); |
info->set_property_attributes(attributes); |
@@ -29,6 +30,8 @@ Handle<AccessorInfo> Accessors::MakeAccessor( |
info->set_all_can_write(false); |
info->set_is_special_data_property(true); |
info->set_is_sloppy(false); |
+ info->set_replace_on_access(replace_on_access); |
+ DCHECK_IMPLIES(replace_on_access, setter == nullptr); |
name = factory->InternalizeName(name); |
info->set_name(*name); |
Handle<Object> get = v8::FromCData(isolate, getter); |
@@ -138,7 +141,7 @@ Handle<AccessorInfo> Accessors::ArgumentsIteratorInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
Handle<Name> name = isolate->factory()->iterator_symbol(); |
return MakeAccessor(isolate, name, &ArgumentsIteratorGetter, nullptr, |
- attributes); |
+ attributes, true); |
} |
@@ -199,11 +202,9 @@ void Accessors::ArrayLengthSetter( |
Handle<AccessorInfo> Accessors::ArrayLengthInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
- return MakeAccessor(isolate, |
- isolate->factory()->length_string(), |
- &ArrayLengthGetter, |
- &ArrayLengthSetter, |
- attributes); |
+ return MakeAccessor(isolate, isolate->factory()->length_string(), |
+ &ArrayLengthGetter, &ArrayLengthSetter, attributes, |
+ false); |
} |
// |
@@ -247,7 +248,7 @@ void Accessors::ModuleNamespaceEntrySetter( |
Handle<AccessorInfo> Accessors::ModuleNamespaceEntryInfo( |
Isolate* isolate, Handle<String> name, PropertyAttributes attributes) { |
return MakeAccessor(isolate, name, &ModuleNamespaceEntryGetter, |
- &ModuleNamespaceEntrySetter, attributes); |
+ &ModuleNamespaceEntrySetter, attributes, false); |
} |
@@ -283,7 +284,7 @@ void Accessors::StringLengthGetter( |
Handle<AccessorInfo> Accessors::StringLengthInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->length_string(), |
- &StringLengthGetter, nullptr, attributes); |
+ &StringLengthGetter, nullptr, attributes, false); |
} |
@@ -310,7 +311,7 @@ Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("column_offset"))); |
return MakeAccessor(isolate, name, &ScriptColumnOffsetGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -335,7 +336,8 @@ Handle<AccessorInfo> Accessors::ScriptIdInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
Handle<String> name( |
isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("id"))); |
- return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes); |
+ return MakeAccessor(isolate, name, &ScriptIdGetter, nullptr, attributes, |
+ false); |
} |
@@ -359,7 +361,7 @@ void Accessors::ScriptNameGetter( |
Handle<AccessorInfo> Accessors::ScriptNameInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->name_string(), |
- &ScriptNameGetter, nullptr, attributes); |
+ &ScriptNameGetter, nullptr, attributes, false); |
} |
@@ -383,7 +385,7 @@ void Accessors::ScriptSourceGetter( |
Handle<AccessorInfo> Accessors::ScriptSourceInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->source_string(), |
- &ScriptSourceGetter, nullptr, attributes); |
+ &ScriptSourceGetter, nullptr, attributes, false); |
} |
@@ -410,7 +412,7 @@ Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("line_offset"))); |
return MakeAccessor(isolate, name, &ScriptLineOffsetGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -436,7 +438,8 @@ Handle<AccessorInfo> Accessors::ScriptTypeInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
Handle<String> name( |
isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("type"))); |
- return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes); |
+ return MakeAccessor(isolate, name, &ScriptTypeGetter, nullptr, attributes, |
+ false); |
} |
@@ -463,7 +466,7 @@ Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("compilation_type"))); |
return MakeAccessor(isolate, name, &ScriptCompilationTypeGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -496,8 +499,8 @@ Handle<AccessorInfo> Accessors::ScriptLineEndsInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("line_ends"))); |
- return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, |
- attributes); |
+ return MakeAccessor(isolate, name, &ScriptLineEndsGetter, nullptr, attributes, |
+ false); |
} |
@@ -521,7 +524,7 @@ void Accessors::ScriptSourceUrlGetter( |
Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->source_url_string(), |
- &ScriptSourceUrlGetter, nullptr, attributes); |
+ &ScriptSourceUrlGetter, nullptr, attributes, false); |
} |
@@ -546,7 +549,8 @@ void Accessors::ScriptSourceMappingUrlGetter( |
Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->source_mapping_url_string(), |
- &ScriptSourceMappingUrlGetter, nullptr, attributes); |
+ &ScriptSourceMappingUrlGetter, nullptr, attributes, |
+ false); |
} |
@@ -574,7 +578,7 @@ Handle<AccessorInfo> Accessors::ScriptIsEmbedderDebugScriptInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("is_debugger_script"))); |
return MakeAccessor(isolate, name, &ScriptIsEmbedderDebugScriptGetter, |
- nullptr, attributes); |
+ nullptr, attributes, false); |
} |
@@ -600,7 +604,7 @@ Handle<AccessorInfo> Accessors::ScriptContextDataInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("context_data"))); |
return MakeAccessor(isolate, name, &ScriptContextDataGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -636,7 +640,7 @@ Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("eval_from_script"))); |
return MakeAccessor(isolate, name, &ScriptEvalFromScriptGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -666,7 +670,7 @@ Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("eval_from_script_position"))); |
return MakeAccessor(isolate, name, &ScriptEvalFromScriptPositionGetter, |
- nullptr, attributes); |
+ nullptr, attributes, false); |
} |
@@ -703,7 +707,7 @@ Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo( |
Handle<String> name(isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("eval_from_function_name"))); |
return MakeAccessor(isolate, name, &ScriptEvalFromFunctionNameGetter, nullptr, |
- attributes); |
+ attributes, false); |
} |
@@ -768,11 +772,9 @@ void Accessors::FunctionPrototypeSetter( |
Handle<AccessorInfo> Accessors::FunctionPrototypeInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
- return MakeAccessor(isolate, |
- isolate->factory()->prototype_string(), |
- &FunctionPrototypeGetter, |
- &FunctionPrototypeSetter, |
- attributes); |
+ return MakeAccessor(isolate, isolate->factory()->prototype_string(), |
+ &FunctionPrototypeGetter, &FunctionPrototypeSetter, |
+ attributes, false); |
} |
@@ -800,8 +802,7 @@ void Accessors::FunctionLengthGetter( |
Handle<AccessorInfo> Accessors::FunctionLengthInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->length_string(), |
- &FunctionLengthGetter, &ReconfigureToDataProperty, |
- attributes); |
+ &FunctionLengthGetter, nullptr, attributes, true); |
Toon Verwaest
2016/10/28 14:05:21
This technically all works, but it won't give good
|
} |
@@ -824,8 +825,7 @@ void Accessors::FunctionNameGetter( |
Handle<AccessorInfo> Accessors::FunctionNameInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->name_string(), |
- &FunctionNameGetter, &ReconfigureToDataProperty, |
- attributes); |
+ &FunctionNameGetter, nullptr, attributes, true); |
} |
@@ -972,7 +972,7 @@ void Accessors::FunctionArgumentsGetter( |
Handle<AccessorInfo> Accessors::FunctionArgumentsInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->arguments_string(), |
- &FunctionArgumentsGetter, nullptr, attributes); |
+ &FunctionArgumentsGetter, nullptr, attributes, false); |
} |
@@ -1105,7 +1105,7 @@ void Accessors::FunctionCallerGetter( |
Handle<AccessorInfo> Accessors::FunctionCallerInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->caller_string(), |
- &FunctionCallerGetter, nullptr, attributes); |
+ &FunctionCallerGetter, nullptr, attributes, false); |
} |
@@ -1142,8 +1142,7 @@ void Accessors::BoundFunctionLengthGetter( |
Handle<AccessorInfo> Accessors::BoundFunctionLengthInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->length_string(), |
- &BoundFunctionLengthGetter, &ReconfigureToDataProperty, |
- attributes); |
+ &BoundFunctionLengthGetter, nullptr, attributes, true); |
} |
// |
@@ -1169,8 +1168,7 @@ void Accessors::BoundFunctionNameGetter( |
Handle<AccessorInfo> Accessors::BoundFunctionNameInfo( |
Isolate* isolate, PropertyAttributes attributes) { |
return MakeAccessor(isolate, isolate->factory()->name_string(), |
- &BoundFunctionNameGetter, &ReconfigureToDataProperty, |
- attributes); |
+ &BoundFunctionNameGetter, nullptr, attributes, true); |
} |
// |
@@ -1285,7 +1283,7 @@ Handle<AccessorInfo> Accessors::ErrorStackInfo(Isolate* isolate, |
PropertyAttributes attributes) { |
Handle<AccessorInfo> info = |
MakeAccessor(isolate, isolate->factory()->stack_string(), |
- &ErrorStackGetter, &ErrorStackSetter, attributes); |
+ &ErrorStackGetter, &ErrorStackSetter, attributes, false); |
return info; |
} |