| 700 | } |
| 701 | |
| 702 | GJS_JSAPI_RETURN_CONVENTION |
| 703 | static bool gjs_array_to_basic_array(JSContext* cx, JS::HandleValue v_array, |
| 704 | size_t length, |
| 705 | GITypeTag element_storage_type, |
| 706 | void** array_out) { |
| 707 | g_assert(GI_TYPE_TAG_IS_BASIC(element_storage_type)); |
| 708 | |
| 709 | switch (element_storage_type) { |
| 710 | case GI_TYPE_TAG_UTF8: |
| 711 | return gjs_array_to_strv(cx, v_array, length, array_out); |
| 712 | case GI_TYPE_TAG_FILENAME: |
| 713 | return array_to_basic_c_array(cx, v_array, length, |
| 714 | element_storage_type, array_out); |
| 715 | case GI_TYPE_TAG_BOOLEAN: |
| 716 | return gjs_array_to_auto_array<Gjs::Tag::GBoolean>( |
| 717 | cx, v_array, length, array_out); |
| 718 | case GI_TYPE_TAG_UNICHAR: |
| 719 | return gjs_array_to_auto_array<char32_t>(cx, v_array, length, |
| 720 | array_out); |
| 721 | case GI_TYPE_TAG_UINT8: |
| 722 | return gjs_array_to_auto_array<uint8_t>(cx, v_array, length, |
| 723 | array_out); |
| 724 | case GI_TYPE_TAG_INT8: |
| 725 | return gjs_array_to_auto_array<int8_t>(cx, v_array, length, |
| 726 | array_out); |
| 727 | case GI_TYPE_TAG_UINT16: |
| 728 | return gjs_array_to_auto_array<uint16_t>(cx, v_array, length, |
| 729 | array_out); |
| 730 | case GI_TYPE_TAG_INT16: |
| 731 | return gjs_array_to_auto_array<int16_t>(cx, v_array, length, |
| 732 | array_out); |
| 733 | case GI_TYPE_TAG_UINT32: |
| 734 | return gjs_array_to_auto_array<uint32_t>(cx, v_array, length, |
| 735 | array_out); |
| 736 | case GI_TYPE_TAG_INT32: |
| 737 | return gjs_array_to_auto_array<int32_t>(cx, v_array, length, |
| 738 | array_out); |
| 739 | case GI_TYPE_TAG_INT64: |
| 740 | return gjs_array_to_auto_array<int64_t>(cx, v_array, length, |
| 741 | array_out); |
| 742 | case GI_TYPE_TAG_UINT64: |
| 743 | return gjs_array_to_auto_array<uint64_t>(cx, v_array, length, |
| 744 | array_out); |
| 745 | case GI_TYPE_TAG_FLOAT: |
| 746 | return gjs_array_to_auto_array<float>(cx, v_array, length, |
| 747 | array_out); |
| 748 | case GI_TYPE_TAG_DOUBLE: |
| 749 | return gjs_array_to_auto_array<double>(cx, v_array, length, |
| 750 | array_out); |
| 751 | case GI_TYPE_TAG_GTYPE: |
| 752 | return gjs_array_to_auto_array<Gjs::Tag::GType>(cx, v_array, length, |
| 753 | array_out); |
| 754 | case GI_TYPE_TAG_VOID: |
| 755 | gjs_throw(cx, "Unhandled array element type %d", |
| 756 | element_storage_type); |
| 757 | return false; |
| 758 | default: |
| 759 | g_assert_not_reached(); |
no test coverage detected