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

Function gjs_array_to_array

gi/arg.cpp:763–812  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

761}
762
763GJS_JSAPI_RETURN_CONVENTION
764static bool gjs_array_to_array(JSContext* cx, JS::HandleValue array_value,
765 size_t length, GITransfer transfer,
766 const GI::TypeInfo& param_info, void** arr_p) {
767 GITypeTag element_type = param_info.storage_type();
768
769 if (GI_TYPE_TAG_IS_BASIC(element_type)) {
770 return gjs_array_to_basic_array(cx, array_value, length, element_type,
771 arr_p);
772 }
773
774 switch (element_type) {
775 case GI_TYPE_TAG_INTERFACE:
776 if (!param_info.is_pointer()) {
777 GI::AutoBaseInfo interface_info{param_info.interface()};
778 if (auto reg_info =
779 interface_info.as<GI::InfoTag::REGISTERED_TYPE>();
780 reg_info && GI::is_g_value(*reg_info)) {
781 // Special case for GValue "flat arrays", this could also
782 // using the generic case, but if we do so we're leaking
783 // atm.
784 return gjs_array_to_auto_array<GValue>(cx, array_value,
785 length, arr_p);
786 }
787
788 size_t element_size =
789 gjs_type_get_element_size(param_info.tag(), param_info);
790 if (element_size) {
791 return gjs_array_to_flat_array(cx, array_value, length,
792 param_info, element_size,
793 arr_p);
794 }
795 }
796 [[fallthrough]];
797 case GI_TYPE_TAG_ARRAY:
798 case GI_TYPE_TAG_GLIST:
799 case GI_TYPE_TAG_GSLIST:
800 case GI_TYPE_TAG_GHASH:
801 case GI_TYPE_TAG_ERROR:
802 return gjs_array_to_ptrarray(cx, array_value, length,
803 transfer == GI_TRANSFER_CONTAINER
804 ? GI_TRANSFER_NOTHING
805 : transfer,
806 param_info, arr_p);
807 default:
808 // Basic types already handled in gjs_array_to_basic_array()
809 gjs_throw(cx, "Unhandled array element type %d", element_type);
810 return false;
811 }
812}
813
814static inline size_t basic_type_element_size(GITypeTag element_tag) {
815 g_assert(GI_TYPE_TAG_IS_BASIC(element_tag));

Callers 1

Calls 10

gjs_array_to_basic_arrayFunction · 0.85
is_g_valueFunction · 0.85
gjs_array_to_flat_arrayFunction · 0.85
gjs_array_to_ptrarrayFunction · 0.85
gjs_throwFunction · 0.85
interfaceMethod · 0.80
storage_typeMethod · 0.45
is_pointerMethod · 0.45
tagMethod · 0.45

Tested by

no test coverage detected