gobject-introspection 4.2.4 → 4.2.6

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: 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: []