gobject-introspection 3.5.1 → 4.0.2

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: 3d900b67cd67be1ad0e06f5133ec36392d596b8959f673f963e14415fee507da
4
- data.tar.gz: 50d2d5a4081bc5e8c70c0fc1352fa74f4e0b1c0bd26277d2d83471177e9674a1
3
+ metadata.gz: 8914636fb145b0959d712285ef5261a9ffc99be42b01382050e088c107c19d7b
4
+ data.tar.gz: c23ce8d97e7f24081e4d2f92f511023202933a4c56180157d52b0301689c004f
5
5
  SHA512:
6
- metadata.gz: f0940a38670e64d25d1d194aa25518499918414f1eed3afcbd589fa25d9cb12f5ee0f483e9b1d2a8e1b4aa53c874581c73dddf44f83ed1b4a2cebe9934e50fab
7
- data.tar.gz: 84defecd5296d7f61309ef62aa92cbf09f296a85dc18e14ccc92cf3bb0e4a82dc0c4d7582b578e90977e807bb59f9ae845f15841002be99cdf7bc51abdb11c23
6
+ metadata.gz: 80230a3d9d7d72120f354328bfb9e558bbd27aa73e73dca1ea22060392b3106a07f217159a53d692a8f7c059f29a26000ef19351d9fb677d872e8ae0278969b2
7
+ data.tar.gz: c935ec3630dbf59da4faa5cf2f7d97e5f9e7cdffcc6dd1d6d4f8aad4ddfb515f5b019a2111276332b56edf6360f763435dba8cf2fb0798ee1427c185ebef4411
@@ -105,7 +105,7 @@ rb_gi_arguments_in_init_arg_ruby_callback(RBGIArguments *args,
105
105
  callback = rb_gi_callback_new(callback_info, NULL);
106
106
  g_base_info_unref(callback_info);
107
107
  g_base_info_unref(type_info);
108
- callback_argument->v_pointer = callback->closure;
108
+ callback_argument->v_pointer = callback->closure_native_address;
109
109
  }
110
110
 
111
111
  if (closure_argument) {
@@ -1201,10 +1201,13 @@ rb_gi_arguments_in_init_arg_ruby_interface(RBGIArguments *args,
1201
1201
  rb_gi_arguments_in_free_interface_struct_gbytes;
1202
1202
  }
1203
1203
  } else if (metadata->type.interface_gtype == G_TYPE_CLOSURE) {
1204
- GClosure *rclosure = NULL;
1205
-
1206
- rclosure = g_rclosure_new(metadata->rb_arg, Qnil, NULL);
1207
- g_rclosure_attach(rclosure, args->rb_receiver);
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
+ } else {
1209
+ g_rclosure_attach(rclosure, args->rb_receiver);
1210
+ }
1208
1211
  metadata->in_arg->v_pointer = rclosure;
1209
1212
  } else {
1210
1213
  metadata->in_arg->v_pointer =
@@ -1501,7 +1504,7 @@ rb_gi_arguments_in_init_arg_ruby_ghash_convert(VALUE rb_key,
1501
1504
  data->key_ruby_to_c_data->rb_value = rb_key;
1502
1505
  key = data->key_ruby_to_c_func(data->key_ruby_to_c_data);
1503
1506
  data->value_ruby_to_c_data->rb_value = rb_value;
1504
- value = data->key_ruby_to_c_func(data->value_ruby_to_c_data);
1507
+ value = data->value_ruby_to_c_func(data->value_ruby_to_c_data);
1505
1508
  g_hash_table_insert(data->hash_table, key, value);
1506
1509
  return ST_CONTINUE;
1507
1510
  }
@@ -170,7 +170,7 @@ rb_gi_arg_metadata_clear(RBGIArgMetadata *metadata)
170
170
  rb_gi_arg_metadata_type_clear(&(metadata->type));
171
171
  }
172
172
 
173
- static void
173
+ void
174
174
  rb_gi_arg_metadata_free(RBGIArgMetadata *metadata)
175
175
  {
176
176
  rb_gi_arg_metadata_clear(metadata);
@@ -659,7 +659,8 @@ rb_gi_arguments_convert_arg_array_like_ensure(VALUE user_data)
659
659
  static VALUE
660
660
  rb_gi_arguments_convert_arg_array_body_c_sized_interface(
661
661
  ArrayLikeToRubyData *data,
662
- gint64 length)
662
+ gint64 length,
663
+ const char *array_c_type)
663
664
  {
664
665
  gconstpointer *elements = data->arg->v_pointer;
665
666
  data->interface_type_info =
@@ -671,7 +672,8 @@ rb_gi_arguments_convert_arg_array_body_c_sized_interface(
671
672
  case GI_INFO_TYPE_FUNCTION:
672
673
  case GI_INFO_TYPE_CALLBACK:
673
674
  rb_raise(rb_eNotImpError,
674
- "TODO: GIArgument(array)[c][interface(%s)](%s) -> Ruby",
675
+ "TODO: GIArgument(array)[c][%s][interface(%s)](%s) -> Ruby",
676
+ array_c_type,
675
677
  g_info_type_to_string(type),
676
678
  g_type_name(gtype));
677
679
  return Qnil;
@@ -702,7 +704,8 @@ rb_gi_arguments_convert_arg_array_body_c_sized_interface(
702
704
  case GI_INFO_TYPE_ENUM:
703
705
  case GI_INFO_TYPE_FLAGS:
704
706
  rb_raise(rb_eNotImpError,
705
- "TODO: GIArgument(array)[c][interface(%s)](%s) -> Ruby",
707
+ "TODO: GIArgument(array)[c][%s][interface(%s)](%s) -> Ruby",
708
+ array_c_type,
706
709
  g_info_type_to_string(type),
707
710
  g_type_name(gtype));
708
711
  return Qnil;
@@ -728,7 +731,8 @@ rb_gi_arguments_convert_arg_array_body_c_sized_interface(
728
731
  case GI_INFO_TYPE_TYPE:
729
732
  case GI_INFO_TYPE_UNRESOLVED:
730
733
  rb_raise(rb_eNotImpError,
731
- "TODO: GIArgument(array)[c][interface(%s)](%s) -> Ruby",
734
+ "TODO: GIArgument(array)[c][%s][interface(%s)](%s) -> Ruby",
735
+ array_c_type,
732
736
  g_info_type_to_string(type),
733
737
  g_type_name(gtype));
734
738
  return Qnil;
@@ -742,11 +746,13 @@ static VALUE
742
746
  rb_gi_arguments_convert_arg_array_body_c_sized(ArrayLikeToRubyData *data,
743
747
  gint64 length)
744
748
  {
749
+ const char *array_c_type = "length";
745
750
  gconstpointer elements = data->arg->v_pointer;
746
751
  switch (data->element_type_tag) {
747
752
  case GI_TYPE_TAG_VOID:
748
753
  rb_raise(rb_eNotImpError,
749
- "TODO: GIArgument(array)[c][%s] -> Ruby",
754
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
755
+ array_c_type,
750
756
  g_type_tag_to_string(data->element_type_tag));
751
757
  return Qnil;
752
758
  case GI_TYPE_TAG_BOOLEAN:
@@ -865,7 +871,8 @@ rb_gi_arguments_convert_arg_array_body_c_sized(ArrayLikeToRubyData *data,
865
871
  }
866
872
  case GI_TYPE_TAG_GTYPE:
867
873
  rb_raise(rb_eNotImpError,
868
- "TODO: GIArgument(array)[c][%s] -> Ruby",
874
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
875
+ array_c_type,
869
876
  g_type_tag_to_string(data->element_type_tag));
870
877
  return Qnil;
871
878
  case GI_TYPE_TAG_UTF8:
@@ -890,20 +897,72 @@ rb_gi_arguments_convert_arg_array_body_c_sized(ArrayLikeToRubyData *data,
890
897
  }
891
898
  case GI_TYPE_TAG_ARRAY:
892
899
  rb_raise(rb_eNotImpError,
893
- "TODO: GIArgument(array)[c][%s] -> Ruby",
900
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
901
+ array_c_type,
902
+ g_type_tag_to_string(data->element_type_tag));
903
+ return Qnil;
904
+ case GI_TYPE_TAG_INTERFACE:
905
+ return rb_gi_arguments_convert_arg_array_body_c_sized_interface(
906
+ data, length, array_c_type);
907
+ case GI_TYPE_TAG_GLIST:
908
+ case GI_TYPE_TAG_GSLIST:
909
+ case GI_TYPE_TAG_GHASH:
910
+ case GI_TYPE_TAG_ERROR:
911
+ case GI_TYPE_TAG_UNICHAR:
912
+ rb_raise(rb_eNotImpError,
913
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
914
+ array_c_type,
915
+ g_type_tag_to_string(data->element_type_tag));
916
+ return Qnil;
917
+ default:
918
+ g_assert_not_reached();
919
+ return Qnil;
920
+ }
921
+ }
922
+
923
+ static VALUE
924
+ rb_gi_arguments_convert_arg_array_body_c_fixed_size(ArrayLikeToRubyData *data,
925
+ gint fixed_size)
926
+ {
927
+ const char *array_c_type = "[fixed-size]";
928
+ switch (data->element_type_tag) {
929
+ case GI_TYPE_TAG_VOID:
930
+ case GI_TYPE_TAG_BOOLEAN:
931
+ case GI_TYPE_TAG_INT8:
932
+ case GI_TYPE_TAG_UINT8:
933
+ case GI_TYPE_TAG_INT16:
934
+ case GI_TYPE_TAG_UINT16:
935
+ case GI_TYPE_TAG_INT32:
936
+ case GI_TYPE_TAG_UINT32:
937
+ case GI_TYPE_TAG_INT64:
938
+ case GI_TYPE_TAG_UINT64:
939
+ case GI_TYPE_TAG_FLOAT:
940
+ case GI_TYPE_TAG_DOUBLE:
941
+ case GI_TYPE_TAG_GTYPE:
942
+ rb_raise(rb_eNotImpError,
943
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
944
+ array_c_type,
945
+ g_type_tag_to_string(data->element_type_tag));
946
+ return Qnil;
947
+ case GI_TYPE_TAG_UTF8:
948
+ case GI_TYPE_TAG_FILENAME:
949
+ case GI_TYPE_TAG_ARRAY:
950
+ rb_raise(rb_eNotImpError,
951
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
952
+ array_c_type,
894
953
  g_type_tag_to_string(data->element_type_tag));
895
954
  return Qnil;
896
955
  case GI_TYPE_TAG_INTERFACE:
897
- return
898
- rb_gi_arguments_convert_arg_array_body_c_sized_interface(data,
899
- length);
956
+ return rb_gi_arguments_convert_arg_array_body_c_sized_interface(
957
+ data, fixed_size, array_c_type);
900
958
  case GI_TYPE_TAG_GLIST:
901
959
  case GI_TYPE_TAG_GSLIST:
902
960
  case GI_TYPE_TAG_GHASH:
903
961
  case GI_TYPE_TAG_ERROR:
904
962
  case GI_TYPE_TAG_UNICHAR:
905
963
  rb_raise(rb_eNotImpError,
906
- "TODO: GIArgument(array)[c][%s] -> Ruby",
964
+ "TODO: GIArgument(array)[c][%s][%s] -> Ruby",
965
+ array_c_type,
907
966
  g_type_tag_to_string(data->element_type_tag));
908
967
  return Qnil;
909
968
  default:
@@ -929,6 +988,9 @@ rb_gi_arguments_convert_arg_array_body_c(ArrayLikeToRubyData *data,
929
988
  return rb_gi_arguments_convert_arg_array_body_c_sized(data, length);
930
989
  } else if (zero_terminated_p) {
931
990
  return STRV2RVAL((const gchar **)elements);
991
+ } else if (fixed_size != -1) {
992
+ return rb_gi_arguments_convert_arg_array_body_c_fixed_size(data,
993
+ fixed_size);
932
994
  } else {
933
995
  rb_raise(rb_eNotImpError,
934
996
  "TODO: GIArgument(array)[c] -> Ruby: "
@@ -1684,7 +1746,7 @@ rb_gi_arguments_convert_arg(RBGIArguments *args,
1684
1746
  switch (type_tag) {
1685
1747
  case GI_TYPE_TAG_VOID:
1686
1748
  if (g_type_info_is_pointer(arg_metadata->type_info)) {
1687
- return ULL2NUM((guint64)(arg->v_pointer));
1749
+ return POINTER2NUM(arg->v_pointer);
1688
1750
  } else {
1689
1751
  return Qnil;
1690
1752
  }
@@ -2363,7 +2425,7 @@ rb_gi_arguments_fill_raw_out_gerror(RBGIArguments *args,
2363
2425
  gint n_args = g_callable_info_get_n_args(args->info);
2364
2426
  /* GError ** isn't listed in args. */
2365
2427
  GError **gerror = *((gpointer *)(args->raw_args[n_args]));
2366
- VALUE cGLibErrorInfo = rb_const_get(mGLib, rb_intern("ErrorInfo"));
2428
+ VALUE cGLibErrorInfo = rb_const_get(rbg_mGLib(), rb_intern("ErrorInfo"));
2367
2429
  if (NIL_P(rb_error)) {
2368
2430
  g_set_error(gerror,
2369
2431
  RBG_RUBY_ERROR,
@@ -2412,7 +2474,40 @@ rb_gi_arguments_fill_raw_result_interface(RBGIArguments *args,
2412
2474
  case GI_INFO_TYPE_INVALID:
2413
2475
  case GI_INFO_TYPE_FUNCTION:
2414
2476
  case GI_INFO_TYPE_CALLBACK:
2477
+ rb_raise(rb_eNotImpError,
2478
+ "TODO: %s::%s: out raw result(interface)[%s]: <%s>",
2479
+ args->namespace,
2480
+ args->name,
2481
+ g_info_type_to_string(interface_type),
2482
+ g_base_info_get_name(interface_info));
2483
+ break;
2415
2484
  case GI_INFO_TYPE_STRUCT:
2485
+ {
2486
+ gpointer value;
2487
+ GType gtype = g_registered_type_info_get_g_type(interface_info);
2488
+ if (gtype == G_TYPE_NONE) {
2489
+ /* Is it OK? */
2490
+ /* value = RVAL2GPTR(rb_result); */
2491
+ rb_raise(rb_eNotImpError,
2492
+ "TODO: %s::%s: out raw result(interface)[%s][%s]: <%s>",
2493
+ args->namespace,
2494
+ args->name,
2495
+ g_info_type_to_string(interface_type),
2496
+ g_type_name(gtype),
2497
+ g_base_info_get_name(interface_info));
2498
+ } else {
2499
+ value = RVAL2BOXED(rb_result, gtype);
2500
+ if (transfer == GI_TRANSFER_EVERYTHING) {
2501
+ value = g_boxed_copy(gtype, value);
2502
+ }
2503
+ }
2504
+ if (is_return_value) {
2505
+ ffi_return_value->v_pointer = value;
2506
+ } else {
2507
+ *((gpointer *)raw_result) = value;
2508
+ }
2509
+ }
2510
+ break;
2416
2511
  case GI_INFO_TYPE_BOXED:
2417
2512
  rb_raise(rb_eNotImpError,
2418
2513
  "TODO: %s::%s: out raw result(interface)[%s]: <%s>",
@@ -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
@@ -48,7 +48,7 @@ rg_return_type(VALUE self)
48
48
  GICallableInfo *info;
49
49
 
50
50
  info = SELF(self);
51
- return GI_BASE_INFO2RVAL(g_callable_info_get_return_type(info));
51
+ return GI_BASE_INFO2RVAL_WITH_UNREF(g_callable_info_get_return_type(info));
52
52
  }
53
53
 
54
54
  static VALUE
@@ -20,6 +20,24 @@
20
20
 
21
21
  #include "rb-gi-private.h"
22
22
 
23
+ #if !GI_CHECK_VERSION(1, 72, 0)
24
+ # define g_callable_info_create_closure(callable_info, \
25
+ cif, \
26
+ callback, \
27
+ user_data) \
28
+ g_callable_info_prepare_closure((callable_info), \
29
+ (cif), \
30
+ (callback), \
31
+ (user_data))
32
+ # define g_callable_info_get_closure_native_address(callable_info, \
33
+ closure) \
34
+ (closure)
35
+ # define g_callable_info_destroy_closure(callable_info, \
36
+ closure) \
37
+ g_callable_info_free_closure((callable_info), \
38
+ (closure))
39
+ #endif
40
+
23
41
  struct RBGICallbackData_ {
24
42
  RBGICallback *callback;
25
43
  RBGIArgMetadata *metadata;
@@ -37,7 +55,6 @@ typedef struct {
37
55
  } RBGICallbackInvokeData;
38
56
 
39
57
  static GPtrArray *callback_finders;
40
- static VALUE mGLibObject = Qnil;
41
58
  static VALUE mGI = Qnil;
42
59
 
43
60
  static VALUE
@@ -108,6 +125,7 @@ rb_gi_callback_invoke(VALUE user_data)
108
125
  rbgutil_on_callback_error(error);
109
126
  }
110
127
  rb_gi_arguments_fill_raw_out_gerror(data->args, error);
128
+ memset(data->return_value, 0, sizeof(GIFFIReturnValue));
111
129
  }
112
130
  }
113
131
  return Qnil;
@@ -185,18 +203,21 @@ rb_gi_callback_new(GICallbackInfo *callback_info,
185
203
  g_base_info_ref(callback->callback_info);
186
204
  callback->method_name = g_strdup(method_name);
187
205
  callback->closure =
188
- g_callable_info_prepare_closure(callback->callback_info,
189
- &(callback->cif),
190
- rb_gi_ffi_closure_callback,
191
- callback);
206
+ g_callable_info_create_closure(callback->callback_info,
207
+ &(callback->cif),
208
+ rb_gi_ffi_closure_callback,
209
+ callback);
210
+ callback->closure_native_address =
211
+ g_callable_info_get_closure_native_address(callback->callback_info,
212
+ callback->closure);
192
213
  return callback;
193
214
  }
194
215
 
195
216
  static void
196
217
  rb_gi_callback_free(RBGICallback *callback)
197
218
  {
198
- g_callable_info_free_closure(callback->callback_info,
199
- callback->closure);
219
+ g_callable_info_destroy_closure(callback->callback_info,
220
+ callback->closure);
200
221
  g_free(callback->method_name);
201
222
  g_base_info_unref(callback->callback_info);
202
223
  xfree(callback);
@@ -232,14 +253,14 @@ rb_gi_callback_data_new(RBGIArguments *args,
232
253
  if (NIL_P(rb_owner)) {
233
254
  /* Module function case. */
234
255
  VALUE rb_first_argument = RARRAY_AREF(args->rb_args, 0);
235
- if (RVAL2CBOOL(rb_obj_is_kind_of(rb_first_argument, mGLibObject))) {
256
+ if (RVAL2CBOOL(rb_obj_is_kind_of(rb_first_argument, rbg_cGLibObject()))) {
236
257
  /* If the first argument of the module function call is
237
258
  GObject, it's suitable for owner.
238
259
  For example: pango_cairo_context_set_shape_renderer() */
239
260
  rb_owner = rb_first_argument;
240
261
  }
241
262
  }
242
- if (RVAL2CBOOL(rb_obj_is_kind_of(rb_owner, mGLibObject))) {
263
+ if (RVAL2CBOOL(rb_obj_is_kind_of(rb_owner, rbg_cGLibObject()))) {
243
264
  rbgobj_object_add_relative(rb_owner, callback_data->rb_callback);
244
265
  callback_data->owner = RVAL2GOBJ(rb_owner);
245
266
  g_object_weak_ref(callback_data->owner,
@@ -284,7 +305,7 @@ rb_gi_callback_data_free(RBGICallbackData *callback_data)
284
305
  (ID)0,
285
306
  callback_data->rb_callback);
286
307
  }
287
- xfree(callback_data->metadata);
308
+ rb_gi_arg_metadata_free(callback_data->metadata);
288
309
  xfree(callback_data);
289
310
  }
290
311
 
@@ -397,6 +418,5 @@ rb_gi_callback_init(VALUE rb_mGI)
397
418
  callback_finders = g_ptr_array_new();
398
419
  rb_gi_callback_register_finder(source_func_callback_finder);
399
420
 
400
- mGLibObject = rb_const_get(mGLib, rb_intern("Object"));
401
421
  mGI = rb_mGI;
402
422
  }
@@ -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
@@ -183,7 +183,7 @@ rg_s_implement_virtual_function(G_GNUC_UNUSED VALUE klass,
183
183
  }
184
184
  offset = g_field_info_get_offset(field_info);
185
185
  method_address = G_STRUCT_MEMBER_P(vtable_struct, offset);
186
- *method_address = callback->closure;
186
+ *method_address = callback->closure_native_address;
187
187
  g_type_class_unref(implementor_struct);
188
188
  }
189
189
 
@@ -92,6 +92,8 @@ rb_gi_arg_metadata_init_type_info(RBGIArgMetadata *metadata,
92
92
  GITypeInfo *type_info);
93
93
  G_GNUC_INTERNAL void
94
94
  rb_gi_arg_metadata_clear(RBGIArgMetadata *metadata);
95
+ G_GNUC_INTERNAL void
96
+ rb_gi_arg_metadata_free(RBGIArgMetadata *metadata);
95
97
 
96
98
  G_GNUC_INTERNAL void
97
99
  rb_gi_arguments_init(RBGIArguments *args,
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2019-2021 Ruby-GNOME Project Team
3
+ * Copyright (C) 2019-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
@@ -26,6 +26,7 @@ typedef struct RBGICallback_ {
26
26
  gchar *method_name;
27
27
  ffi_cif cif;
28
28
  ffi_closure *closure;
29
+ gpointer *closure_native_address;
29
30
  } RBGICallback;
30
31
 
31
32
  G_GNUC_INTERNAL void
@@ -39,21 +39,6 @@ rb_gi_is_debug_mode(void)
39
39
  return is_debug_mode;
40
40
  }
41
41
 
42
- #ifdef _WIN32
43
- /* Workaround: See glib2/ext/glib2/rbglib.c for details. */
44
- BOOL WINAPI
45
- DllMain(G_GNUC_UNUSED HINSTANCE hinstDLL,
46
- G_GNUC_UNUSED DWORD fdwReason,
47
- G_GNUC_UNUSED LPVOID lpvReserved);
48
- BOOL WINAPI
49
- DllMain(G_GNUC_UNUSED HINSTANCE hinstDLL,
50
- G_GNUC_UNUSED DWORD fdwReason,
51
- G_GNUC_UNUSED LPVOID lpvReserved)
52
- {
53
- return TRUE;
54
- }
55
- #endif
56
-
57
42
  void
58
43
  Init_gobject_introspection(void)
59
44
  {
@@ -573,7 +573,7 @@ module GObjectIntrospection
573
573
  if method_name == "to_s" and info.n_args.zero?
574
574
  klass.class_eval(<<-DEFINE_METHOD, __FILE__, __LINE__ + 1)
575
575
  def inspect
576
- super.gsub(/>\z/) {" \#{to_s}>"}
576
+ super.gsub(/>\\z/) {" \#{to_s}>"}
577
577
  end
578
578
  DEFINE_METHOD
579
579
  end
@@ -717,10 +717,13 @@ module GObjectIntrospection
717
717
  @valid_n_args_range = (@n_required_in_args..@n_in_args)
718
718
 
719
719
  @in_arg_types = []
720
+ @in_arg_nils = []
720
721
  @in_arg_nil_indexes = []
721
722
  @in_args.each_with_index do |arg, i|
722
723
  @in_arg_types << arg.type
723
- @in_arg_nil_indexes << i if arg.may_be_null?
724
+ may_be_null = arg.may_be_null?
725
+ @in_arg_nils << may_be_null
726
+ @in_arg_nil_indexes << i if may_be_null
724
727
  end
725
728
 
726
729
  @function_info_p = (@info.class == FunctionInfo)
@@ -772,7 +775,7 @@ module GObjectIntrospection
772
775
  type = @in_arg_types[i]
773
776
  converted_argument = type.try_convert(argument)
774
777
  if converted_argument.nil?
775
- next if argument.nil?
778
+ next if argument.nil? and @in_arg_nils[i]
776
779
  if abort_tag
777
780
  throw(abort_tag)
778
781
  elsif @on_invalid == :fallback
data/test/test-loader.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2021 Ruby-GNOME Project Team
1
+ # Copyright (C) 2012-2022 Ruby-GNOME Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -87,4 +87,18 @@ class TestLoaderInfo < Test::Unit::TestCase
87
87
  end
88
88
  end
89
89
  end
90
+
91
+ sub_test_case("#==") do
92
+ def test_invalid
93
+ assert do
94
+ not (Gio::File.new_for_path("nonexistent") == "invalid")
95
+ end
96
+ end
97
+
98
+ def test_nil
99
+ assert do
100
+ not (Gio::File.new_for_path("nonexistent") == nil)
101
+ end
102
+ end
103
+ end
90
104
  end
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: 3.5.1
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Ruby-GNOME Project Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-17 00:00:00.000000000 Z
11
+ date: 2022-09-05 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: 3.5.1
19
+ version: 4.0.2
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: 3.5.1
26
+ version: 4.0.2
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
@@ -38,8 +38,6 @@ files:
38
38
  - Rakefile
39
39
  - ext/gobject-introspection/depend
40
40
  - ext/gobject-introspection/extconf.rb
41
- - ext/gobject-introspection/gobject-introspection-enum-types.c
42
- - ext/gobject-introspection/gobject-introspection-enum-types.h
43
41
  - ext/gobject-introspection/gobject_introspection.def
44
42
  - ext/gobject-introspection/rb-gi-arg-info.c
45
43
  - ext/gobject-introspection/rb-gi-arguments-in.c
@@ -87,7 +85,6 @@ files:
87
85
  - ext/gobject-introspection/rb-gi-vfunc-info.c
88
86
  - ext/gobject-introspection/rb-gobject-introspection.c
89
87
  - ext/gobject-introspection/rb-gobject-introspection.h
90
- - ext/gobject-introspection/rbgiversion.h
91
88
  - extconf.rb
92
89
  - gobject-introspection.gemspec
93
90
  - lib/gi.rb
@@ -138,7 +135,7 @@ licenses:
138
135
  - LGPL-2.1+
139
136
  metadata:
140
137
  msys2_mingw_dependencies: gobject-introspection
141
- post_install_message:
138
+ post_install_message:
142
139
  rdoc_options: []
143
140
  require_paths:
144
141
  - lib
@@ -154,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
151
  version: '0'
155
152
  requirements: []
156
153
  rubygems_version: 3.4.0.dev
157
- signing_key:
154
+ signing_key:
158
155
  specification_version: 4
159
156
  summary: Ruby/GObjectIntrospection is a Ruby binding of GObject Introspection.
160
157
  test_files: []
@@ -1,230 +0,0 @@
1
-
2
- /* Generated by glib-mkenums.rb ($Id$) */
3
-
4
- #include "gobject-introspection-enum-types.h"
5
- #include <girepository.h>
6
-
7
-
8
-
9
- /* enumerations from "/usr/include/gobject-introspection-1.0/girepository.h" */
10
- GType
11
- g_i_repository_load_flags_get_type (void)
12
- {
13
- static GType etype = 0;
14
- if (etype == 0) {
15
- static const GFlagsValue values[] = {
16
- { G_IREPOSITORY_LOAD_FLAG_LAZY, "G_IREPOSITORY_LOAD_FLAG_LAZY", "g-irepository-load-flag-lazy" },
17
- { 0, NULL, NULL }
18
- };
19
- etype = g_flags_register_static ("GIRepositoryLoadFlags", values);
20
- }
21
- return etype;
22
- }
23
-
24
- GType
25
- g_i_repository_error_get_type (void)
26
- {
27
- static GType etype = 0;
28
- if (etype == 0) {
29
- static const GEnumValue values[] = {
30
- { G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND, "G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND", "typelib-not-found" },
31
- { G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH, "G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH", "namespace-mismatch" },
32
- { G_IREPOSITORY_ERROR_NAMESPACE_VERSION_CONFLICT, "G_IREPOSITORY_ERROR_NAMESPACE_VERSION_CONFLICT", "namespace-version-conflict" },
33
- { G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND, "G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND", "library-not-found" },
34
- { 0, NULL, NULL }
35
- };
36
- etype = g_enum_register_static ("GIRepositoryError", values);
37
- }
38
- return etype;
39
- }
40
-
41
-
42
- /* enumerations from "/usr/include/gobject-introspection-1.0/gitypes.h" */
43
- GType
44
- g_i_info_type_get_type (void)
45
- {
46
- static GType etype = 0;
47
- if (etype == 0) {
48
- static const GEnumValue values[] = {
49
- { GI_INFO_TYPE_INVALID, "GI_INFO_TYPE_INVALID", "invalid" },
50
- { GI_INFO_TYPE_FUNCTION, "GI_INFO_TYPE_FUNCTION", "function" },
51
- { GI_INFO_TYPE_CALLBACK, "GI_INFO_TYPE_CALLBACK", "callback" },
52
- { GI_INFO_TYPE_STRUCT, "GI_INFO_TYPE_STRUCT", "struct" },
53
- { GI_INFO_TYPE_BOXED, "GI_INFO_TYPE_BOXED", "boxed" },
54
- { GI_INFO_TYPE_ENUM, "GI_INFO_TYPE_ENUM", "enum" },
55
- { GI_INFO_TYPE_FLAGS, "GI_INFO_TYPE_FLAGS", "flags" },
56
- { GI_INFO_TYPE_OBJECT, "GI_INFO_TYPE_OBJECT", "object" },
57
- { GI_INFO_TYPE_INTERFACE, "GI_INFO_TYPE_INTERFACE", "interface" },
58
- { GI_INFO_TYPE_CONSTANT, "GI_INFO_TYPE_CONSTANT", "constant" },
59
- { GI_INFO_TYPE_INVALID_0, "GI_INFO_TYPE_INVALID_0", "invalid-0" },
60
- { GI_INFO_TYPE_UNION, "GI_INFO_TYPE_UNION", "union" },
61
- { GI_INFO_TYPE_VALUE, "GI_INFO_TYPE_VALUE", "value" },
62
- { GI_INFO_TYPE_SIGNAL, "GI_INFO_TYPE_SIGNAL", "signal" },
63
- { GI_INFO_TYPE_VFUNC, "GI_INFO_TYPE_VFUNC", "vfunc" },
64
- { GI_INFO_TYPE_PROPERTY, "GI_INFO_TYPE_PROPERTY", "property" },
65
- { GI_INFO_TYPE_FIELD, "GI_INFO_TYPE_FIELD", "field" },
66
- { GI_INFO_TYPE_ARG, "GI_INFO_TYPE_ARG", "arg" },
67
- { GI_INFO_TYPE_TYPE, "GI_INFO_TYPE_TYPE", "type" },
68
- { GI_INFO_TYPE_UNRESOLVED, "GI_INFO_TYPE_UNRESOLVED", "unresolved" },
69
- { 0, NULL, NULL }
70
- };
71
- etype = g_enum_register_static ("GIInfoType", values);
72
- }
73
- return etype;
74
- }
75
-
76
- GType
77
- g_i_transfer_get_type (void)
78
- {
79
- static GType etype = 0;
80
- if (etype == 0) {
81
- static const GEnumValue values[] = {
82
- { GI_TRANSFER_NOTHING, "GI_TRANSFER_NOTHING", "nothing" },
83
- { GI_TRANSFER_CONTAINER, "GI_TRANSFER_CONTAINER", "container" },
84
- { GI_TRANSFER_EVERYTHING, "GI_TRANSFER_EVERYTHING", "everything" },
85
- { 0, NULL, NULL }
86
- };
87
- etype = g_enum_register_static ("GITransfer", values);
88
- }
89
- return etype;
90
- }
91
-
92
- GType
93
- g_i_direction_get_type (void)
94
- {
95
- static GType etype = 0;
96
- if (etype == 0) {
97
- static const GEnumValue values[] = {
98
- { GI_DIRECTION_IN, "GI_DIRECTION_IN", "in" },
99
- { GI_DIRECTION_OUT, "GI_DIRECTION_OUT", "out" },
100
- { GI_DIRECTION_INOUT, "GI_DIRECTION_INOUT", "inout" },
101
- { 0, NULL, NULL }
102
- };
103
- etype = g_enum_register_static ("GIDirection", values);
104
- }
105
- return etype;
106
- }
107
-
108
- GType
109
- g_i_scope_type_get_type (void)
110
- {
111
- static GType etype = 0;
112
- if (etype == 0) {
113
- static const GEnumValue values[] = {
114
- { GI_SCOPE_TYPE_INVALID, "GI_SCOPE_TYPE_INVALID", "invalid" },
115
- { GI_SCOPE_TYPE_CALL, "GI_SCOPE_TYPE_CALL", "call" },
116
- { GI_SCOPE_TYPE_ASYNC, "GI_SCOPE_TYPE_ASYNC", "async" },
117
- { GI_SCOPE_TYPE_NOTIFIED, "GI_SCOPE_TYPE_NOTIFIED", "notified" },
118
- { 0, NULL, NULL }
119
- };
120
- etype = g_enum_register_static ("GIScopeType", values);
121
- }
122
- return etype;
123
- }
124
-
125
- GType
126
- g_i_type_tag_get_type (void)
127
- {
128
- static GType etype = 0;
129
- if (etype == 0) {
130
- static const GEnumValue values[] = {
131
- { GI_TYPE_TAG_VOID, "GI_TYPE_TAG_VOID", "void" },
132
- { GI_TYPE_TAG_BOOLEAN, "GI_TYPE_TAG_BOOLEAN", "boolean" },
133
- { GI_TYPE_TAG_INT8, "GI_TYPE_TAG_INT8", "int8" },
134
- { GI_TYPE_TAG_UINT8, "GI_TYPE_TAG_UINT8", "uint8" },
135
- { GI_TYPE_TAG_INT16, "GI_TYPE_TAG_INT16", "int16" },
136
- { GI_TYPE_TAG_UINT16, "GI_TYPE_TAG_UINT16", "uint16" },
137
- { GI_TYPE_TAG_INT32, "GI_TYPE_TAG_INT32", "int32" },
138
- { GI_TYPE_TAG_UINT32, "GI_TYPE_TAG_UINT32", "uint32" },
139
- { GI_TYPE_TAG_INT64, "GI_TYPE_TAG_INT64", "int64" },
140
- { GI_TYPE_TAG_UINT64, "GI_TYPE_TAG_UINT64", "uint64" },
141
- { GI_TYPE_TAG_FLOAT, "GI_TYPE_TAG_FLOAT", "float" },
142
- { GI_TYPE_TAG_DOUBLE, "GI_TYPE_TAG_DOUBLE", "double" },
143
- { GI_TYPE_TAG_GTYPE, "GI_TYPE_TAG_GTYPE", "gtype" },
144
- { GI_TYPE_TAG_UTF8, "GI_TYPE_TAG_UTF8", "utf8" },
145
- { GI_TYPE_TAG_FILENAME, "GI_TYPE_TAG_FILENAME", "filename" },
146
- { GI_TYPE_TAG_ARRAY, "GI_TYPE_TAG_ARRAY", "array" },
147
- { GI_TYPE_TAG_INTERFACE, "GI_TYPE_TAG_INTERFACE", "interface" },
148
- { GI_TYPE_TAG_GLIST, "GI_TYPE_TAG_GLIST", "glist" },
149
- { GI_TYPE_TAG_GSLIST, "GI_TYPE_TAG_GSLIST", "gslist" },
150
- { GI_TYPE_TAG_GHASH, "GI_TYPE_TAG_GHASH", "ghash" },
151
- { GI_TYPE_TAG_ERROR, "GI_TYPE_TAG_ERROR", "error" },
152
- { GI_TYPE_TAG_UNICHAR, "GI_TYPE_TAG_UNICHAR", "unichar" },
153
- { 0, NULL, NULL }
154
- };
155
- etype = g_enum_register_static ("GITypeTag", values);
156
- }
157
- return etype;
158
- }
159
-
160
- GType
161
- g_i_array_type_get_type (void)
162
- {
163
- static GType etype = 0;
164
- if (etype == 0) {
165
- static const GEnumValue values[] = {
166
- { GI_ARRAY_TYPE_C, "GI_ARRAY_TYPE_C", "c" },
167
- { GI_ARRAY_TYPE_ARRAY, "GI_ARRAY_TYPE_ARRAY", "array" },
168
- { GI_ARRAY_TYPE_PTR_ARRAY, "GI_ARRAY_TYPE_PTR_ARRAY", "ptr-array" },
169
- { GI_ARRAY_TYPE_BYTE_ARRAY, "GI_ARRAY_TYPE_BYTE_ARRAY", "byte-array" },
170
- { 0, NULL, NULL }
171
- };
172
- etype = g_enum_register_static ("GIArrayType", values);
173
- }
174
- return etype;
175
- }
176
-
177
- GType
178
- g_i_field_info_flags_get_type (void)
179
- {
180
- static GType etype = 0;
181
- if (etype == 0) {
182
- static const GFlagsValue values[] = {
183
- { GI_FIELD_IS_READABLE, "GI_FIELD_IS_READABLE", "readable" },
184
- { GI_FIELD_IS_WRITABLE, "GI_FIELD_IS_WRITABLE", "writable" },
185
- { 0, NULL, NULL }
186
- };
187
- etype = g_flags_register_static ("GIFieldInfoFlags", values);
188
- }
189
- return etype;
190
- }
191
-
192
- GType
193
- g_iv_func_info_flags_get_type (void)
194
- {
195
- static GType etype = 0;
196
- if (etype == 0) {
197
- static const GFlagsValue values[] = {
198
- { GI_VFUNC_MUST_CHAIN_UP, "GI_VFUNC_MUST_CHAIN_UP", "must-chain-up" },
199
- { GI_VFUNC_MUST_OVERRIDE, "GI_VFUNC_MUST_OVERRIDE", "must-override" },
200
- { GI_VFUNC_MUST_NOT_OVERRIDE, "GI_VFUNC_MUST_NOT_OVERRIDE", "must-not-override" },
201
- { GI_VFUNC_THROWS, "GI_VFUNC_THROWS", "throws" },
202
- { 0, NULL, NULL }
203
- };
204
- etype = g_flags_register_static ("GIVFuncInfoFlags", values);
205
- }
206
- return etype;
207
- }
208
-
209
- GType
210
- g_i_function_info_flags_get_type (void)
211
- {
212
- static GType etype = 0;
213
- if (etype == 0) {
214
- static const GFlagsValue values[] = {
215
- { GI_FUNCTION_IS_METHOD, "GI_FUNCTION_IS_METHOD", "is-method" },
216
- { GI_FUNCTION_IS_CONSTRUCTOR, "GI_FUNCTION_IS_CONSTRUCTOR", "is-constructor" },
217
- { GI_FUNCTION_IS_GETTER, "GI_FUNCTION_IS_GETTER", "is-getter" },
218
- { GI_FUNCTION_IS_SETTER, "GI_FUNCTION_IS_SETTER", "is-setter" },
219
- { GI_FUNCTION_WRAPS_VFUNC, "GI_FUNCTION_WRAPS_VFUNC", "wraps-vfunc" },
220
- { GI_FUNCTION_THROWS, "GI_FUNCTION_THROWS", "throws" },
221
- { 0, NULL, NULL }
222
- };
223
- etype = g_flags_register_static ("GIFunctionInfoFlags", values);
224
- }
225
- return etype;
226
- }
227
-
228
-
229
- /* Generated data ends here */
230
-
@@ -1,42 +0,0 @@
1
-
2
- /* Generated by glib-mkenums.rb ($Id$) */
3
-
4
- #ifndef __GOBJECT_INTROSPECTION_ENUM_TYPES_H__
5
- #define __GOBJECT_INTROSPECTION_ENUM_TYPES_H__
6
-
7
- #include <glib-object.h>
8
-
9
- G_BEGIN_DECLS
10
-
11
- /* enumerations from "/usr/include/gobject-introspection-1.0/girepository.h" */
12
- GType g_i_repository_load_flags_get_type (void);
13
- #define G_TYPE_I_REPOSITORY_LOAD_FLAGS (g_i_repository_load_flags_get_type())
14
- GType g_i_repository_error_get_type (void);
15
- #define G_TYPE_I_REPOSITORY_ERROR (g_i_repository_error_get_type())
16
-
17
- /* enumerations from "/usr/include/gobject-introspection-1.0/gitypes.h" */
18
- GType g_i_info_type_get_type (void);
19
- #define G_TYPE_I_INFO_TYPE (g_i_info_type_get_type())
20
- GType g_i_transfer_get_type (void);
21
- #define G_TYPE_I_TRANSFER (g_i_transfer_get_type())
22
- GType g_i_direction_get_type (void);
23
- #define G_TYPE_I_DIRECTION (g_i_direction_get_type())
24
- GType g_i_scope_type_get_type (void);
25
- #define G_TYPE_I_SCOPE_TYPE (g_i_scope_type_get_type())
26
- GType g_i_type_tag_get_type (void);
27
- #define G_TYPE_I_TYPE_TAG (g_i_type_tag_get_type())
28
- GType g_i_array_type_get_type (void);
29
- #define G_TYPE_I_ARRAY_TYPE (g_i_array_type_get_type())
30
- GType g_i_field_info_flags_get_type (void);
31
- #define G_TYPE_I_FIELD_INFO_FLAGS (g_i_field_info_flags_get_type())
32
- GType g_iv_func_info_flags_get_type (void);
33
- #define G_TYPE_IV_FUNC_INFO_FLAGS (g_iv_func_info_flags_get_type())
34
- GType g_i_function_info_flags_get_type (void);
35
- #define G_TYPE_I_FUNCTION_INFO_FLAGS (g_i_function_info_flags_get_type())
36
-
37
- G_END_DECLS
38
-
39
- #endif /* __GOBJECT_INTROSPECTION_ENUM_TYPES_H__ */
40
-
41
- /* Generated data ends here */
42
-
@@ -1,24 +0,0 @@
1
- /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
- /************************************************
3
-
4
- rbgiversion.h -
5
-
6
- This file was generated by mkmf-gnome2.rb.
7
-
8
- ************************************************/
9
-
10
- #ifndef __RBGI_VERSION_H__
11
- #define __RBGI_VERSION_H__
12
-
13
- #define GI_MAJOR_VERSION (1)
14
- #define GI_MINOR_VERSION (46)
15
- #define GI_MICRO_VERSION (0)
16
-
17
- #define GI_CHECK_VERSION(major,minor,micro) \
18
- (GI_MAJOR_VERSION > (major) || \
19
- (GI_MAJOR_VERSION == (major) && GI_MINOR_VERSION > (minor)) || \
20
- (GI_MAJOR_VERSION == (major) && GI_MINOR_VERSION == (minor) && \
21
- GI_MICRO_VERSION >= (micro)))
22
-
23
-
24
- #endif /* __RBGI_VERSION_H__ */