File: arg.h

package info (click to toggle)
gjs 1.87.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 6,848 kB
  • sloc: cpp: 38,389; javascript: 31,953; ansic: 15,960; sh: 1,777; python: 791; xml: 137; makefile: 40
file content (248 lines) | stat: -rw-r--r-- 12,426 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
// SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
// SPDX-FileCopyrightText: 2008 litl, LLC

#pragma once

#include <config.h>

#include <stddef.h>  // for size_t
#include <stdint.h>

#include <girepository/girepository.h>
#include <glib-object.h>
#include <glib.h>  // for GHashTable

#include <js/RootingAPI.h>
#include <js/TypeDecls.h>

#include "gi/info.h"
#include "gjs/macros.h"

// Different roles for a GIArgument; currently used only in exception and debug
// messages.
enum GjsArgumentType {
    GJS_ARGUMENT_ARGUMENT,
    GJS_ARGUMENT_RETURN_VALUE,
    GJS_ARGUMENT_FIELD,
    GJS_ARGUMENT_LIST_ELEMENT,
    GJS_ARGUMENT_HASH_ELEMENT,
    GJS_ARGUMENT_ARRAY_ELEMENT
};

enum class [[clang::flag_enum]] GjsArgumentFlags : uint8_t {
    NONE = 0,
    MAY_BE_NULL = 1 << 0,
    CALLER_ALLOCATES = 1 << 1,
    SKIP_IN = 1 << 2,
    SKIP_OUT = 1 << 3,
    SKIP_ALL = SKIP_IN | SKIP_OUT,
    ARG_IN = 1 << 4,
    ARG_OUT = 1 << 5,
    ARG_INOUT = ARG_IN | ARG_OUT,
};

// Overload operator| so that Visual Studio won't complain
// when converting unsigned char to GjsArgumentFlags
GjsArgumentFlags operator|(GjsArgumentFlags const&, GjsArgumentFlags const&);

[[nodiscard]]
char* gjs_argument_display_name(const char* arg_name, GjsArgumentType);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_callback_out_arg(JSContext*, JS::HandleValue,
                                   const GI::ArgInfo, GIArgument*);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_to_explicit_array(JSContext*, JS::HandleValue,
                                 const GI::TypeInfo, const char* arg_name,
                                 GjsArgumentType, GITransfer, GjsArgumentFlags,
                                 void** contents, size_t* length_p);

size_t gjs_type_get_element_size(GITypeTag element_tag, const GI::TypeInfo);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_gi_argument(JSContext*, JS::HandleValue, const GI::TypeInfo,
                              GjsArgumentType, GITransfer, GIArgument*,
                              GjsArgumentFlags = GjsArgumentFlags::NONE,
                              const char* arg_name = nullptr);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_basic_gi_argument(JSContext*, JS::HandleValue, GITypeTag,
                                    GIArgument*, const char* arg_name,
                                    GjsArgumentType, GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_gerror_gi_argument(JSContext*, JS::HandleValue, GITransfer,
                                     GIArgument*, const char* arg_name,
                                     GjsArgumentType, GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_basic_glist_gi_argument(JSContext*, JS::HandleValue,
                                          GITypeTag element_tag, GIArgument*,
                                          const char* arg_name,
                                          GjsArgumentType);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_basic_gslist_gi_argument(JSContext*, JS::HandleValue,
                                           GITypeTag element_tag, GIArgument*,
                                           const char* arg_name,
                                           GjsArgumentType);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_basic_ghash_gi_argument(JSContext*, JS::HandleValue,
                                          GITypeTag key_tag,
                                          GITypeTag value_tag, GITransfer,
                                          GIArgument*, const char* arg_name,
                                          GjsArgumentType, GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_basic_array_gi_argument(JSContext*, JS::HandleValue,
                                          GITypeTag element_tag, GIArrayType,
                                          GIArgument*, const char* arg_name,
                                          GjsArgumentType, GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_byte_array_gi_argument(JSContext*, JS::HandleValue,
                                         GIArgument*, const char* arg_name,
                                         GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_to_basic_explicit_array(JSContext*, JS::HandleValue,
                                       GITypeTag element_tag,
                                       const char* arg_name, GjsArgumentType,
                                       GjsArgumentFlags, void** contents_out,
                                       size_t* length_out);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_gdk_atom_gi_argument(JSContext*, JS::HandleValue, GIArgument*,
                                       const char* arg_name, GjsArgumentType);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_to_interface_gi_argument(JSContext*, JS::HandleValue,
                                        const GI::BaseInfo interface_info,
                                        GITransfer, GIArgument*,
                                        const char* arg_name, GjsArgumentType,
                                        GjsArgumentFlags);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_gi_argument(JSContext*, JS::MutableHandleValue,
                                      GITypeTag, GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_gi_argument(JSContext*, JS::MutableHandleValue,
                                const GI::TypeInfo, GjsArgumentType, GITransfer,
                                GIArgument*);

GJS_JSAPI_RETURN_CONVENTION
inline bool gjs_value_from_gi_argument(JSContext* cx,
                                       JS::MutableHandleValue value_p,
                                       const GI::TypeInfo type_info,
                                       GIArgument* arg, bool copy_structs) {
    return gjs_value_from_gi_argument(
        cx, value_p, type_info, GJS_ARGUMENT_ARGUMENT,
        copy_structs ? GI_TRANSFER_EVERYTHING : GI_TRANSFER_NOTHING, arg);
}

GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_ghash(JSContext*, JS::MutableHandleValue,
                                GITypeTag key_tag, GITypeTag value_tag,
                                GHashTable*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_from_basic_glist_gi_argument(JSContext*, JS::MutableHandleValue,
                                            GITypeTag element_tag, GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_from_basic_gslist_gi_argument(JSContext*, JS::MutableHandleValue,
                                             GITypeTag element_tag,
                                             GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_from_basic_zero_terminated_array(JSContext*,
                                                JS::MutableHandleValue,
                                                GITypeTag element_tag,
                                                void* c_array);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_fixed_size_array_gi_argument(JSContext*,
                                                       JS::MutableHandleValue,
                                                       GITypeTag element_tag,
                                                       size_t fixed_size,
                                                       GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_explicit_array(JSContext*, JS::MutableHandleValue,
                                         GITypeTag element_tag, GIArgument*,
                                         size_t length);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_explicit_array(JSContext*, JS::MutableHandleValue,
                                   const GI::TypeInfo, GIArgument*,
                                   size_t length,
                                   GITransfer = GI_TRANSFER_EVERYTHING);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_byte_array_gi_argument(JSContext*, JS::MutableHandleValue,
                                           GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_garray_gi_argument(JSContext*, JS::MutableHandleValue,
                                             GITypeTag element_tag,
                                             GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_value_from_basic_gptrarray_gi_argument(JSContext*,
                                                JS::MutableHandleValue,
                                                GITypeTag element_tag,
                                                GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release(JSContext*, GITransfer, const GI::TypeInfo,
                             GIArgument*,
                             GjsArgumentFlags = GjsArgumentFlags::NONE);
void gjs_gi_argument_release_basic(GITransfer, GITypeTag, GjsArgumentFlags,
                                   GIArgument*);
void gjs_gi_argument_release_basic_glist(GITransfer, GITypeTag element_tag,
                                         GIArgument*);
void gjs_gi_argument_release_basic_gslist(GITransfer, GITypeTag element_tag,
                                          GIArgument*);
void gjs_gi_argument_release_basic_ghash(GITransfer, GITypeTag key_tag,
                                         GITypeTag value_tag, GIArgument*);
void gjs_gi_argument_release_basic_garray(GITransfer transfer,
                                          GITypeTag element_tag,
                                          GIArgument* arg);
void gjs_gi_argument_release_basic_gptrarray(GITransfer transfer,
                                             GITypeTag element_tag,
                                             GIArgument* arg);
void gjs_gi_argument_release_basic_c_array(GITransfer, GITypeTag element_tag,
                                           GIArgument*);
void gjs_gi_argument_release_basic_c_array(GITransfer, GITypeTag element_tag,
                                           size_t length, GIArgument*);
void gjs_gi_argument_release_basic_in_array(GITransfer, GITypeTag element_tag,
                                            GIArgument*);
void gjs_gi_argument_release_basic_in_array(GITransfer, GITypeTag element_tag,
                                            size_t length, GIArgument*);
void gjs_gi_argument_release_basic_out_array(GITransfer, GITypeTag element_tag,
                                             GIArgument*);
void gjs_gi_argument_release_basic_out_array(GITransfer, GITypeTag element_tag,
                                             size_t length, GIArgument*);
void gjs_gi_argument_release_byte_array(GIArgument* arg);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release_out_array(JSContext*, GITransfer,
                                       const GI::TypeInfo, size_t length,
                                       GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release_out_array(JSContext*, GITransfer,
                                       const GI::TypeInfo, GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release_in_array(JSContext*, GITransfer,
                                      const GI::TypeInfo, size_t length,
                                      GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release_in_array(JSContext*, GITransfer,
                                      const GI::TypeInfo, GIArgument*);
GJS_JSAPI_RETURN_CONVENTION
bool gjs_gi_argument_release_in_arg(JSContext*, GITransfer, const GI::TypeInfo,
                                    GIArgument*);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_flags_value_is_valid(JSContext*, GType, int64_t value);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_from_strv(JSContext*, JS::MutableHandleValue, const char** strv);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_to_strv(JSContext*, JS::Value array_value, unsigned length,
                       void** arr_p);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_array_from_g_value_array(JSContext*, JS::MutableHandleValue,
                                  const GI::TypeInfo param_info, GITransfer,
                                  const GValue*);

GJS_JSAPI_RETURN_CONVENTION
bool gjs_object_from_g_hash(JSContext*, JS::MutableHandleValue,
                            const GI::TypeInfo key_param_info,
                            const GI::TypeInfo val_param_info, GITransfer,
                            GHashTable*);