@@ -445,6 +445,33 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
445
445
return v8::Number::New (isolate, static_cast <double >(number));
446
446
}
447
447
448
+ template <typename T>
449
+ v8::Local<v8::Array> ToV8ValuePrimitiveArray (v8::Local<v8::Context> context,
450
+ const std::vector<T>& vec,
451
+ v8::Isolate* isolate) {
452
+ if (isolate == nullptr ) isolate = context->GetIsolate ();
453
+ v8::EscapableHandleScope handle_scope (isolate);
454
+ v8::Local<v8::Array> arr = v8::Array::New (isolate, vec.size ());
455
+
456
+ for (size_t i = 0 ; i < vec.size (); i++) {
457
+ v8::Local<v8::Value> element;
458
+
459
+ if constexpr (std::is_same_v<T, bool >) {
460
+ element = v8::Boolean::New (isolate, vec[i]);
461
+ } else if constexpr (std::is_same_v<T, int32_t >) {
462
+ element = v8::Integer::New (isolate, vec[i]);
463
+ } else if constexpr (std::is_same_v<T, uint32_t >) {
464
+ element = v8::Integer::NewFromUnsigned (isolate, vec[i]);
465
+ } else if constexpr (std::is_same_v<T, double >) {
466
+ element = v8::Number::New (isolate, vec[i]);
467
+ } else {
468
+ element = ToV8Value (context, vec[i], isolate).ToLocalChecked ();
469
+ }
470
+ arr->Set (context, i, element).Check ();
471
+ }
472
+ return handle_scope.Escape (arr);
473
+ }
474
+
448
475
SlicedArguments::SlicedArguments (
449
476
const v8::FunctionCallbackInfo<v8::Value>& args, size_t start) {
450
477
const size_t length = static_cast <size_t >(args.Length ());
0 commit comments