Skip to content

Commit c848799

Browse files
committedMar 18, 2025
src: add a variant of ToV8Value()
1 parent 046781e commit c848799

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed
 

‎src/util-inl.h

+27
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,33 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
445445
return v8::Number::New(isolate, static_cast<double>(number));
446446
}
447447

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+
448475
SlicedArguments::SlicedArguments(
449476
const v8::FunctionCallbackInfo<v8::Value>& args, size_t start) {
450477
const size_t length = static_cast<size_t>(args.Length());

0 commit comments

Comments
 (0)
Failed to load comments.