@@ -1306,23 +1306,19 @@ void ObjectTemplate::SetAccessor(v8::Handle<Name> name,
13061306
13071307template <typename Getter, typename Setter, typename Query, typename Deleter,
13081308 typename Enumerator>
1309- static void ObjectTemplateSetNamedPropertyHandler (ObjectTemplate* templ,
1310- Getter getter, Setter setter,
1311- Query query, Deleter remover,
1312- Enumerator enumerator,
1313- Handle<Value> data,
1314- bool can_intercept_symbols) {
1309+ static void ObjectTemplateSetNamedPropertyHandler (
1310+ ObjectTemplate* templ, Getter getter, Setter setter, Query query,
1311+ Deleter remover, Enumerator enumerator, Handle<Value> data,
1312+ bool can_intercept_symbols, PropertyHandlerFlags flags) {
13151313 i::Isolate* isolate = Utils::OpenHandle (templ)->GetIsolate ();
13161314 ENTER_V8 (isolate);
13171315 i::HandleScope scope (isolate);
13181316 EnsureConstructor (isolate, templ);
13191317 i::FunctionTemplateInfo* constructor =
13201318 i::FunctionTemplateInfo::cast (Utils::OpenHandle (templ)->constructor ());
13211319 i::Handle<i::FunctionTemplateInfo> cons (constructor);
1322- i::Handle<i::Struct> struct_obj =
1323- isolate->factory ()->NewStruct (i::INTERCEPTOR_INFO_TYPE);
1324- i::Handle<i::InterceptorInfo> obj =
1325- i::Handle<i::InterceptorInfo>::cast (struct_obj);
1320+ auto obj = i::Handle<i::InterceptorInfo>::cast (
1321+ isolate->factory ()->NewStruct (i::INTERCEPTOR_INFO_TYPE));
13261322
13271323 if (getter != 0 ) SET_FIELD_WRAPPED (obj, set_getter, getter);
13281324 if (setter != 0 ) SET_FIELD_WRAPPED (obj, set_setter, setter);
@@ -1331,6 +1327,8 @@ static void ObjectTemplateSetNamedPropertyHandler(ObjectTemplate* templ,
13311327 if (enumerator != 0 ) SET_FIELD_WRAPPED (obj, set_enumerator, enumerator);
13321328 obj->set_flags (0 );
13331329 obj->set_can_intercept_symbols (can_intercept_symbols);
1330+ obj->set_all_can_read (static_cast <int >(flags) &
1331+ static_cast <int >(PropertyHandlerFlags::kAllCanRead ));
13341332
13351333 if (data.IsEmpty ()) {
13361334 data = v8::Undefined (reinterpret_cast <v8::Isolate*>(isolate));
@@ -1345,15 +1343,16 @@ void ObjectTemplate::SetNamedPropertyHandler(
13451343 NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover,
13461344 NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) {
13471345 ObjectTemplateSetNamedPropertyHandler (this , getter, setter, query, remover,
1348- enumerator, data, false );
1346+ enumerator, data, false ,
1347+ PropertyHandlerFlags::kNone );
13491348}
13501349
13511350
13521351void ObjectTemplate::SetHandler (
13531352 const NamedPropertyHandlerConfiguration& config) {
1354- ObjectTemplateSetNamedPropertyHandler (this , config. getter , config. setter ,
1355- config.query , config.deleter ,
1356- config.enumerator , config.data , true );
1353+ ObjectTemplateSetNamedPropertyHandler (
1354+ this , config. getter , config. setter , config.query , config.deleter ,
1355+ config.enumerator , config.data , true , config. flags );
13571356}
13581357
13591358
@@ -1409,10 +1408,8 @@ void ObjectTemplate::SetHandler(
14091408 i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast (
14101409 Utils::OpenHandle (this )->constructor ());
14111410 i::Handle<i::FunctionTemplateInfo> cons (constructor);
1412- i::Handle<i::Struct> struct_obj =
1413- isolate->factory ()->NewStruct (i::INTERCEPTOR_INFO_TYPE);
1414- i::Handle<i::InterceptorInfo> obj =
1415- i::Handle<i::InterceptorInfo>::cast (struct_obj);
1411+ auto obj = i::Handle<i::InterceptorInfo>::cast (
1412+ isolate->factory ()->NewStruct (i::INTERCEPTOR_INFO_TYPE));
14161413
14171414 if (config.getter != 0 ) SET_FIELD_WRAPPED (obj, set_getter, config.getter );
14181415 if (config.setter != 0 ) SET_FIELD_WRAPPED (obj, set_setter, config.setter );
@@ -1422,6 +1419,8 @@ void ObjectTemplate::SetHandler(
14221419 SET_FIELD_WRAPPED (obj, set_enumerator, config.enumerator );
14231420 }
14241421 obj->set_flags (0 );
1422+ obj->set_all_can_read (static_cast <int >(config.flags ) &
1423+ static_cast <int >(PropertyHandlerFlags::kAllCanRead ));
14251424
14261425 v8::Local<v8::Value> data = config.data ;
14271426 if (data.IsEmpty ()) {
0 commit comments