gobject-introspection 4.2.4 → 4.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49e5222f7c984b0eebce13f19a04226893d9e768fb80a3f473b9ced83fd9adb4
4
- data.tar.gz: cf3e563695a4afe3df79bdaa9e25f20b24bec24a28a4612c7d4e309883f6e258
3
+ metadata.gz: d88a4a6128c816a6b3748a8de4604759a2b2cee0395a2fda92e2ce18c16095d1
4
+ data.tar.gz: 160aa66ce37fb5448a1d7d0fdc752e7fc29a268f6e9689efd51ac19f6ffd96c9
5
5
  SHA512:
6
- metadata.gz: f38460961ce556431c16dcdc24853d67b794de52d2b32c49064ee7b67354ddd9371d15fc10abc4bff84967539a9d47cc8fc484e3eaddee761fd0f2f15a41ca91
7
- data.tar.gz: e71bd1165a0fdbd2a7532efc4db7e2b8048f37ae0023f3989acf913fb16535517a534dac21d4d6f121a416a40f0df1f6d435c4e25b9fae0fd5c40fb8a65a4c58
6
+ metadata.gz: '0093faeaaebf617a75bd552f23d29456cc3c8a4e43878414d8faaf7c8b13eaf1fef25799cecf73df6df2f7dfaf60fd675dd988b30206d7fb6ef02e74bdd6932b'
7
+ data.tar.gz: '0532796d74b9faf5a6fbf44005c234bb5dc51825b40b6b6bdd7ef4175d7778f8cca3eb2ab3fc0db2be081bdb136cc482f20eac26d95edef4f42170c19d5feb82'
data/Rakefile CHANGED
@@ -17,10 +17,10 @@
17
17
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
 
19
19
  $LOAD_PATH.unshift("./../glib2/lib")
20
- require "gnome2/rake/package-task"
20
+ require "gnome/rake/package-task"
21
21
 
22
22
  package_name = File.basename(__dir__)
23
23
  spec = Gem::Specification.load("#{package_name}.gemspec")
24
24
 
25
- GNOME2::Rake::PackageTask.define(spec, __dir__) do |package|
25
+ GNOME::Rake::PackageTask.define(spec, __dir__) do |package|
26
26
  end
@@ -103,14 +103,20 @@ rb_gi_arguments_out_free_array_c_interface(RBGIArguments *args,
103
103
  g_free(*target);
104
104
  break;
105
105
  case GI_TRANSFER_EVERYTHING:
106
- default:
107
- rb_raise(rb_eNotImpError,
108
- "TODO: [%s] %s free GIArgument(%s/%s)[%s]",
109
- metadata->name,
110
- rb_gi_direction_to_string(metadata->direction),
111
- g_type_tag_to_string(metadata->type.tag),
112
- rb_gi_array_type_to_string(metadata->array_type),
113
- rb_gi_transfer_to_string(metadata->transfer));
106
+ if (metadata->element_type.interface_gtype == G_TYPE_NONE) {
107
+ /* This assumes that this memory was allocated by
108
+ * g_new0(MyStruct, n). */
109
+ g_free(*target);
110
+ } else {
111
+ rb_raise(rb_eNotImpError,
112
+ "TODO: [%s] %s free GIArgument(%s/%s)[%s]",
113
+ metadata->name,
114
+ rb_gi_direction_to_string(metadata->direction),
115
+ g_type_tag_to_string(metadata->type.tag),
116
+ rb_gi_array_type_to_string(metadata->array_type),
117
+ rb_gi_transfer_to_string(metadata->transfer));
118
+ }
119
+ break;
114
120
  }
115
121
  xfree(target);
116
122
  }
@@ -337,6 +343,7 @@ rb_gi_arguments_out_init_arg_array_c(RBGIArguments *args,
337
343
  break;
338
344
  case GI_TYPE_TAG_UTF8:
339
345
  argument->v_pointer = ALLOC(gchar **);
346
+ *((gchar **)(argument->v_pointer)) = NULL;
340
347
  metadata->free_func = rb_gi_arguments_out_free_array_c_string;
341
348
  break;
342
349
  case GI_TYPE_TAG_FILENAME:
@@ -349,6 +356,7 @@ rb_gi_arguments_out_init_arg_array_c(RBGIArguments *args,
349
356
  break;
350
357
  case GI_TYPE_TAG_INTERFACE:
351
358
  argument->v_pointer = ALLOC(gpointer *);
359
+ *((gpointer *)(argument->v_pointer)) = NULL;
352
360
  metadata->free_func = rb_gi_arguments_out_free_array_c_interface;
353
361
  break;
354
362
  case GI_TYPE_TAG_GLIST:
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2022 Ruby-GNOME Project Team
3
+ * Copyright (C) 2012-2024 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
@@ -602,6 +602,12 @@ rb_gi_arguments_convert_arg_interface_body(VALUE user_data)
602
602
  }
603
603
  case GI_INFO_TYPE_OBJECT:
604
604
  case GI_INFO_TYPE_INTERFACE:
605
+ if (!G_IS_OBJECT(data->arg->v_pointer)) {
606
+ GIObjectInfoRefFunction ref = g_object_info_get_ref_function_pointer(data->arg_metadata->type.interface_info);
607
+ if (ref) {
608
+ ref(data->arg->v_pointer);
609
+ }
610
+ }
605
611
  return GOBJ2RVAL(data->arg->v_pointer);
606
612
  case GI_INFO_TYPE_CONSTANT:
607
613
  rb_raise(rb_eNotImpError,
@@ -683,10 +689,10 @@ rb_gi_arguments_convert_arg_array_like_ensure(VALUE user_data)
683
689
  return Qnil;
684
690
  }
685
691
 
686
- static gint64
687
- rb_gi_arguments_convert_arg_array_body_extract_length(GIArgument *arg,
688
- RBGIArgMetadata *metadata,
689
- gboolean is_pointer)
692
+ gint64
693
+ rb_gi_argument_out_array_get_length(GIArgument *arg,
694
+ RBGIArgMetadata *metadata,
695
+ gboolean is_pointer)
690
696
  {
691
697
  switch (metadata->type.tag) {
692
698
  case GI_TYPE_TAG_VOID:
@@ -697,49 +703,49 @@ rb_gi_arguments_convert_arg_array_body_extract_length(GIArgument *arg,
697
703
  return -1;
698
704
  case GI_TYPE_TAG_INT8:
699
705
  if (is_pointer) {
700
- return *((gint8 *)arg->v_pointer);
706
+ return *((gint8 *)(arg->v_pointer));
701
707
  } else {
702
708
  return arg->v_int8;
703
709
  }
704
710
  case GI_TYPE_TAG_UINT8:
705
711
  if (is_pointer) {
706
- return *((guint8 *)arg->v_pointer);
712
+ return *((guint8 *)(arg->v_pointer));
707
713
  } else {
708
714
  return arg->v_uint8;
709
715
  }
710
716
  case GI_TYPE_TAG_INT16:
711
717
  if (is_pointer) {
712
- return *((gint16 *)arg->v_pointer);
718
+ return *((gint16 *)(arg->v_pointer));
713
719
  } else {
714
720
  return arg->v_int16;
715
721
  }
716
722
  case GI_TYPE_TAG_UINT16:
717
723
  if (is_pointer) {
718
- return *((guint16 *)arg->v_pointer);
724
+ return *((guint16 *)(arg->v_pointer));
719
725
  } else {
720
726
  return arg->v_uint16;
721
727
  }
722
728
  case GI_TYPE_TAG_INT32:
723
729
  if (is_pointer) {
724
- return *((gint32 *)arg->v_pointer);
730
+ return *((gint32 *)(arg->v_pointer));
725
731
  } else {
726
732
  return arg->v_int32;
727
733
  }
728
734
  case GI_TYPE_TAG_UINT32:
729
735
  if (is_pointer) {
730
- return *((guint32 *)arg->v_pointer);
736
+ return *((guint32 *)(arg->v_pointer));
731
737
  } else {
732
738
  return arg->v_uint32;
733
739
  }
734
740
  case GI_TYPE_TAG_INT64:
735
741
  if (is_pointer) {
736
- return *((gint64 *)arg->v_pointer);
742
+ return *((gint64 *)(arg->v_pointer));
737
743
  } else {
738
744
  return arg->v_int64;
739
745
  }
740
746
  case GI_TYPE_TAG_UINT64:
741
747
  if (is_pointer) {
742
- return *((guint64 *)arg->v_pointer);
748
+ return *((guint64 *)(arg->v_pointer));
743
749
  } else {
744
750
  return arg->v_uint64;
745
751
  }
@@ -789,10 +795,9 @@ rb_gi_arguments_convert_arg_array_body_get_length(ArrayLikeToRubyData *data)
789
795
  data->arg_metadata->struct_info,
790
796
  data->arg_metadata->struct_memory);
791
797
  int64_t length =
792
- rb_gi_arguments_convert_arg_array_body_extract_length(
793
- &value,
794
- &length_metadata,
795
- FALSE);
798
+ rb_gi_argument_out_array_get_length(&value,
799
+ &length_metadata,
800
+ FALSE);
796
801
  /* TODO: Use ensure */
797
802
  rb_gi_arg_metadata_clear(&length_metadata);
798
803
  g_base_info_unref(field_info);
@@ -816,20 +821,16 @@ rb_gi_arguments_convert_arg_array_body_get_length(ArrayLikeToRubyData *data)
816
821
  gboolean is_pointer =
817
822
  !(length_metadata->array_metadata &&
818
823
  length_metadata->array_metadata->output_buffer_p);
819
- return
820
- rb_gi_arguments_convert_arg_array_body_extract_length(
821
- length_arg,
822
- length_metadata,
823
- is_pointer);
824
+ return rb_gi_argument_out_array_get_length(length_arg,
825
+ length_metadata,
826
+ is_pointer);
824
827
  } else {
825
828
  length_arg = &g_array_index(data->args->in_args,
826
829
  GIArgument,
827
830
  length_metadata->in_arg_index);
828
- return
829
- rb_gi_arguments_convert_arg_array_body_extract_length(
830
- length_arg,
831
- length_metadata,
832
- FALSE);
831
+ return rb_gi_argument_out_array_get_length(length_arg,
832
+ length_metadata,
833
+ FALSE);
833
834
  }
834
835
  }
835
836
 
@@ -1105,26 +1106,116 @@ static VALUE
1105
1106
  rb_gi_arguments_convert_arg_array_body_c_fixed_size(ArrayLikeToRubyData *data,
1106
1107
  gint fixed_size)
1107
1108
  {
1108
- const char *array_c_type = "[fixed-size]";
1109
+ const char *array_c_type = "fixed-size";
1109
1110
  switch (data->element_type_tag) {
1110
1111
  case GI_TYPE_TAG_VOID:
1111
1112
  case GI_TYPE_TAG_BOOLEAN:
1113
+ rb_raise(rb_eNotImpError,
1114
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
1115
+ array_c_type,
1116
+ g_type_tag_to_string(data->element_type_tag));
1117
+ return Qnil;
1112
1118
  case GI_TYPE_TAG_INT8:
1119
+ {
1120
+ gint8 *array = (gint8 *)(data->arg->v_pointer);
1121
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1122
+ gint i;
1123
+ for (i = 0; i < fixed_size; i++) {
1124
+ rb_ary_push(rb_array, RB_INT2NUM(array[i]));
1125
+ }
1126
+ return rb_array;
1127
+ }
1113
1128
  case GI_TYPE_TAG_UINT8:
1129
+ {
1130
+ guint8 *array = (guint8 *)(data->arg->v_pointer);
1131
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1132
+ gint i;
1133
+ for (i = 0; i < fixed_size; i++) {
1134
+ rb_ary_push(rb_array, RB_UINT2NUM(array[i]));
1135
+ }
1136
+ return rb_array;
1137
+ }
1114
1138
  case GI_TYPE_TAG_INT16:
1139
+ {
1140
+ gint16 *array = (gint16 *)(data->arg->v_pointer);
1141
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1142
+ gint i;
1143
+ for (i = 0; i < fixed_size; i++) {
1144
+ rb_ary_push(rb_array, RB_INT2NUM(array[i]));
1145
+ }
1146
+ return rb_array;
1147
+ }
1115
1148
  case GI_TYPE_TAG_UINT16:
1149
+ {
1150
+ guint16 *array = (guint16 *)(data->arg->v_pointer);
1151
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1152
+ gint i;
1153
+ for (i = 0; i < fixed_size; i++) {
1154
+ rb_ary_push(rb_array, RB_UINT2NUM(array[i]));
1155
+ }
1156
+ return rb_array;
1157
+ }
1116
1158
  case GI_TYPE_TAG_INT32:
1159
+ {
1160
+ gint32 *array = (gint32 *)(data->arg->v_pointer);
1161
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1162
+ gint i;
1163
+ for (i = 0; i < fixed_size; i++) {
1164
+ rb_ary_push(rb_array, RB_INT2NUM(array[i]));
1165
+ }
1166
+ return rb_array;
1167
+ }
1117
1168
  case GI_TYPE_TAG_UINT32:
1169
+ {
1170
+ guint32 *array = (guint32 *)(data->arg->v_pointer);
1171
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1172
+ gint i;
1173
+ for (i = 0; i < fixed_size; i++) {
1174
+ rb_ary_push(rb_array, RB_UINT2NUM(array[i]));
1175
+ }
1176
+ return rb_array;
1177
+ }
1118
1178
  case GI_TYPE_TAG_INT64:
1179
+ {
1180
+ gint64 *array = (gint64 *)(data->arg->v_pointer);
1181
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1182
+ gint i;
1183
+ for (i = 0; i < fixed_size; i++) {
1184
+ rb_ary_push(rb_array, RB_LL2NUM(array[i]));
1185
+ }
1186
+ return rb_array;
1187
+ }
1119
1188
  case GI_TYPE_TAG_UINT64:
1189
+ {
1190
+ guint64 *array = (guint64 *)(data->arg->v_pointer);
1191
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1192
+ gint i;
1193
+ for (i = 0; i < fixed_size; i++) {
1194
+ rb_ary_push(rb_array, RB_ULL2NUM(array[i]));
1195
+ }
1196
+ return rb_array;
1197
+ }
1120
1198
  case GI_TYPE_TAG_FLOAT:
1199
+ {
1200
+ float *array = (float *)(data->arg->v_pointer);
1201
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1202
+ gint i;
1203
+ for (i = 0; i < fixed_size; i++) {
1204
+ rb_ary_push(rb_array, rb_float_new(array[i]));
1205
+ }
1206
+ return rb_array;
1207
+ }
1121
1208
  case GI_TYPE_TAG_DOUBLE:
1209
+ {
1210
+ double *array = (double *)(data->arg->v_pointer);
1211
+ VALUE rb_array = rb_ary_new_capa(fixed_size);
1212
+ gint i;
1213
+ for (i = 0; i < fixed_size; i++) {
1214
+ rb_ary_push(rb_array, rb_float_new(array[i]));
1215
+ }
1216
+ return rb_array;
1217
+ }
1122
1218
  case GI_TYPE_TAG_GTYPE:
1123
- rb_raise(rb_eNotImpError,
1124
- "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
1125
- array_c_type,
1126
- g_type_tag_to_string(data->element_type_tag));
1127
- return Qnil;
1128
1219
  case GI_TYPE_TAG_UTF8:
1129
1220
  case GI_TYPE_TAG_FILENAME:
1130
1221
  case GI_TYPE_TAG_ARRAY:
@@ -2063,10 +2154,17 @@ rb_gi_arguments_convert_return_value_free_everything_interface(
2063
2154
  case GI_INFO_TYPE_OBJECT:
2064
2155
  {
2065
2156
  GObject *object = data->value->v_pointer;
2066
- if (g_object_is_floating(object)) {
2067
- g_object_ref_sink(object);
2157
+ if (G_IS_OBJECT(object)) {
2158
+ if (g_object_is_floating(object)) {
2159
+ g_object_ref_sink(object);
2160
+ }
2161
+ g_object_unref(object);
2162
+ } else {
2163
+ GIObjectInfoUnrefFunction unref = g_object_info_get_unref_function_pointer(data->metadata->type.interface_info);
2164
+ if (unref) {
2165
+ unref(object);
2166
+ }
2068
2167
  }
2069
- g_object_unref(object);
2070
2168
  }
2071
2169
  break;
2072
2170
  case GI_INFO_TYPE_INTERFACE:
@@ -2378,6 +2476,8 @@ rb_gi_arguments_convert_return_value_free_everything(ReturnValueToRubyData *data
2378
2476
  case GI_TYPE_TAG_UINT64:
2379
2477
  case GI_TYPE_TAG_FLOAT:
2380
2478
  case GI_TYPE_TAG_DOUBLE:
2479
+ /* We need to do nothing. */
2480
+ break;
2381
2481
  case GI_TYPE_TAG_GTYPE:
2382
2482
  rb_raise(rb_eNotImpError,
2383
2483
  "TODO: free GIArgument(%s) everything",
@@ -56,7 +56,8 @@ initialize_receiver(VALUE receiver,
56
56
  switch (interface_type) {
57
57
  case GI_INFO_TYPE_OBJECT:
58
58
  G_INITIALIZE(receiver, value->v_pointer);
59
- {
59
+ /* GTypeInstance * is also GI_INFO_TYPE_OBJECT. */
60
+ if (G_IS_OBJECT(value->v_pointer)) {
60
61
  gboolean was_floating;
61
62
  was_floating = g_object_is_floating(value->v_pointer);
62
63
  g_object_ref_sink(value->v_pointer);
@@ -101,6 +101,11 @@ rb_gi_arg_metadata_clear(RBGIArgMetadata *metadata);
101
101
  G_GNUC_INTERNAL void
102
102
  rb_gi_arg_metadata_free(RBGIArgMetadata *metadata);
103
103
 
104
+ G_GNUC_INTERNAL gint64
105
+ rb_gi_argument_out_array_get_length(GIArgument *arg,
106
+ RBGIArgMetadata *metadata,
107
+ gboolean is_pointer);
108
+
104
109
  G_GNUC_INTERNAL void
105
110
  rb_gi_arguments_init(RBGIArguments *args,
106
111
  GICallableInfo *info,
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gobject-introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.4
4
+ version: 4.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Ruby-GNOME Project Team
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2024-09-23 00:00:00.000000000 Z
10
+ date: 2025-01-25 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: glib2
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 4.2.4
18
+ version: 4.2.6
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 4.2.4
25
+ version: 4.2.6
26
26
  description: Ruby/GObjectIntrospection provides bindings of GObject Introspection
27
27
  and a loader module that can generate dynamically Ruby bindings of any GObject C
28
28
  libraries
@@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  - !ruby/object:Gem::Version
149
149
  version: '0'
150
150
  requirements: []
151
- rubygems_version: 3.6.0.dev
151
+ rubygems_version: 3.6.2
152
152
  specification_version: 4
153
153
  summary: Ruby/GObjectIntrospection is a Ruby binding of GObject Introspection.
154
154
  test_files: []