| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent cb24fc7 commit e0355b7
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -392,23 +392,13 @@ static MaybeLocal<Object> ConvertHeapStatsToJSObject( | |||
| 392 | 392 | FIXED_ONE_BYTE_STRING(isolate, "bucket_size"), | |
| 393 | 393 | FIXED_ONE_BYTE_STRING(isolate, "free_count"), | |
| 394 | 394 | FIXED_ONE_BYTE_STRING(isolate, "free_size")}; | |
| 395 | - Local<Value> bucket_size_value; | ||
| 396 | - if (!ToV8Value(context, space_stats.free_list_stats.bucket_size) | ||
| 397 | - .ToLocal(&bucket_size_value)) { | ||
| 398 | - return MaybeLocal<Object>(); | ||
| 399 | - } | ||
| 400 | - Local<Value> free_count_value; | ||
| 401 | - if (!ToV8Value(context, space_stats.free_list_stats.free_count) | ||
| 402 | - .ToLocal(&free_count_value)) { | ||
| 403 | - return MaybeLocal<Object>(); | ||
| 404 | - } | ||
| 405 | - Local<Value> free_size_value; | ||
| 406 | - if (!ToV8Value(context, space_stats.free_list_stats.free_size) | ||
| 407 | - .ToLocal(&free_size_value)) { | ||
| 408 | - return MaybeLocal<Object>(); | ||
| 409 | - } | ||
| 410 | 395 | Local<Value> free_list_statistics_values[] = { | |
| 411 | - bucket_size_value, free_count_value, free_size_value}; | ||
| 396 | + ToV8ValuePrimitiveArray( | ||
| 397 | + context, space_stats.free_list_stats.bucket_size, isolate), | ||
| 398 | + ToV8ValuePrimitiveArray( | ||
| 399 | + context, space_stats.free_list_stats.free_count, isolate), | ||
| 400 | + ToV8ValuePrimitiveArray( | ||
| 401 | + context, space_stats.free_list_stats.free_size, isolate)}; | ||
| 412 | 402 | ||
| 413 | 403 | Local<Object> free_list_statistics_obj = | |
| 414 | 404 | Object::New(isolate, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -448,12 +448,9 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | |||
| 448 | 448 | return handle_scope.Escape(ret); | |
| 449 | 449 | } | |
| 450 | 450 | ||
| 451 | - template <typename T, typename > | ||
| 452 | - v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | ||
| 453 | - const T& number, | ||
| 454 | - v8::Isolate* isolate) { | ||
| 455 | - if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 456 | - | ||
| 451 | + template <typename T> | ||
| 452 | + v8::Local<v8::Value> ConvertNumberToV8Value(v8::Isolate* isolate, | ||
| 453 | + const T& number) { | ||
| 457 | 454 | using Limits = std::numeric_limits<T>; | |
| 458 | 455 | // Choose Uint32, Int32, or Double depending on range checks. | |
| 459 | 456 | // These checks should all collapse at compile time. | |
@@ -474,6 +471,43 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | |||
| 474 | 471 | return v8::Number::New(isolate, static_cast<double>(number)); | |
| 475 | 472 | } | |
| 476 | 473 | ||
| 474 | + template <typename T, typename> | ||
| 475 | + v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context, | ||
| 476 | + const T& number, | ||
| 477 | + v8::Isolate* isolate) { | ||
| 478 | + if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 479 | + return ConvertNumberToV8Value(isolate, number); | ||
| 480 | + } | ||
| 481 | + | ||
| 482 | + template <typename T> | ||
| 483 | + v8::Local<v8::Array> ToV8ValuePrimitiveArray(v8::Local<v8::Context> context, | ||
| 484 | + const std::vector<T>& vec, | ||
| 485 | + v8::Isolate* isolate) { | ||
| 486 | + static_assert( | ||
| 487 | + std::is_same_v<T, bool> || std::is_integral_v<T> || | ||
| 488 | + std::is_floating_point_v<T>, | ||
| 489 | + "Only primitive types (bool, integral, floating-point) are supported."); | ||
| 490 | + | ||
| 491 | + if (isolate == nullptr) isolate = context->GetIsolate(); | ||
| 492 | + v8::EscapableHandleScope handle_scope(isolate); | ||
| 493 | + | ||
| 494 | + v8::LocalVector<v8::Value> elements(isolate); | ||
| 495 | + elements.reserve(vec.size()); | ||
| 496 | + | ||
| 497 | + for (const auto& value : vec) { | ||
| 498 | + if constexpr (std::is_same_v<T, bool>) { | ||
| 499 | + elements.emplace_back(v8::Boolean::New(isolate, value)); | ||
| 500 | + } else { | ||
| 501 | + v8::Local<v8::Value> v = ConvertNumberToV8Value(isolate, value); | ||
| 502 | + elements.emplace_back(v); | ||
| 503 | + } | ||
| 504 | + } | ||
| 505 | + | ||
| 506 | + v8::Local<v8::Array> arr = | ||
| 507 | + v8::Array::New(isolate, elements.data(), elements.size()); | ||
| 508 | + return handle_scope.Escape(arr); | ||
| 509 | + } | ||
| 510 | + | ||
| 477 | 511 | SlicedArguments::SlicedArguments( | |
| 478 | 512 | const v8::FunctionCallbackInfo<v8::Value>& args, size_t start) { | |
| 479 | 513 | const size_t length = static_cast<size_t>(args.Length()); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments