| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 29a1150 commit aa00f59
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -385,23 +385,13 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject( | |||
| 385 | 385 | FIXED_ONE_BYTE_STRING(isolate, "bucket_size"), | |
| 386 | 386 | FIXED_ONE_BYTE_STRING(isolate, "free_count"), | |
| 387 | 387 | FIXED_ONE_BYTE_STRING(isolate, "free_size")}; | |
| 388 | - Local<Value> bucket_size_value; | ||
| 389 | - if (!ToV8Value(context, space_stats.free_list_stats.bucket_size) | ||
| 390 | - .ToLocal(&bucket_size_value)) { | ||
| 391 | - return MaybeLocal<Object>(); | ||
| 392 | - } | ||
| 393 | - Local<Value> free_count_value; | ||
| 394 | - if (!ToV8Value(context, space_stats.free_list_stats.free_count) | ||
| 395 | - .ToLocal(&free_count_value)) { | ||
| 396 | - return MaybeLocal<Object>(); | ||
| 397 | - } | ||
| 398 | - Local<Value> free_size_value; | ||
| 399 | - if (!ToV8Value(context, space_stats.free_list_stats.free_size) | ||
| 400 | - .ToLocal(&free_size_value)) { | ||
| 401 | - return MaybeLocal<Object>(); | ||
| 402 | - } | ||
| 403 | 388 | Local<Value> free_list_statistics_values[] = { | |
| 404 | - bucket_size_value, free_count_value, free_size_value}; | ||
| 389 | + ToV8ValuePrimitiveArray( | ||
| 390 | + context, space_stats.free_list_stats.bucket_size, isolate), | ||
| 391 | + ToV8ValuePrimitiveArray( | ||
| 392 | + context, space_stats.free_list_stats.free_count, isolate), | ||
| 393 | + ToV8ValuePrimitiveArray( | ||
| 394 | + context, space_stats.free_list_stats.free_size, isolate)}; | ||
| 405 | 395 | ||
| 406 | 396 | Local<Object> free_list_statistics_obj = | |
| 407 | 397 | Object::New(isolate, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -428,12 +428,9 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | |||
| 428 | 428 | return handle_scope.Escape(ret); | |
| 429 | 429 | } | |
| 430 | 430 | ||
| 431 | - template <typename T, typename > | ||
| 432 | - v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | ||
| 433 | - const T& number, | ||
| 434 | - v8::Isolate* isolate) { | ||
| 435 | - if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 436 | - | ||
| 431 | + template <typename T> | ||
| 432 | + v8::Local<v8::Value> ConvertNumberToV8Value(v8::Isolate* isolate, | ||
| 433 | + const T& number) { | ||
| 437 | 434 | using Limits = std::numeric_limits<T>; | |
| 438 | 435 | // Choose Uint32, Int32, or Double depending on range checks. | |
| 439 | 436 | // These checks should all collapse at compile time. | |
@@ -454,6 +451,43 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | |||
| 454 | 451 | return v8::Number::New(isolate, static_cast<double>(number)); | |
| 455 | 452 | } | |
| 456 | 453 | ||
| 454 | + template <typename T, typename> | ||
| 455 | + v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | ||
| 456 | + const T& number, | ||
| 457 | + v8::Isolate* isolate) { | ||
| 458 | + if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 459 | + return ConvertNumberToV8Value(isolate, number); | ||
| 460 | + } | ||
| 461 | + | ||
| 462 | + template <typename T> | ||
| 463 | + v8::Local<v8::Array> ToV8ValuePrimitiveArray(v8::Local<v8::Context> context, | ||
| 464 | + const std::vector<T>& vec, | ||
| 465 | + v8::Isolate* isolate) { | ||
| 466 | + static_assert( | ||
| 467 | + std::is_same_v<T, bool> || std::is_integral_v<T> || | ||
| 468 | + std::is_floating_point_v<T>, | ||
| 469 | + "Only primitive types (bool, integral, floating-point) are supported."); | ||
| 470 | + | ||
| 471 | + if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 472 | + v8::EscapableHandleScope handle_scope(isolate); | ||
| 473 | + | ||
| 474 | + v8::LocalVector<v8::Value> elements(isolate); | ||
| 475 | + elements.reserve(vec.size()); | ||
| 476 | + | ||
| 477 | + for (const auto& value : vec) { | ||
| 478 | + if constexpr (std::is_same_v<T, bool>) { | ||
| 479 | + elements.emplace_back(v8::Boolean::New(isolate, value)); | ||
| 480 | + } else { | ||
| 481 | + v8::Local<v8::Value> v = ConvertNumberToV8Value(isolate, value); | ||
| 482 | + elements.emplace_back(v); | ||
| 483 | + } | ||
| 484 | + } | ||
| 485 | + | ||
| 486 | + v8::Local<v8::Array> arr = | ||
| 487 | + v8::Array::New(isolate, elements.data(), elements.size()); | ||
| 488 | + return handle_scope.Escape(arr); | ||
| 489 | + } | ||
| 490 | + | ||
| 457 | 491 | SlicedArguments::SlicedArguments( | |
| 458 | 492 | const v8::FunctionCallbackInfo<v8::Value>& args, size_t start) { | |
| 459 | 493 | const size_t length = static_cast<size_t>(args.Length()); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments