MCPcopy Create free account
hub / github.com/GNOME/gjs / gjs_array_to_flat_array

Function gjs_array_to_flat_array

gi/arg.cpp:668–700  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

666}
667
668GJS_JSAPI_RETURN_CONVENTION
669static bool gjs_array_to_flat_array(JSContext* cx, JS::HandleValue array_value,
670 unsigned length,
671 const GI::TypeInfo& param_info,
672 size_t param_size, void** arr_p) {
673 g_assert((param_size > 0) &&
674 "Only flat arrays of elements of known size are supported");
675
676 Gjs::AutoPointer<uint8_t> flat_array{g_new0(uint8_t, param_size * length)};
677
678 JS::RootedObject array(cx, &array_value.toObject());
679 JS::RootedValue elem(cx);
680 for (unsigned i = 0; i < length; i++) {
681 elem = JS::UndefinedValue();
682
683 if (!JS_GetElement(cx, array, i, &elem)) {
684 gjs_throw(cx, "Missing array element %u", i);
685 return false;
686 }
687
688 GIArgument arg;
689 if (!gjs_value_to_gi_argument(cx, elem, param_info,
690 GJS_ARGUMENT_ARRAY_ELEMENT,
691 GI_TRANSFER_NOTHING, &arg))
692 return false;
693
694 memcpy(&flat_array[param_size * i], gjs_arg_get<void*>(&arg),
695 param_size);
696 }
697
698 *arr_p = flat_array.release();
699 return true;
700}
701
702GJS_JSAPI_RETURN_CONVENTION
703static bool gjs_array_to_basic_array(JSContext* cx, JS::HandleValue v_array,

Callers 1

gjs_array_to_arrayFunction · 0.85

Calls 3

gjs_throwFunction · 0.85
gjs_value_to_gi_argumentFunction · 0.85
releaseMethod · 0.45

Tested by

no test coverage detected