gobject-introspection 3.4.9 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/gobject-introspection/rb-gi-arg-info.c +44 -1
- data/ext/gobject-introspection/rb-gi-arguments-in.c +31 -24
- data/ext/gobject-introspection/rb-gi-arguments-out.c +17 -17
- data/ext/gobject-introspection/rb-gi-arguments.c +2054 -104
- data/ext/gobject-introspection/rb-gi-callable-info.c +2 -2
- data/ext/gobject-introspection/rb-gi-callback.c +33 -13
- data/ext/gobject-introspection/rb-gi-constant-info.c +14 -10
- data/ext/gobject-introspection/rb-gi-conversions.h +1 -23
- data/ext/gobject-introspection/rb-gi-field-info.c +77 -76
- data/ext/gobject-introspection/rb-gi-function-info.c +57 -16
- data/ext/gobject-introspection/rb-gi-private-arg-info.h +3 -1
- data/ext/gobject-introspection/rb-gi-private-arguments.h +21 -3
- data/ext/gobject-introspection/rb-gi-private.h +6 -3
- data/ext/gobject-introspection/rb-gobject-introspection.c +5 -225
- data/lib/gobject-introspection/function-info.rb +2 -2
- data/lib/gobject-introspection/loader.rb +149 -75
- data/lib/gobject-introspection/type-tag.rb +115 -123
- data/test/test-loader.rb +29 -1
- metadata +8 -12
- data/ext/gobject-introspection/gobject-introspection-enum-types.c +0 -230
- data/ext/gobject-introspection/gobject-introspection-enum-types.h +0 -42
- data/ext/gobject-introspection/rb-gi-argument.c +0 -2051
- data/ext/gobject-introspection/rbgiversion.h +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54062f046bb51a2e07d28faa23e18411b178410186c51ef6d5f233e4a9192af8
|
4
|
+
data.tar.gz: 83e81475c6625c0765a309bfaac9cde57e156a6916bdee19a29eb3b52eaeb0e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb439ff8c2eb5aead6a768ea4b68b65d9c7f6fa36c7fdc027ec3b184578eeb5471e81c45e752922cfdd1a2ecd4a752ffe111c0af89d96e1105e5a385f775550f
|
7
|
+
data.tar.gz: b285185c0bedfc226e8cefd3c31b929254dc33addf84756f5d83d9e01b3bb1a2c15da3d5600531159ab2e2dd1c27988e9146816fb30c12911c3cfa512b5e2ea1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2012-
|
3
|
+
* Copyright (C) 2012-2022 Ruby-GNOME Project Team
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -23,6 +23,41 @@
|
|
23
23
|
#define RG_TARGET_NAMESPACE rb_cGIArgInfo
|
24
24
|
#define SELF(self) (RVAL2GI_ARG_INFO(self))
|
25
25
|
|
26
|
+
gboolean
|
27
|
+
rb_gi_arg_info_is_input_buffer(GIArgInfo *info)
|
28
|
+
{
|
29
|
+
if (g_arg_info_get_direction(info) != GI_DIRECTION_IN) {
|
30
|
+
return FALSE;
|
31
|
+
}
|
32
|
+
|
33
|
+
/* Heuristic */
|
34
|
+
const gchar *name = g_base_info_get_name((GIBaseInfo *)info);
|
35
|
+
if (strcmp(name, "buffer") != 0) {
|
36
|
+
return FALSE;
|
37
|
+
}
|
38
|
+
|
39
|
+
GITypeInfo type_info;
|
40
|
+
g_arg_info_load_type(info, &type_info);
|
41
|
+
if (g_type_info_get_tag(&type_info) != GI_TYPE_TAG_ARRAY) {
|
42
|
+
return FALSE;
|
43
|
+
}
|
44
|
+
|
45
|
+
GIArrayType array_type = g_type_info_get_array_type(&type_info);
|
46
|
+
if (array_type != GI_ARRAY_TYPE_C) {
|
47
|
+
return FALSE;
|
48
|
+
}
|
49
|
+
|
50
|
+
gint length_index = g_type_info_get_array_length(&type_info);
|
51
|
+
if (length_index == -1) {
|
52
|
+
return FALSE;
|
53
|
+
}
|
54
|
+
|
55
|
+
GITypeInfo *element_type_info = g_type_info_get_param_type(&type_info, 0);
|
56
|
+
GITypeTag element_type_tag = g_type_info_get_tag(element_type_info);
|
57
|
+
g_base_info_unref(element_type_info);
|
58
|
+
return element_type_tag == GI_TYPE_TAG_UINT8;
|
59
|
+
}
|
60
|
+
|
26
61
|
gboolean
|
27
62
|
rb_gi_arg_info_is_output_buffer(GIArgInfo *info)
|
28
63
|
{
|
@@ -148,6 +183,13 @@ rg_type(VALUE self)
|
|
148
183
|
return GI_BASE_INFO2RVAL_WITH_UNREF(g_arg_info_get_type(info));
|
149
184
|
}
|
150
185
|
|
186
|
+
static VALUE
|
187
|
+
rg_input_buffer_p(VALUE self)
|
188
|
+
{
|
189
|
+
GIArgInfo *info = SELF(self);
|
190
|
+
return CBOOL2RVAL(rb_gi_arg_info_is_input_buffer(info));
|
191
|
+
}
|
192
|
+
|
151
193
|
static VALUE
|
152
194
|
rg_output_buffer_p(VALUE self)
|
153
195
|
{
|
@@ -175,6 +217,7 @@ rb_gi_arg_info_init(VALUE rb_mGI, VALUE rb_cGIBaseInfo)
|
|
175
217
|
RG_DEF_METHOD(destroy, 0);
|
176
218
|
RG_DEF_METHOD(type, 0);
|
177
219
|
|
220
|
+
RG_DEF_METHOD_P(input_buffer, 0);
|
178
221
|
RG_DEF_METHOD_P(output_buffer, 0);
|
179
222
|
|
180
223
|
G_DEF_CLASS(G_TYPE_I_DIRECTION, "Direction", rb_mGI);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2012-
|
3
|
+
* Copyright (C) 2012-2022 Ruby-GNOME Project Team
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -36,7 +36,6 @@ rb_gi_arguments_in_to_ruby(RBGIArguments *args)
|
|
36
36
|
rb_in_args = rb_ary_new_capa(args->metadata->len);
|
37
37
|
for (i = 0; i < args->metadata->len; i++) {
|
38
38
|
RBGIArgMetadata *metadata;
|
39
|
-
GITypeInfo *type_info;
|
40
39
|
VALUE rb_arg;
|
41
40
|
|
42
41
|
metadata = g_ptr_array_index(args->metadata, i);
|
@@ -47,15 +46,14 @@ rb_gi_arguments_in_to_ruby(RBGIArguments *args)
|
|
47
46
|
if (metadata->closure_p) {
|
48
47
|
continue;
|
49
48
|
}
|
49
|
+
if (metadata->array_length_p) {
|
50
|
+
continue;
|
51
|
+
}
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
type_info,
|
56
|
-
args->in_args,
|
57
|
-
args->out_args,
|
58
|
-
args->metadata);
|
53
|
+
rb_arg = rb_gi_arguments_convert_arg(args,
|
54
|
+
metadata->in_arg,
|
55
|
+
metadata,
|
56
|
+
FALSE);
|
59
57
|
rb_ary_push(rb_in_args, rb_arg);
|
60
58
|
}
|
61
59
|
|
@@ -1203,10 +1201,14 @@ rb_gi_arguments_in_init_arg_ruby_interface(RBGIArguments *args,
|
|
1203
1201
|
rb_gi_arguments_in_free_interface_struct_gbytes;
|
1204
1202
|
}
|
1205
1203
|
} else if (metadata->type.interface_gtype == G_TYPE_CLOSURE) {
|
1206
|
-
GClosure *rclosure = NULL;
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1204
|
+
GClosure *rclosure = g_rclosure_new(metadata->rb_arg, Qnil, NULL);
|
1205
|
+
if (RVAL2CBOOL(rb_obj_is_kind_of(args->rb_receiver,
|
1206
|
+
rbg_cGLibObject()))) {
|
1207
|
+
g_rclosure_attach_gobject(rclosure, args->rb_receiver);
|
1208
|
+
g_closure_unref(rclosure);
|
1209
|
+
} else {
|
1210
|
+
g_rclosure_attach(rclosure, args->rb_receiver);
|
1211
|
+
}
|
1210
1212
|
metadata->in_arg->v_pointer = rclosure;
|
1211
1213
|
} else {
|
1212
1214
|
metadata->in_arg->v_pointer =
|
@@ -1503,7 +1505,7 @@ rb_gi_arguments_in_init_arg_ruby_ghash_convert(VALUE rb_key,
|
|
1503
1505
|
data->key_ruby_to_c_data->rb_value = rb_key;
|
1504
1506
|
key = data->key_ruby_to_c_func(data->key_ruby_to_c_data);
|
1505
1507
|
data->value_ruby_to_c_data->rb_value = rb_value;
|
1506
|
-
value = data->
|
1508
|
+
value = data->value_ruby_to_c_func(data->value_ruby_to_c_data);
|
1507
1509
|
g_hash_table_insert(data->hash_table, key, value);
|
1508
1510
|
return ST_CONTINUE;
|
1509
1511
|
}
|
@@ -2023,16 +2025,18 @@ rb_gi_arguments_in_init_arg_raw_interface(RBGIArguments *args,
|
|
2023
2025
|
metadata->in_arg->v_pointer = *((gpointer *)(args->raw_args[metadata->index]));
|
2024
2026
|
break;
|
2025
2027
|
case GI_INFO_TYPE_BOXED:
|
2028
|
+
rb_raise(rb_eNotImpError,
|
2029
|
+
"TODO: %s::%s: raw argument -> GIArgument(interface)[%s]: <%s>",
|
2030
|
+
g_base_info_get_namespace(args->info),
|
2031
|
+
g_base_info_get_name(args->info),
|
2032
|
+
g_info_type_to_string(metadata->type.interface_type),
|
2033
|
+
g_base_info_get_name(metadata->type.interface_info));
|
2034
|
+
break;
|
2026
2035
|
case GI_INFO_TYPE_ENUM:
|
2027
|
-
|
2028
|
-
|
2029
|
-
g_base_info_get_namespace(args->info),
|
2030
|
-
g_base_info_get_name(args->info),
|
2031
|
-
g_info_type_to_string(metadata->type.interface_type),
|
2032
|
-
g_base_info_get_name(metadata->type.interface_info));
|
2033
|
-
break;
|
2036
|
+
metadata->in_arg->v_int32 = *((gint32 *)(args->raw_args[metadata->index]));
|
2037
|
+
break;
|
2034
2038
|
case GI_INFO_TYPE_FLAGS:
|
2035
|
-
metadata->in_arg->v_int32= *((gint32 *)(args->raw_args[metadata->index]));
|
2039
|
+
metadata->in_arg->v_int32 = *((gint32 *)(args->raw_args[metadata->index]));
|
2036
2040
|
break;
|
2037
2041
|
case GI_INFO_TYPE_OBJECT:
|
2038
2042
|
case GI_INFO_TYPE_INTERFACE:
|
@@ -2164,12 +2168,15 @@ rb_gi_arguments_in_init(RBGIArguments *args)
|
|
2164
2168
|
void
|
2165
2169
|
rb_gi_arguments_in_clear(RBGIArguments *args)
|
2166
2170
|
{
|
2167
|
-
|
2171
|
+
if (!args->metadata) {
|
2172
|
+
return;
|
2173
|
+
}
|
2168
2174
|
|
2169
2175
|
if (!args->rb_mode_p) {
|
2170
2176
|
return;
|
2171
2177
|
}
|
2172
2178
|
|
2179
|
+
guint i;
|
2173
2180
|
for (i = 0; i < args->metadata->len; i++) {
|
2174
2181
|
RBGIArgMetadata *metadata;
|
2175
2182
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2012-
|
3
|
+
* Copyright (C) 2012-2022 Ruby-GNOME Project Team
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -140,6 +140,7 @@ rb_gi_arguments_out_free_array_array_interface_struct(RBGIArguments *args,
|
|
140
140
|
*/
|
141
141
|
break;
|
142
142
|
}
|
143
|
+
G_GNUC_FALLTHROUGH;
|
143
144
|
default:
|
144
145
|
rb_raise(rb_eNotImpError,
|
145
146
|
"TODO: [%s] %s free GIArgument(%s/%s)[interface(%s)](%s)[%s]",
|
@@ -150,6 +151,7 @@ rb_gi_arguments_out_free_array_array_interface_struct(RBGIArguments *args,
|
|
150
151
|
g_info_type_to_string(metadata->element_type.interface_type),
|
151
152
|
g_type_name(metadata->element_type.interface_gtype),
|
152
153
|
rb_gi_transfer_to_string(metadata->transfer));
|
154
|
+
break;
|
153
155
|
}
|
154
156
|
g_array_free(target, TRUE);
|
155
157
|
}
|
@@ -264,14 +266,6 @@ rb_gi_arguments_out_free_error(RBGIArguments *args,
|
|
264
266
|
gpointer user_data)
|
265
267
|
{
|
266
268
|
GError **target = metadata->out_arg->v_pointer;
|
267
|
-
if (metadata->transfer != GI_TRANSFER_NOTHING) {
|
268
|
-
rb_raise(rb_eNotImpError,
|
269
|
-
"TODO: [%s] %s free GIArgument(%s)[%s]",
|
270
|
-
metadata->name,
|
271
|
-
rb_gi_direction_to_string(metadata->direction),
|
272
|
-
g_type_tag_to_string(metadata->type.tag),
|
273
|
-
rb_gi_transfer_to_string(metadata->transfer));
|
274
|
-
}
|
275
269
|
xfree(target);
|
276
270
|
}
|
277
271
|
|
@@ -315,7 +309,12 @@ rb_gi_arguments_out_init_arg_array_c(RBGIArguments *args,
|
|
315
309
|
rb_gi_transfer_to_string(metadata->transfer));
|
316
310
|
}
|
317
311
|
argument->v_pointer = RSTRING_PTR(metadata->rb_arg);
|
318
|
-
|
312
|
+
if (length_metadata->in_arg) {
|
313
|
+
length_metadata->in_arg->v_size = RSTRING_LEN(metadata->rb_arg);
|
314
|
+
}
|
315
|
+
if (length_metadata->out_arg) {
|
316
|
+
length_metadata->out_arg->v_size = RSTRING_LEN(metadata->rb_arg);
|
317
|
+
}
|
319
318
|
} else {
|
320
319
|
argument->v_pointer = ALLOC(guint8 *);
|
321
320
|
metadata->free_func = rb_gi_arguments_out_free_array_c_uint8;
|
@@ -788,8 +787,11 @@ rb_gi_arguments_out_init(RBGIArguments *args)
|
|
788
787
|
void
|
789
788
|
rb_gi_arguments_out_clear(RBGIArguments *args)
|
790
789
|
{
|
791
|
-
|
790
|
+
if (!args->metadata) {
|
791
|
+
return;
|
792
|
+
}
|
792
793
|
|
794
|
+
guint i;
|
793
795
|
for (i = 0; i < args->metadata->len; i++) {
|
794
796
|
RBGIArgMetadata *metadata;
|
795
797
|
|
@@ -887,12 +889,10 @@ rb_gi_arguments_out_to_ruby_arg(RBGIArguments *args,
|
|
887
889
|
break;
|
888
890
|
}
|
889
891
|
|
890
|
-
return
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
args->out_args,
|
895
|
-
args->metadata);
|
892
|
+
return rb_gi_arguments_convert_arg(args,
|
893
|
+
&normalized_argument,
|
894
|
+
metadata,
|
895
|
+
duplicate);
|
896
896
|
}
|
897
897
|
|
898
898
|
VALUE
|