@@ -1306,23 +1306,19 @@ void ObjectTemplate::SetAccessor(v8::Handle<Name> name,
1306
1306
1307
1307
template <typename Getter, typename Setter, typename Query, typename Deleter,
1308
1308
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) {
1315
1313
i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate();
1316
1314
ENTER_V8(isolate);
1317
1315
i::HandleScope scope(isolate);
1318
1316
EnsureConstructor(isolate, templ);
1319
1317
i::FunctionTemplateInfo* constructor =
1320
1318
i::FunctionTemplateInfo::cast(Utils::OpenHandle(templ)->constructor());
1321
1319
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));
1326
1322
1327
1323
if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
1328
1324
if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
@@ -1331,6 +1327,8 @@ static void ObjectTemplateSetNamedPropertyHandler(ObjectTemplate* templ,
1331
1327
if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
1332
1328
obj->set_flags(0);
1333
1329
obj->set_can_intercept_symbols(can_intercept_symbols);
1330
+ obj->set_all_can_read(static_cast<int>(flags) &
1331
+ static_cast<int>(PropertyHandlerFlags::kAllCanRead));
1334
1332
1335
1333
if (data.IsEmpty()) {
1336
1334
data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
@@ -1345,15 +1343,16 @@ void ObjectTemplate::SetNamedPropertyHandler(
1345
1343
NamedPropertyQueryCallback query, NamedPropertyDeleterCallback remover,
1346
1344
NamedPropertyEnumeratorCallback enumerator, Handle<Value> data) {
1347
1345
ObjectTemplateSetNamedPropertyHandler(this, getter, setter, query, remover,
1348
- enumerator, data, false);
1346
+ enumerator, data, false,
1347
+ PropertyHandlerFlags::kNone);
1349
1348
}
1350
1349
1351
1350
1352
1351
void ObjectTemplate::SetHandler(
1353
1352
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 );
1357
1356
}
1358
1357
1359
1358
@@ -1409,10 +1408,8 @@ void ObjectTemplate::SetHandler(
1409
1408
i::FunctionTemplateInfo* constructor = i::FunctionTemplateInfo::cast(
1410
1409
Utils::OpenHandle(this)->constructor());
1411
1410
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));
1416
1413
1417
1414
if (config.getter != 0) SET_FIELD_WRAPPED(obj, set_getter, config.getter);
1418
1415
if (config.setter != 0) SET_FIELD_WRAPPED(obj, set_setter, config.setter);
@@ -1422,6 +1419,8 @@ void ObjectTemplate::SetHandler(
1422
1419
SET_FIELD_WRAPPED(obj, set_enumerator, config.enumerator);
1423
1420
}
1424
1421
obj->set_flags(0);
1422
+ obj->set_all_can_read(static_cast<int>(config.flags) &
1423
+ static_cast<int>(PropertyHandlerFlags::kAllCanRead));
1425
1424
1426
1425
v8::Local<v8::Value> data = config.data;
1427
1426
if (data.IsEmpty()) {
0 commit comments