gobject-introspection 4.0.3 → 4.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8022e622d198838f9adae24c76abf4d0ff9add43e98a23b1d71b0239eb5c63f1
4
- data.tar.gz: faf42ad29ca80ee31e82398e6f82badd2bbea63d82f50411883e7058f52e7adf
3
+ metadata.gz: 38e9d956b4a2b12d6b7f18e524907f137ea691ed0ae4c627b5a74882754e9e64
4
+ data.tar.gz: 4252e224a2f62af1230489d73d66a1ecaba5ee4cb9de47cda8a33449da0b6b2d
5
5
  SHA512:
6
- metadata.gz: 5fb1a3eb51518856fe39631a485bffcfd72ba95d323d66646bbed280e47e0126bffafcbca4aee2c6f79e35cd2bdc6c9bba938bf41c3c22ed78de3e649f807d6c
7
- data.tar.gz: 5e1c3119edf742e6a0f53cf1c057f1b5cc89c1361834ba5918ba614d44b60f9399bff0803a826b03efe8d904651ad0ed0f1529c6e52131b29916e3020e6c8805
6
+ metadata.gz: 01de3b7cfbe851ee07426b2f65d664bb93e2ae092181c5fc88cf9d8f09885ea52e0c5f5b47b2b0e8c4ab6e48b973c6a14661fcd48ed3d114ef343c8f4474f59e
7
+ data.tar.gz: d359bbcfc24ccd0b4886dedd2b38bcb5633779c5ef5a79303729bdcfc9418da893a06472a12de5ad0e020e0df607eb5959023d127a407660885c892873f0f008
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (C) 2012-2021 Ruby-GNOME Project Team
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
@@ -76,6 +76,81 @@ create_pkg_config_file("Ruby/GObjectIntrospection",
76
76
  ensure_objs
77
77
 
78
78
  $defs << "-DRUBY_GOBJECT_INTROSPECTION_COMPILATION"
79
+ case RUBY_PLATFORM
80
+ when /darwin/
81
+ symbols_in_external_bundles = [
82
+ "_g_rclosure_attach",
83
+ "_g_rclosure_attach_gobject",
84
+ "_g_rclosure_new",
85
+ "_g_signal_flags_get_type",
86
+ "_rbg_cGLibObject",
87
+ "_rbg_cstr2rval",
88
+ "_rbg_cstr2rval_free",
89
+ "_rbg_define_method",
90
+ "_rbg_define_singleton_method",
91
+ "_rbg_filename_from_ruby",
92
+ "_rbg_filename_to_ruby",
93
+ "_rbg_glist2rval",
94
+ "_rbg_glist2rval_with_type",
95
+ "_rbg_gslist2rval",
96
+ "_rbg_gslist2rval_with_type",
97
+ "_rbg_inspect",
98
+ "_rbg_is_bytes",
99
+ "_rbg_is_object",
100
+ "_rbg_is_value",
101
+ "_rbg_mGLib",
102
+ "_rbg_rval2cstr",
103
+ "_rbg_rval2cstr_accept_nil",
104
+ "_rbg_rval2cstr_accept_symbol",
105
+ "_rbg_rval2filenamev",
106
+ "_rbg_rval2glist",
107
+ "_rbg_rval2gslist",
108
+ "_rbg_rval2strv",
109
+ "_rbg_rval2strv_dup",
110
+ "_rbg_scan_options",
111
+ "_rbg_strv2rval",
112
+ "_rbg_to_array",
113
+ "_rbg_variant_from_ruby",
114
+ "_rbg_variant_to_ruby",
115
+ "_rbgerr_define_gerror",
116
+ "_rbgerr_gerror2exception",
117
+ "_rbgerr_ruby_error_quark",
118
+ "_rbgobj_add_relative",
119
+ "_rbgobj_boxed_get",
120
+ "_rbgobj_boxed_unown",
121
+ "_rbgobj_constant_remap",
122
+ "_rbgobj_convert_define",
123
+ "_rbgobj_define_class",
124
+ "_rbgobj_get_enum",
125
+ "_rbgobj_get_flags",
126
+ "_rbgobj_get_ruby_object_from_gobject",
127
+ "_rbgobj_gobject_initialize",
128
+ "_rbgobj_gtype_from_ruby",
129
+ "_rbgobj_gtype_new",
130
+ "_rbgobj_initialize_gvalue",
131
+ "_rbgobj_initialize_object",
132
+ "_rbgobj_instance_from_ruby_object",
133
+ "_rbgobj_instance_unref",
134
+ "_rbgobj_lookup_class",
135
+ "_rbgobj_make_boxed",
136
+ "_rbgobj_make_boxed_default",
137
+ "_rbgobj_make_boxed_raw",
138
+ "_rbgobj_make_enum",
139
+ "_rbgobj_make_flags",
140
+ "_rbgobj_object_add_relative",
141
+ "_rbgobj_object_alloc_func",
142
+ "_rbgobj_object_remove_relative",
143
+ "_rbgobj_remove_relative",
144
+ "_rbgobj_ruby_object_from_instance",
145
+ "_rbgobj_ruby_object_from_instance2",
146
+ "_rbgutil_invoke_callback",
147
+ "_rbgutil_on_callback_error",
148
+ "_rbgutil_start_callback_dispatch_thread",
149
+ ]
150
+ symbols_in_external_bundles.each do |symbol|
151
+ $DLDFLAGS << " -Wl,-U,#{symbol}"
152
+ end
153
+ end
79
154
  create_makefile(module_name)
80
155
 
81
156
  pkg_config_dir = with_config("pkg-config-dir")
@@ -135,6 +135,15 @@ rb_gi_arg_metadata_init_type_info(RBGIArgMetadata *metadata,
135
135
  }
136
136
  }
137
137
 
138
+ void
139
+ rb_gi_arg_metadata_init_struct_info(RBGIArgMetadata *metadata,
140
+ GIStructInfo *struct_info,
141
+ gpointer struct_memory)
142
+ {
143
+ metadata->struct_info = struct_info;
144
+ metadata->struct_memory = struct_memory;
145
+ }
146
+
138
147
  static RBGIArgMetadata *
139
148
  rb_gi_arg_metadata_new(GICallableInfo *callable_info, gint i)
140
149
  {
@@ -144,6 +153,8 @@ rb_gi_arg_metadata_new(GICallableInfo *callable_info, gint i)
144
153
  GIArgInfo *arg_info = &(metadata->arg_info);
145
154
  g_callable_info_load_arg(callable_info, i, arg_info);
146
155
  metadata->name = g_base_info_get_name(arg_info);
156
+ metadata->struct_info = NULL;
157
+ metadata->struct_memory = NULL;
147
158
  metadata->index = i;
148
159
 
149
160
  rb_gi_arg_metadata_init_type_info(metadata,
@@ -408,8 +419,23 @@ static void
408
419
  rb_gi_arguments_metadata_free(gpointer data)
409
420
  {
410
421
  RBGIArgMetadata *metadata = data;
411
- if (metadata->scope_type == GI_SCOPE_TYPE_ASYNC ||
412
- metadata->scope_type == GI_SCOPE_TYPE_NOTIFIED) {
422
+ if (metadata->scope_type == GI_SCOPE_TYPE_ASYNC) {
423
+ /* We can't free async scope argument's metadata immediately
424
+ * because async scope argument is called later and it uses its
425
+ * metadata. Its metadata is freed when async scope argument is called.
426
+ *
427
+ * Exception: We can free GDestroyNotify's metadata
428
+ * immediately because GDestroyNotify is only used in
429
+ * Ruby/GObjectIntrospection and Ruby/GObjectIntorspection
430
+ * doesn't use GDestroyNotify's metadata. */
431
+ if (!metadata->destroy_p) {
432
+ return;
433
+ }
434
+ }
435
+ /* We can't free notified scope argument's metadata immediately
436
+ * because notified scope argument is called later and it uses its
437
+ * metadata. Its metadata is freed when its GDestroyNotify is called. */
438
+ if (metadata->scope_type == GI_SCOPE_TYPE_NOTIFIED) {
413
439
  return;
414
440
  }
415
441
  rb_gi_arg_metadata_free(metadata);
@@ -656,6 +682,156 @@ rb_gi_arguments_convert_arg_array_like_ensure(VALUE user_data)
656
682
  return Qnil;
657
683
  }
658
684
 
685
+ static gint64
686
+ rb_gi_arguments_convert_arg_array_body_extract_length(GIArgument *arg,
687
+ RBGIArgMetadata *metadata,
688
+ gboolean is_pointer)
689
+ {
690
+ switch (metadata->type.tag) {
691
+ case GI_TYPE_TAG_VOID:
692
+ case GI_TYPE_TAG_BOOLEAN:
693
+ rb_raise(rb_eNotImpError,
694
+ "TODO: invalid out array length argument?: <%s>",
695
+ g_type_tag_to_string(metadata->type.tag));
696
+ return -1;
697
+ case GI_TYPE_TAG_INT8:
698
+ if (is_pointer) {
699
+ return *((gint8 *)arg->v_pointer);
700
+ } else {
701
+ return arg->v_int8;
702
+ }
703
+ case GI_TYPE_TAG_UINT8:
704
+ if (is_pointer) {
705
+ return *((guint8 *)arg->v_pointer);
706
+ } else {
707
+ return arg->v_uint8;
708
+ }
709
+ case GI_TYPE_TAG_INT16:
710
+ if (is_pointer) {
711
+ return *((gint16 *)arg->v_pointer);
712
+ } else {
713
+ return arg->v_int16;
714
+ }
715
+ case GI_TYPE_TAG_UINT16:
716
+ if (is_pointer) {
717
+ return *((guint16 *)arg->v_pointer);
718
+ } else {
719
+ return arg->v_uint16;
720
+ }
721
+ case GI_TYPE_TAG_INT32:
722
+ if (is_pointer) {
723
+ return *((gint32 *)arg->v_pointer);
724
+ } else {
725
+ return arg->v_int32;
726
+ }
727
+ case GI_TYPE_TAG_UINT32:
728
+ if (is_pointer) {
729
+ return *((guint32 *)arg->v_pointer);
730
+ } else {
731
+ return arg->v_uint32;
732
+ }
733
+ case GI_TYPE_TAG_INT64:
734
+ if (is_pointer) {
735
+ return *((gint64 *)arg->v_pointer);
736
+ } else {
737
+ return arg->v_int64;
738
+ }
739
+ case GI_TYPE_TAG_UINT64:
740
+ if (is_pointer) {
741
+ return *((guint64 *)arg->v_pointer);
742
+ } else {
743
+ return arg->v_uint64;
744
+ }
745
+ case GI_TYPE_TAG_FLOAT:
746
+ case GI_TYPE_TAG_DOUBLE:
747
+ case GI_TYPE_TAG_GTYPE:
748
+ case GI_TYPE_TAG_UTF8:
749
+ case GI_TYPE_TAG_FILENAME:
750
+ case GI_TYPE_TAG_ARRAY:
751
+ case GI_TYPE_TAG_INTERFACE:
752
+ case GI_TYPE_TAG_GLIST:
753
+ case GI_TYPE_TAG_GSLIST:
754
+ case GI_TYPE_TAG_GHASH:
755
+ case GI_TYPE_TAG_ERROR:
756
+ case GI_TYPE_TAG_UNICHAR:
757
+ rb_raise(rb_eNotImpError,
758
+ "TODO: invalid out array length argument?: <%s>",
759
+ g_type_tag_to_string(metadata->type.tag));
760
+ return -1;
761
+ default:
762
+ g_assert_not_reached();
763
+ return -1;
764
+ }
765
+ }
766
+
767
+ static gint64
768
+ rb_gi_arguments_convert_arg_array_body_get_length(ArrayLikeToRubyData *data)
769
+ {
770
+ GITypeInfo *type_info = data->arg_metadata->type_info;
771
+ gint length_index = g_type_info_get_array_length(type_info);
772
+ if (length_index == -1) {
773
+ return -1;
774
+ }
775
+
776
+ if (!data->args->metadata && data->arg_metadata->struct_info) {
777
+ GIFieldInfo *field_info =
778
+ g_struct_info_get_field(data->arg_metadata->struct_info,
779
+ length_index);
780
+ GIArgument value;
781
+ g_field_info_get_field(field_info,
782
+ data->arg_metadata->struct_memory,
783
+ &value);
784
+ RBGIArgMetadata length_metadata;
785
+ GITypeInfo *length_type_info = g_field_info_get_type(field_info);
786
+ rb_gi_arg_metadata_init_type_info(&length_metadata, length_type_info);
787
+ rb_gi_arg_metadata_init_struct_info(&length_metadata,
788
+ data->arg_metadata->struct_info,
789
+ data->arg_metadata->struct_memory);
790
+ int64_t length =
791
+ rb_gi_arguments_convert_arg_array_body_extract_length(
792
+ &value,
793
+ &length_metadata,
794
+ FALSE);
795
+ /* TODO: Use ensure */
796
+ rb_gi_arg_metadata_clear(&length_metadata);
797
+ g_base_info_unref(field_info);
798
+ return length;
799
+ }
800
+
801
+ GIArgument *length_arg = NULL;
802
+ RBGIArgMetadata *length_metadata =
803
+ g_ptr_array_index(data->args->metadata, length_index);
804
+ if (length_metadata->direction == GI_DIRECTION_OUT) {
805
+ length_arg = &g_array_index(data->args->out_args,
806
+ GIArgument,
807
+ length_metadata->out_arg_index);
808
+ } else if (length_metadata->direction == GI_DIRECTION_INOUT) {
809
+ length_arg = &g_array_index(data->args->in_args,
810
+ GIArgument,
811
+ length_metadata->in_arg_index);
812
+ }
813
+
814
+ if (length_arg) {
815
+ gboolean is_pointer =
816
+ !(length_metadata->array_metadata &&
817
+ length_metadata->array_metadata->output_buffer_p);
818
+ return
819
+ rb_gi_arguments_convert_arg_array_body_extract_length(
820
+ length_arg,
821
+ length_metadata,
822
+ is_pointer);
823
+ } else {
824
+ length_arg = &g_array_index(data->args->in_args,
825
+ GIArgument,
826
+ length_metadata->in_arg_index);
827
+ return
828
+ rb_gi_arguments_convert_arg_array_body_extract_length(
829
+ length_arg,
830
+ length_metadata,
831
+ FALSE);
832
+ }
833
+ }
834
+
659
835
  static VALUE
660
836
  rb_gi_arguments_convert_arg_array_body_c_sized_interface(
661
837
  ArrayLikeToRubyData *data,
@@ -1115,135 +1291,19 @@ rb_gi_arguments_convert_arg_array_body_array(ArrayLikeToRubyData *data)
1115
1291
  }
1116
1292
  }
1117
1293
 
1118
- static gint64
1119
- rb_gi_arguments_convert_arg_array_body_extract_length(GIArgument *arg,
1120
- RBGIArgMetadata *metadata,
1121
- gboolean is_pointer)
1122
- {
1123
- switch (metadata->type.tag) {
1124
- case GI_TYPE_TAG_VOID:
1125
- case GI_TYPE_TAG_BOOLEAN:
1126
- rb_raise(rb_eNotImpError,
1127
- "TODO: invalid out array length argument?: <%s>",
1128
- g_type_tag_to_string(metadata->type.tag));
1129
- return -1;
1130
- case GI_TYPE_TAG_INT8:
1131
- if (is_pointer) {
1132
- return *((gint8 *)arg->v_pointer);
1133
- } else {
1134
- return arg->v_int8;
1135
- }
1136
- case GI_TYPE_TAG_UINT8:
1137
- if (is_pointer) {
1138
- return *((guint8 *)arg->v_pointer);
1139
- } else {
1140
- return arg->v_uint8;
1141
- }
1142
- case GI_TYPE_TAG_INT16:
1143
- if (is_pointer) {
1144
- return *((gint16 *)arg->v_pointer);
1145
- } else {
1146
- return arg->v_int16;
1147
- }
1148
- case GI_TYPE_TAG_UINT16:
1149
- if (is_pointer) {
1150
- return *((guint16 *)arg->v_pointer);
1151
- } else {
1152
- return arg->v_uint16;
1153
- }
1154
- case GI_TYPE_TAG_INT32:
1155
- if (is_pointer) {
1156
- return *((gint32 *)arg->v_pointer);
1157
- } else {
1158
- return arg->v_int32;
1159
- }
1160
- case GI_TYPE_TAG_UINT32:
1161
- if (is_pointer) {
1162
- return *((guint32 *)arg->v_pointer);
1163
- } else {
1164
- return arg->v_uint32;
1165
- }
1166
- case GI_TYPE_TAG_INT64:
1167
- if (is_pointer) {
1168
- return *((gint64 *)arg->v_pointer);
1169
- } else {
1170
- return arg->v_int64;
1171
- }
1172
- case GI_TYPE_TAG_UINT64:
1173
- if (is_pointer) {
1174
- return *((guint64 *)arg->v_pointer);
1175
- } else {
1176
- return arg->v_uint64;
1177
- }
1178
- case GI_TYPE_TAG_FLOAT:
1179
- case GI_TYPE_TAG_DOUBLE:
1180
- case GI_TYPE_TAG_GTYPE:
1181
- case GI_TYPE_TAG_UTF8:
1182
- case GI_TYPE_TAG_FILENAME:
1183
- case GI_TYPE_TAG_ARRAY:
1184
- case GI_TYPE_TAG_INTERFACE:
1185
- case GI_TYPE_TAG_GLIST:
1186
- case GI_TYPE_TAG_GSLIST:
1187
- case GI_TYPE_TAG_GHASH:
1188
- case GI_TYPE_TAG_ERROR:
1189
- case GI_TYPE_TAG_UNICHAR:
1190
- rb_raise(rb_eNotImpError,
1191
- "TODO: invalid out array length argument?: <%s>",
1192
- g_type_tag_to_string(metadata->type.tag));
1193
- return -1;
1194
- default:
1195
- g_assert_not_reached();
1196
- return -1;
1197
- }
1198
- }
1199
-
1200
1294
  static VALUE
1201
1295
  rb_gi_arguments_convert_arg_array_body(VALUE user_data)
1202
1296
  {
1203
1297
  ArrayLikeToRubyData *data = (ArrayLikeToRubyData *)user_data;
1204
1298
  GITypeInfo *type_info = data->arg_metadata->type_info;
1205
-
1206
- gint length_index = g_type_info_get_array_length(type_info);
1207
- gint64 length = -1;
1208
- if (length_index != -1) {
1209
- GIArgument *length_arg = NULL;
1210
- RBGIArgMetadata *length_metadata =
1211
- g_ptr_array_index(data->args->metadata, length_index);
1212
- if (length_metadata->direction == GI_DIRECTION_OUT) {
1213
- length_arg = &g_array_index(data->args->out_args,
1214
- GIArgument,
1215
- length_metadata->out_arg_index);
1216
- } else if (length_metadata->direction == GI_DIRECTION_INOUT) {
1217
- length_arg = &g_array_index(data->args->in_args,
1218
- GIArgument,
1219
- length_metadata->in_arg_index);
1220
- }
1221
-
1222
- if (length_arg) {
1223
- gboolean is_pointer =
1224
- !(length_metadata->array_metadata &&
1225
- length_metadata->array_metadata->output_buffer_p);
1226
- length =
1227
- rb_gi_arguments_convert_arg_array_body_extract_length(
1228
- length_arg,
1229
- length_metadata,
1230
- is_pointer);
1231
- } else {
1232
- length_arg = &g_array_index(data->args->in_args,
1233
- GIArgument,
1234
- length_metadata->in_arg_index);
1235
- length =
1236
- rb_gi_arguments_convert_arg_array_body_extract_length(
1237
- length_arg,
1238
- length_metadata,
1239
- FALSE);
1240
- }
1241
- }
1242
-
1243
1299
  GIArrayType array_type = g_type_info_get_array_type(type_info);
1244
1300
  switch (array_type) {
1245
1301
  case GI_ARRAY_TYPE_C:
1246
- return rb_gi_arguments_convert_arg_array_body_c(data, length);
1302
+ {
1303
+ gint64 length =
1304
+ rb_gi_arguments_convert_arg_array_body_get_length(data);
1305
+ return rb_gi_arguments_convert_arg_array_body_c(data, length);
1306
+ }
1247
1307
  case GI_ARRAY_TYPE_ARRAY:
1248
1308
  return rb_gi_arguments_convert_arg_array_body_array(data);
1249
1309
  case GI_ARRAY_TYPE_PTR_ARRAY:
@@ -1711,11 +1771,13 @@ rb_gi_arguments_convert_arg_ghash(RBGIArguments *args,
1711
1771
  RBGIArgMetadata key_metadata;
1712
1772
  rb_gi_arg_metadata_init_type_info(&key_metadata,
1713
1773
  g_type_info_get_param_type(type_info, 0));
1774
+ rb_gi_arg_metadata_init_struct_info(&key_metadata, NULL, NULL);
1714
1775
  data.key_metadata = &key_metadata;
1715
1776
 
1716
1777
  RBGIArgMetadata value_metadata;
1717
1778
  rb_gi_arg_metadata_init_type_info(&value_metadata,
1718
1779
  g_type_info_get_param_type(type_info, 1));
1780
+ rb_gi_arg_metadata_init_struct_info(&value_metadata, NULL, NULL);
1719
1781
  data.value_metadata = &value_metadata;
1720
1782
 
1721
1783
  return rb_ensure(rb_gi_arguments_convert_arg_ghash_body, (VALUE)&data,
@@ -2408,6 +2470,7 @@ rb_gi_arguments_convert_return_value(RBGIArguments *args,
2408
2470
  RBGIArgMetadata metadata;
2409
2471
  GITypeInfo *return_value_info = g_callable_info_get_return_type(args->info);
2410
2472
  rb_gi_arg_metadata_init_type_info(&metadata, return_value_info);
2473
+ rb_gi_arg_metadata_init_struct_info(&metadata, NULL, NULL);
2411
2474
  data.metadata = &metadata;
2412
2475
 
2413
2476
  return rb_ensure(rb_gi_arguments_convert_return_value_body, (VALUE)&data,
@@ -56,6 +56,7 @@ rg_value(VALUE self)
56
56
  RBGIArgMetadata value_metadata;
57
57
  rb_gi_arg_metadata_init_type_info(&value_metadata,
58
58
  g_constant_info_get_type(info));
59
+ rb_gi_arg_metadata_init_struct_info(&value_metadata, NULL, NULL);
59
60
  VALUE rb_value = rb_gi_arguments_convert_arg(&args,
60
61
  &value,
61
62
  &value_metadata,
@@ -232,12 +232,15 @@ rb_gi_field_info_get_field_raw_ensure(VALUE user_data)
232
232
  }
233
233
 
234
234
  VALUE
235
- rb_gi_field_info_get_field_raw(GIFieldInfo *info, gpointer memory)
235
+ rb_gi_field_info_get_field_raw(GIFieldInfo *info,
236
+ GIStructInfo *struct_info,
237
+ gpointer memory)
236
238
  {
237
239
  FieldToRubyData data;
238
240
  rb_gi_arguments_init(&(data.args), NULL, Qnil, Qnil, NULL);
239
241
  GITypeInfo *type_info = g_field_info_get_type(info);
240
242
  rb_gi_arg_metadata_init_type_info(&(data.metadata), type_info);
243
+ rb_gi_arg_metadata_init_struct_info(&(data.metadata), struct_info, memory);
241
244
  data.info = info;
242
245
  data.memory = memory;
243
246
 
@@ -246,7 +249,10 @@ rb_gi_field_info_get_field_raw(GIFieldInfo *info, gpointer memory)
246
249
  }
247
250
 
248
251
  void
249
- rb_gi_field_info_set_field_raw(GIFieldInfo *info, gpointer memory,
252
+ rb_gi_field_info_set_field_raw(GIFieldInfo *info,
253
+ /* TODO: Use this to set length field. */
254
+ GIStructInfo *struct_info,
255
+ gpointer memory,
250
256
  VALUE rb_field_value)
251
257
  {
252
258
  gint offset;
@@ -444,26 +450,24 @@ rb_gi_field_info_set_field_raw(GIFieldInfo *info, gpointer memory,
444
450
  }
445
451
 
446
452
  static VALUE
447
- rg_get_field(VALUE self, VALUE rb_memory)
453
+ rg_get_field(VALUE self, VALUE rb_struct_info, VALUE rb_memory)
448
454
  {
449
- GIFieldInfo *info;
450
- gpointer memory;
451
-
452
- info = SELF(self);
453
- memory = GUINT_TO_POINTER(NUM2ULONG(rb_memory));
454
- return rb_gi_field_info_get_field_raw(info, memory);
455
+ GIFieldInfo *info = SELF(self);
456
+ GIStructInfo *struct_info = RVAL2GI_STRUCT_INFO(rb_struct_info);
457
+ gpointer memory = GUINT_TO_POINTER(NUM2ULONG(rb_memory));
458
+ return rb_gi_field_info_get_field_raw(info, struct_info, memory);
455
459
  }
456
460
 
457
461
  static VALUE
458
- rg_set_field(VALUE self, VALUE rb_memory, VALUE rb_field_value)
462
+ rg_set_field(VALUE self,
463
+ VALUE rb_struct_info,
464
+ VALUE rb_memory,
465
+ VALUE rb_field_value)
459
466
  {
460
- GIFieldInfo *info;
461
- gpointer memory;
462
-
463
- info = SELF(self);
464
- memory = GUINT_TO_POINTER(NUM2ULONG(rb_memory));
465
- rb_gi_field_info_set_field_raw(info, memory, rb_field_value);
466
-
467
+ GIFieldInfo *info = SELF(self);
468
+ GIStructInfo *struct_info = RVAL2GI_STRUCT_INFO(rb_struct_info);
469
+ gpointer memory = GUINT_TO_POINTER(NUM2ULONG(rb_memory));
470
+ rb_gi_field_info_set_field_raw(info, struct_info, memory, rb_field_value);
467
471
  return Qnil;
468
472
  }
469
473
 
@@ -480,8 +484,8 @@ rb_gi_field_info_init(VALUE rb_mGI, VALUE rb_cGIBaseInfo)
480
484
  RG_DEF_METHOD(size, 0);
481
485
  RG_DEF_METHOD(offset, 0);
482
486
  RG_DEF_METHOD(type, 0);
483
- RG_DEF_METHOD(get_field, 1);
484
- RG_DEF_METHOD(set_field, 2);
487
+ RG_DEF_METHOD(get_field, 2);
488
+ RG_DEF_METHOD(set_field, 3);
485
489
 
486
490
  G_DEF_CLASS(G_TYPE_I_FIELD_INFO_FLAGS, "FieldInfoFlags", rb_mGI);
487
491
  }
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2021 Ruby-GNOME Project Team
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
@@ -131,7 +131,10 @@ rg_get_field_value(VALUE self, VALUE rb_object, VALUE rb_n)
131
131
  info = SELF(self);
132
132
  n = NUM2INT(rb_n);
133
133
  field_info = g_object_info_get_field(info, n);
134
- rb_value = rb_gi_field_info_get_field_raw(field_info, RVAL2GOBJ(rb_object));
134
+ rb_value = rb_gi_field_info_get_field_raw(field_info,
135
+ /* TODO: use info for size */
136
+ NULL,
137
+ RVAL2GOBJ(rb_object));
135
138
  g_base_info_unref(field_info);
136
139
 
137
140
  return rb_value;
@@ -147,7 +150,11 @@ rg_set_field_value(VALUE self, VALUE rb_object, VALUE rb_n, VALUE rb_value)
147
150
  info = SELF(self);
148
151
  n = NUM2INT(rb_n);
149
152
  field_info = g_object_info_get_field(info, n);
150
- rb_gi_field_info_set_field_raw(field_info, RVAL2GOBJ(rb_object), rb_value);
153
+ rb_gi_field_info_set_field_raw(field_info,
154
+ /* TODO: use info for size */
155
+ NULL,
156
+ RVAL2GOBJ(rb_object),
157
+ rb_value);
151
158
  /* TODO: use rb_ensure() to unref field_info. */
152
159
  g_base_info_unref(field_info);
153
160
 
@@ -51,6 +51,8 @@ struct RBGIArgMetadata_ {
51
51
  GICallableInfo *callable_info;
52
52
  GIArgInfo arg_info;
53
53
  GITypeInfo *type_info;
54
+ GIFieldInfo *struct_info;
55
+ gpointer *struct_memory;
54
56
  const gchar *name;
55
57
  RBGIArgMetadataType type;
56
58
  RBGIArgMetadataType element_type;
@@ -91,6 +93,10 @@ G_GNUC_INTERNAL void
91
93
  rb_gi_arg_metadata_init_type_info(RBGIArgMetadata *metadata,
92
94
  GITypeInfo *type_info);
93
95
  G_GNUC_INTERNAL void
96
+ rb_gi_arg_metadata_init_struct_info(RBGIArgMetadata *metadata,
97
+ GIStructInfo *struct_info,
98
+ gpointer struct_memory);
99
+ G_GNUC_INTERNAL void
94
100
  rb_gi_arg_metadata_clear(RBGIArgMetadata *metadata);
95
101
  G_GNUC_INTERNAL void
96
102
  rb_gi_arg_metadata_free(RBGIArgMetadata *metadata);
@@ -116,8 +116,10 @@ VALUE rb_gi_function_info_invoke_raw (GIFunctionInfo *info,
116
116
  VALUE *rb_return_value);
117
117
 
118
118
  VALUE rb_gi_field_info_get_field_raw (GIFieldInfo *info,
119
+ GIStructInfo *struct_info,
119
120
  gpointer memory);
120
121
  void rb_gi_field_info_set_field_raw (GIFieldInfo *info,
122
+ GIStructInfo *struct_info,
121
123
  gpointer memory,
122
124
  VALUE rb_field_value);
123
125
 
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2021 Ruby-GNOME Project Team
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
@@ -218,7 +218,7 @@ rg_get_field_value(VALUE self, VALUE rb_struct, VALUE rb_n)
218
218
  raw_struct = rb_gi_struct_info_from_ruby(info, rb_struct);
219
219
  n = NUM2INT(rb_n);
220
220
  field_info = g_struct_info_get_field(info, n);
221
- rb_value = rb_gi_field_info_get_field_raw(field_info, raw_struct);
221
+ rb_value = rb_gi_field_info_get_field_raw(field_info, info, raw_struct);
222
222
  g_base_info_unref(field_info);
223
223
 
224
224
  return rb_value;
@@ -236,7 +236,7 @@ rg_set_field_value(VALUE self, VALUE rb_struct, VALUE rb_n, VALUE rb_value)
236
236
  raw_struct = rb_gi_struct_info_from_ruby(info, rb_struct);
237
237
  n = NUM2INT(rb_n);
238
238
  field_info = g_struct_info_get_field(info, n);
239
- rb_gi_field_info_set_field_raw(field_info, raw_struct, rb_value);
239
+ rb_gi_field_info_set_field_raw(field_info, info, raw_struct, rb_value);
240
240
  /* TODO: use rb_ensure() to unref field_info. */
241
241
  g_base_info_unref(field_info);
242
242
 
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012 Ruby-GNOME2 Project Team
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
@@ -69,6 +69,8 @@ rg_get_field_value(VALUE self, VALUE rb_union, VALUE rb_n)
69
69
  field_info = g_union_info_get_field(info, n);
70
70
  gtype = g_registered_type_info_get_g_type(info);
71
71
  rb_value = rb_gi_field_info_get_field_raw(field_info,
72
+ /* TODO: use info */
73
+ NULL,
72
74
  RVAL2BOXED(rb_union, gtype));
73
75
  g_base_info_unref(field_info);
74
76
 
@@ -88,6 +90,8 @@ rg_set_field_value(VALUE self, VALUE rb_union, VALUE rb_n, VALUE rb_value)
88
90
  field_info = g_union_info_get_field(info, n);
89
91
  gtype = g_registered_type_info_get_g_type(info);
90
92
  rb_gi_field_info_set_field_raw(field_info,
93
+ /* TODO: use info */
94
+ NULL,
91
95
  RVAL2BOXED(rb_union, gtype),
92
96
  rb_value);
93
97
  /* TODO: use rb_ensure() to unref field_info. */
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gobject-introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.3
4
+ version: 4.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Ruby-GNOME Project Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-13 00:00:00.000000000 Z
11
+ date: 2022-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glib2
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.3
19
+ version: 4.0.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.3
26
+ version: 4.0.5
27
27
  description: Ruby/GObjectIntrospection provides bindings of GObject Introspection
28
28
  and a loader module that can generate dynamically Ruby bindings of any GObject C
29
29
  libraries