@@ -47,7 +47,6 @@ using v8::Isolate;
4747using v8::Local;
4848using v8::LocalVector;
4949using v8::MaybeLocal;
50- using v8::Name;
5150using v8::Object;
5251using v8::ScriptCompiler;
5352using v8::String;
@@ -338,16 +337,18 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
338337 auto space_stats_tmpl = env->space_stats_template ();
339338 auto heap_stats_tmpl = env->v8_heap_statistics_template ();
340339 if (object_stats_template.IsEmpty ()) {
341- std::string_view object_stats_names[] = {" allocated_bytes" , " object_count" };
340+ static constexpr std::string_view object_stats_names[] = {" allocated_bytes" ,
341+ " object_count" };
342342 object_stats_template =
343343 DictionaryTemplate::New (isolate, object_stats_names);
344344 env->set_object_stats_template (object_stats_template);
345345 }
346346 if (page_stats_tmpl.IsEmpty ()) {
347- std::string_view page_stats_names[] = {" committed_size_bytes" ,
348- " resident_size_bytes" ,
349- " used_size_bytes" ,
350- " object_statistics" };
347+ static constexpr std::string_view page_stats_names[] = {
348+ " committed_size_bytes" ,
349+ " resident_size_bytes" ,
350+ " used_size_bytes" ,
351+ " object_statistics" };
351352 page_stats_tmpl = DictionaryTemplate::New (isolate, page_stats_names);
352353 env->set_page_stats_template (page_stats_tmpl);
353354 }
@@ -359,21 +360,23 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
359360 env->set_free_list_statistics_template (free_list_statistics_template);
360361 }
361362 if (space_stats_tmpl.IsEmpty ()) {
362- std::string_view space_stats_names[] = {" name" ,
363- " committed_size_bytes" ,
364- " resident_size_bytes" ,
365- " used_size_bytes" ,
366- " page_stats" ,
367- " free_list_stats" };
363+ static constexpr std::string_view space_stats_names[] = {
364+ " name" ,
365+ " committed_size_bytes" ,
366+ " resident_size_bytes" ,
367+ " used_size_bytes" ,
368+ " page_stats" ,
369+ " free_list_stats" };
368370 space_stats_tmpl = DictionaryTemplate::New (isolate, space_stats_names);
369371 env->set_space_stats_template (space_stats_tmpl);
370372 }
371373 if (heap_stats_tmpl.IsEmpty ()) {
372- std::string_view heap_statistics_names[] = {" committed_size_bytes" ,
373- " resident_size_bytes" ,
374- " used_size_bytes" ,
375- " space_statistics" ,
376- " type_names" };
374+ static constexpr std::string_view heap_statistics_names[] = {
375+ " committed_size_bytes" ,
376+ " resident_size_bytes" ,
377+ " used_size_bytes" ,
378+ " space_statistics" ,
379+ " type_names" };
377380 heap_stats_tmpl = DictionaryTemplate::New (isolate, heap_statistics_names);
378381 env->set_v8_heap_statistics_template (heap_stats_tmpl);
379382 }
@@ -398,8 +401,12 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
398401 isolate, static_cast <uint32_t >(object_stats.allocated_bytes )),
399402 Uint32::NewFromUnsigned (
400403 isolate, static_cast <uint32_t >(object_stats.object_count ))};
401- Local<Object> object_stats_object =
402- object_stats_template->NewInstance (context, object_stats_values);
404+ Local<Object> object_stats_object;
405+ if (!NewDictionaryInstanceNullProto (
406+ context, object_stats_template, object_stats_values)
407+ .ToLocal (&object_stats_object)) {
408+ return MaybeLocal<Object>();
409+ }
403410 object_statistics_array.emplace_back (object_stats_object);
404411 }
405412
@@ -414,8 +421,13 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
414421 Array::New (isolate,
415422 object_statistics_array.data (),
416423 object_statistics_array.size ())};
417- page_statistics_array.emplace_back (
418- page_stats_tmpl->NewInstance (context, page_stats_values));
424+ Local<Object> page_stats_object;
425+ if (!NewDictionaryInstanceNullProto (
426+ context, page_stats_tmpl, page_stats_values)
427+ .ToLocal (&page_stats_object)) {
428+ return MaybeLocal<Object>();
429+ }
430+ page_statistics_array.emplace_back (page_stats_object);
419431 }
420432
421433 // Free List Statistics
@@ -427,9 +439,13 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
427439 ToV8ValuePrimitiveArray (
428440 context, space_stats.free_list_stats .free_size , isolate)};
429441
430- Local<Object> free_list_statistics_obj =
431- free_list_statistics_template->NewInstance (context,
432- free_list_statistics_values);
442+ Local<Object> free_list_statistics_obj;
443+ if (!NewDictionaryInstanceNullProto (context,
444+ free_list_statistics_template,
445+ free_list_statistics_values)
446+ .ToLocal (&free_list_statistics_obj)) {
447+ return MaybeLocal<Object>();
448+ }
433449
434450 // Set Space Statistics
435451 Local<Value> name_value;
@@ -453,8 +469,13 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
453469 page_statistics_array.size ()),
454470 free_list_statistics_obj,
455471 };
456- space_statistics_array.emplace_back (
457- space_stats_tmpl->NewInstance (context, space_stats_values));
472+ Local<Object> space_stats_object;
473+ if (!NewDictionaryInstanceNullProto (
474+ context, space_stats_tmpl, space_stats_values)
475+ .ToLocal (&space_stats_object)) {
476+ return MaybeLocal<Object>();
477+ }
478+ space_statistics_array.emplace_back (space_stats_object);
458479 }
459480
460481 Local<Value> type_names_value;
@@ -474,7 +495,8 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject(
474495 space_statistics_array.size ()),
475496 type_names_value};
476497
477- return heap_stats_tmpl->NewInstance (context, heap_statistics_values);
498+ return NewDictionaryInstanceNullProto (
499+ context, heap_stats_tmpl, heap_statistics_values);
478500}
479501
480502static void GetCppHeapStatistics (const FunctionCallbackInfo<Value>& args) {
0 commit comments