gobject-introspection 3.0.9-x86-mingw32 → 3.1.0-x86-mingw32
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 +4 -4
- data/Rakefile +2 -2
- data/ext/gobject-introspection/rb-gi-argument.c +205 -47
- data/ext/gobject-introspection/rb-gi-constructor-info.c +9 -15
- data/ext/gobject-introspection/rb-gi-function-info.c +147 -46
- data/ext/gobject-introspection/rb-gi-method-info.c +5 -3
- data/ext/gobject-introspection/rb-gi-private.h +3 -1
- data/lib/2.2/gobject_introspection.so +0 -0
- data/lib/2.3/gobject_introspection.so +0 -0
- data/lib/gi.rb +19 -0
- data/lib/gobject-introspection.rb +10 -0
- data/lib/gobject-introspection/callable-info.rb +19 -5
- data/lib/gobject-introspection/loader.rb +113 -82
- data/vendor/local/bin/g-ir-compiler.exe +0 -0
- data/vendor/local/bin/g-ir-generate.exe +0 -0
- data/vendor/local/bin/g-ir-inspect.exe +0 -0
- data/vendor/local/bin/libgirepository-1.0-1.dll +0 -0
- data/vendor/local/lib/girepository-1.0/GIRepository-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GLib-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/Gio-2.0.typelib +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.py +2 -1
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/msvccompiler.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/msvccompiler.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyo +0 -0
- data/vendor/local/lib/libgirepository-1.0.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.dll.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.la +2 -2
- data/vendor/local/lib/pkgconfig/gobject-introspection-1.0.pc +1 -1
- data/vendor/local/lib/pkgconfig/gobject-introspection-no-export-1.0.pc +1 -1
- data/vendor/local/share/gir-1.0/GIRepository-2.0.gir +10 -4
- data/vendor/local/share/gir-1.0/GLib-2.0.gir +939 -162
- data/vendor/local/share/gir-1.0/GObject-2.0.gir +389 -565
- data/vendor/local/share/gir-1.0/Gio-2.0.gir +594 -173
- data/vendor/local/share/gobject-introspection-1.0/gdump.c +8 -1
- data/vendor/local/share/gobject-introspection-1.0/tests/regress.h +13 -0
- metadata +7 -5
@@ -59,6 +59,21 @@ gi_function_info_get_type(void)
|
|
59
59
|
return type;
|
60
60
|
}
|
61
61
|
|
62
|
+
static VALUE
|
63
|
+
rg_set_unlock_gvl(VALUE self, VALUE rb_boolean)
|
64
|
+
{
|
65
|
+
return rb_iv_set(self, "unlock_gvl", rb_boolean);
|
66
|
+
}
|
67
|
+
|
68
|
+
static VALUE
|
69
|
+
rg_unlock_gvl_p(VALUE self)
|
70
|
+
{
|
71
|
+
if (!RVAL2CBOOL(rb_ivar_defined(self, rb_intern("unlock_gvl")))) {
|
72
|
+
rb_iv_set(self, "unlock_gvl", Qfalse);
|
73
|
+
}
|
74
|
+
return rb_iv_get(self, "unlock_gvl");
|
75
|
+
}
|
76
|
+
|
62
77
|
static VALUE
|
63
78
|
rg_symbol(VALUE self)
|
64
79
|
{
|
@@ -665,10 +680,12 @@ out_argument_to_raw_data_interface(GICallableInfo *callable_info,
|
|
665
680
|
GIArgument *argument,
|
666
681
|
gpointer result,
|
667
682
|
GITypeInfo *type_info,
|
668
|
-
G_GNUC_UNUSED GITransfer transfer /* TODO
|
683
|
+
G_GNUC_UNUSED GITransfer transfer /* TODO */,
|
684
|
+
gboolean is_return_value)
|
669
685
|
{
|
670
686
|
GIBaseInfo *interface_info;
|
671
687
|
GIInfoType interface_type;
|
688
|
+
GIFFIReturnValue *ffi_return_value = result;
|
672
689
|
|
673
690
|
interface_info = g_type_info_get_interface(type_info);
|
674
691
|
interface_type = g_base_info_get_type(interface_info);
|
@@ -687,7 +704,11 @@ out_argument_to_raw_data_interface(GICallableInfo *callable_info,
|
|
687
704
|
g_base_info_get_name(interface_info));
|
688
705
|
break;
|
689
706
|
case GI_INFO_TYPE_ENUM:
|
690
|
-
|
707
|
+
if (is_return_value) {
|
708
|
+
ffi_return_value->v_ulong = argument->v_int;
|
709
|
+
} else {
|
710
|
+
*((gint *)result) = argument->v_int;
|
711
|
+
}
|
691
712
|
break;
|
692
713
|
case GI_INFO_TYPE_FLAGS:
|
693
714
|
case GI_INFO_TYPE_OBJECT:
|
@@ -725,15 +746,50 @@ out_argument_to_raw_data_interface(GICallableInfo *callable_info,
|
|
725
746
|
g_base_info_unref(interface_info);
|
726
747
|
}
|
727
748
|
|
749
|
+
/*
|
750
|
+
We need to cast from different type for return value. (We don't
|
751
|
+
need it for out arguments.) Because of libffi specification:
|
752
|
+
|
753
|
+
https://github.com/libffi/libffi/blob/master/doc/libffi.texi#L190
|
754
|
+
|
755
|
+
@var{rvalue} is a pointer to a chunk of memory that will hold the
|
756
|
+
result of the function call. This must be large enough to hold the
|
757
|
+
result, no smaller than the system register size (generally 32 or 64
|
758
|
+
bits), and must be suitably aligned; it is the caller's responsibility
|
759
|
+
to ensure this. If @var{cif} declares that the function returns
|
760
|
+
@code{void} (using @code{ffi_type_void}), then @var{rvalue} is
|
761
|
+
ignored.
|
762
|
+
|
763
|
+
https://github.com/libffi/libffi/blob/master/doc/libffi.texi#L198
|
764
|
+
|
765
|
+
In most situations, @samp{libffi} will handle promotion according to
|
766
|
+
the ABI. However, for historical reasons, there is a special case
|
767
|
+
with return values that must be handled by your code. In particular,
|
768
|
+
for integral (not @code{struct}) types that are narrower than the
|
769
|
+
system register size, the return value will be widened by
|
770
|
+
@samp{libffi}. @samp{libffi} provides a type, @code{ffi_arg}, that
|
771
|
+
can be used as the return type. For example, if the CIF was defined
|
772
|
+
with a return type of @code{char}, @samp{libffi} will try to store a
|
773
|
+
full @code{ffi_arg} into the return value.
|
774
|
+
|
775
|
+
See also:
|
776
|
+
* https://github.com/ruby-gnome2/ruby-gnome2/issues/758#issuecomment-243149237
|
777
|
+
* https://github.com/libffi/libffi/pull/216
|
778
|
+
|
779
|
+
This ffi_return_value case implementation is based on
|
780
|
+
gi_type_info_extract_ffi_return_value().
|
781
|
+
*/
|
728
782
|
static void
|
729
783
|
out_argument_to_raw_data(GICallableInfo *callable_info,
|
730
784
|
VALUE rb_result,
|
731
785
|
gpointer result,
|
732
786
|
GITypeInfo *type_info,
|
733
|
-
GITransfer transfer
|
787
|
+
GITransfer transfer,
|
788
|
+
gboolean is_return_value)
|
734
789
|
{
|
735
790
|
GIArgument argument;
|
736
791
|
GITypeTag type_tag;
|
792
|
+
GIFFIReturnValue *ffi_return_value = result;
|
737
793
|
|
738
794
|
rb_gi_value_argument_from_ruby(&argument,
|
739
795
|
type_info,
|
@@ -745,25 +801,53 @@ out_argument_to_raw_data(GICallableInfo *callable_info,
|
|
745
801
|
g_assert_not_reached();
|
746
802
|
break;
|
747
803
|
case GI_TYPE_TAG_BOOLEAN:
|
748
|
-
|
804
|
+
if (is_return_value) {
|
805
|
+
ffi_return_value->v_ulong = argument.v_boolean;
|
806
|
+
} else {
|
807
|
+
*((gboolean *)result) = argument.v_boolean;
|
808
|
+
}
|
749
809
|
break;
|
750
810
|
case GI_TYPE_TAG_INT8:
|
751
|
-
|
811
|
+
if (is_return_value) {
|
812
|
+
ffi_return_value->v_long = argument.v_int8;
|
813
|
+
} else {
|
814
|
+
*((gint8 *)result) = argument.v_int8;
|
815
|
+
}
|
752
816
|
break;
|
753
817
|
case GI_TYPE_TAG_UINT8:
|
754
|
-
|
818
|
+
if (is_return_value) {
|
819
|
+
ffi_return_value->v_ulong = argument.v_uint8;
|
820
|
+
} else {
|
821
|
+
*((guint8 *)result) = argument.v_uint8;
|
822
|
+
}
|
755
823
|
break;
|
756
824
|
case GI_TYPE_TAG_INT16:
|
757
|
-
|
825
|
+
if (is_return_value) {
|
826
|
+
ffi_return_value->v_long = argument.v_int16;
|
827
|
+
} else {
|
828
|
+
*((gint16 *)result) = argument.v_int16;
|
829
|
+
}
|
758
830
|
break;
|
759
831
|
case GI_TYPE_TAG_UINT16:
|
760
|
-
|
832
|
+
if (is_return_value) {
|
833
|
+
ffi_return_value->v_ulong = argument.v_uint16;
|
834
|
+
} else {
|
835
|
+
*((guint16 *)result) = argument.v_uint16;
|
836
|
+
}
|
761
837
|
break;
|
762
838
|
case GI_TYPE_TAG_INT32:
|
763
|
-
|
839
|
+
if (is_return_value) {
|
840
|
+
ffi_return_value->v_long = argument.v_int32;
|
841
|
+
} else {
|
842
|
+
*((gint32 *)result) = argument.v_int32;
|
843
|
+
}
|
764
844
|
break;
|
765
845
|
case GI_TYPE_TAG_UINT32:
|
766
|
-
|
846
|
+
if (is_return_value) {
|
847
|
+
ffi_return_value->v_ulong = argument.v_uint32;
|
848
|
+
} else {
|
849
|
+
*((guint32 *)result) = argument.v_uint32;
|
850
|
+
}
|
767
851
|
break;
|
768
852
|
case GI_TYPE_TAG_INT64:
|
769
853
|
*((gint64 *)result) = argument.v_int64;
|
@@ -778,32 +862,57 @@ out_argument_to_raw_data(GICallableInfo *callable_info,
|
|
778
862
|
*((gdouble *)result) = argument.v_double;
|
779
863
|
break;
|
780
864
|
case GI_TYPE_TAG_GTYPE:
|
781
|
-
|
865
|
+
if (is_return_value) {
|
866
|
+
ffi_return_value->v_ulong = argument.v_size;
|
867
|
+
} else {
|
868
|
+
*((gsize *)result) = argument.v_size;
|
869
|
+
}
|
782
870
|
break;
|
783
871
|
case GI_TYPE_TAG_UTF8:
|
784
872
|
case GI_TYPE_TAG_FILENAME:
|
785
|
-
|
873
|
+
if (is_return_value) {
|
874
|
+
ffi_return_value->v_ulong = (gulong)(argument.v_string);
|
875
|
+
} else {
|
876
|
+
*((gchar **)result) = argument.v_string;
|
877
|
+
}
|
786
878
|
break;
|
787
879
|
case GI_TYPE_TAG_ARRAY:
|
788
|
-
|
880
|
+
if (is_return_value) {
|
881
|
+
ffi_return_value->v_ulong = (gulong)(argument.v_pointer);
|
882
|
+
} else {
|
883
|
+
*((gpointer *)result) = argument.v_pointer;
|
884
|
+
}
|
789
885
|
break;
|
790
886
|
case GI_TYPE_TAG_INTERFACE:
|
791
887
|
out_argument_to_raw_data_interface(callable_info,
|
792
888
|
&argument,
|
793
889
|
result,
|
794
890
|
type_info,
|
795
|
-
transfer
|
891
|
+
transfer,
|
892
|
+
is_return_value);
|
796
893
|
break;
|
797
894
|
case GI_TYPE_TAG_GLIST:
|
798
895
|
case GI_TYPE_TAG_GSLIST:
|
799
896
|
case GI_TYPE_TAG_GHASH:
|
800
|
-
|
897
|
+
if (is_return_value) {
|
898
|
+
ffi_return_value->v_ulong = (gulong)(argument.v_pointer);
|
899
|
+
} else {
|
900
|
+
*((gpointer *)result) = argument.v_pointer;
|
901
|
+
}
|
801
902
|
break;
|
802
903
|
case GI_TYPE_TAG_ERROR:
|
803
|
-
|
904
|
+
if (is_return_value) {
|
905
|
+
ffi_return_value->v_ulong = (gulong)(argument.v_pointer);
|
906
|
+
} else {
|
907
|
+
*((GError **)result) = argument.v_pointer;
|
908
|
+
}
|
804
909
|
break;
|
805
910
|
case GI_TYPE_TAG_UNICHAR:
|
806
|
-
|
911
|
+
if (is_return_value) {
|
912
|
+
ffi_return_value->v_ulong = argument.v_uint32;
|
913
|
+
} else {
|
914
|
+
*((gunichar *)result) = argument.v_uint32;
|
915
|
+
}
|
807
916
|
break;
|
808
917
|
default:
|
809
918
|
g_assert_not_reached();
|
@@ -834,13 +943,15 @@ out_arguments_to_raw_data(GICallableInfo *callable_info,
|
|
834
943
|
rb_return_value,
|
835
944
|
result,
|
836
945
|
return_type_info,
|
837
|
-
transfer
|
946
|
+
transfer,
|
947
|
+
TRUE);
|
838
948
|
} else {
|
839
949
|
out_argument_to_raw_data(callable_info,
|
840
950
|
RARRAY_AREF(rb_results, i_rb_result),
|
841
951
|
result,
|
842
952
|
return_type_info,
|
843
|
-
transfer
|
953
|
+
transfer,
|
954
|
+
TRUE);
|
844
955
|
i_rb_result++;
|
845
956
|
}
|
846
957
|
}
|
@@ -866,7 +977,8 @@ out_arguments_to_raw_data(GICallableInfo *callable_info,
|
|
866
977
|
RARRAY_AREF(rb_results, i_rb_result),
|
867
978
|
argument->v_pointer,
|
868
979
|
type_info,
|
869
|
-
transfer
|
980
|
+
transfer,
|
981
|
+
FALSE);
|
870
982
|
i_rb_result++;
|
871
983
|
g_base_info_unref(type_info);
|
872
984
|
}
|
@@ -1194,7 +1306,7 @@ arguments_free(VALUE rb_arguments,
|
|
1194
1306
|
GIArgument *argument;
|
1195
1307
|
|
1196
1308
|
rb_arg_index = metadata->rb_arg_index;
|
1197
|
-
if (
|
1309
|
+
if (RARRAY_LEN(rb_arguments) > rb_arg_index) {
|
1198
1310
|
rb_argument = RARRAY_PTR(rb_arguments)[rb_arg_index];
|
1199
1311
|
}
|
1200
1312
|
argument = &(g_array_index(in_args, GIArgument, in_arg_index));
|
@@ -1267,8 +1379,12 @@ gobject_based_p(GIBaseInfo *info)
|
|
1267
1379
|
}
|
1268
1380
|
|
1269
1381
|
VALUE
|
1270
|
-
rb_gi_function_info_invoke_raw(GIFunctionInfo *info,
|
1271
|
-
|
1382
|
+
rb_gi_function_info_invoke_raw(GIFunctionInfo *info,
|
1383
|
+
VALUE rb_info,
|
1384
|
+
VALUE rb_receiver,
|
1385
|
+
VALUE rb_arguments,
|
1386
|
+
GIArgument *return_value,
|
1387
|
+
VALUE *rb_return_value)
|
1272
1388
|
{
|
1273
1389
|
GICallableInfo *callable_info;
|
1274
1390
|
GIArgument receiver;
|
@@ -1278,26 +1394,9 @@ rb_gi_function_info_invoke_raw(GIFunctionInfo *info, VALUE rb_options,
|
|
1278
1394
|
gboolean succeeded;
|
1279
1395
|
GError *error = NULL;
|
1280
1396
|
gboolean unlock_gvl = FALSE;
|
1281
|
-
VALUE rb_receiver, rb_arguments, rb_unlock_gvl;
|
1282
1397
|
gboolean rb_receiver_is_class = FALSE;
|
1283
1398
|
|
1284
|
-
|
1285
|
-
rb_receiver = Qnil;
|
1286
|
-
rb_arguments = rb_options;
|
1287
|
-
rb_unlock_gvl = Qnil;
|
1288
|
-
} else if (NIL_P(rb_options)) {
|
1289
|
-
rb_receiver = Qnil;
|
1290
|
-
rb_arguments = rb_ary_new();
|
1291
|
-
rb_unlock_gvl = Qnil;
|
1292
|
-
} else {
|
1293
|
-
rb_options = rbg_check_hash_type(rb_options);
|
1294
|
-
rbg_scan_options(rb_options,
|
1295
|
-
"receiver", &rb_receiver,
|
1296
|
-
"arguments", &rb_arguments,
|
1297
|
-
"unlock_gvl", &rb_unlock_gvl,
|
1298
|
-
NULL);
|
1299
|
-
}
|
1300
|
-
|
1399
|
+
unlock_gvl = RVAL2CBOOL(rb_funcall(rb_info, rb_intern("unlock_gvl?"), 0));
|
1301
1400
|
if (NIL_P(rb_receiver)) {
|
1302
1401
|
receiver.v_pointer = NULL;
|
1303
1402
|
} else {
|
@@ -1314,9 +1413,6 @@ rb_gi_function_info_invoke_raw(GIFunctionInfo *info, VALUE rb_options,
|
|
1314
1413
|
}
|
1315
1414
|
}
|
1316
1415
|
rb_arguments = rbg_to_array(rb_arguments);
|
1317
|
-
if (!NIL_P(rb_unlock_gvl) && RVAL2CBOOL(rb_unlock_gvl)) {
|
1318
|
-
unlock_gvl = TRUE;
|
1319
|
-
}
|
1320
1416
|
|
1321
1417
|
callable_info = (GICallableInfo *)info;
|
1322
1418
|
arguments_init(&in_args, &out_args, &args_metadata);
|
@@ -1382,7 +1478,7 @@ rb_gi_function_info_invoke_raw(GIFunctionInfo *info, VALUE rb_options,
|
|
1382
1478
|
}
|
1383
1479
|
|
1384
1480
|
static VALUE
|
1385
|
-
rg_invoke(VALUE self, VALUE
|
1481
|
+
rg_invoke(VALUE self, VALUE rb_arguments)
|
1386
1482
|
{
|
1387
1483
|
GIFunctionInfo *info;
|
1388
1484
|
VALUE rb_out_args;
|
@@ -1391,7 +1487,9 @@ rg_invoke(VALUE self, VALUE rb_options)
|
|
1391
1487
|
info = SELF(self);
|
1392
1488
|
/* TODO: use rb_protect() */
|
1393
1489
|
rb_out_args = rb_gi_function_info_invoke_raw(info,
|
1394
|
-
|
1490
|
+
self,
|
1491
|
+
Qnil,
|
1492
|
+
rb_arguments,
|
1395
1493
|
NULL,
|
1396
1494
|
&rb_return_value);
|
1397
1495
|
|
@@ -1426,6 +1524,9 @@ rb_gi_function_info_init(VALUE rb_mGI, VALUE rb_cGICallableInfo)
|
|
1426
1524
|
callback_finders = g_ptr_array_new();
|
1427
1525
|
rb_gi_callback_register_finder(source_func_callback_finder);
|
1428
1526
|
|
1527
|
+
RG_DEF_METHOD(set_unlock_gvl, 1);
|
1528
|
+
RG_DEF_METHOD_P(unlock_gvl, 0);
|
1529
|
+
|
1429
1530
|
RG_DEF_METHOD(symbol, 0);
|
1430
1531
|
RG_DEF_METHOD(flags, 0);
|
1431
1532
|
RG_DEF_METHOD(property, 0);
|
@@ -36,7 +36,7 @@ gi_method_info_get_type(void)
|
|
36
36
|
}
|
37
37
|
|
38
38
|
static VALUE
|
39
|
-
rg_invoke(VALUE self, VALUE
|
39
|
+
rg_invoke(VALUE self, VALUE rb_receiver, VALUE rb_arguments)
|
40
40
|
{
|
41
41
|
GIFunctionInfo *info;
|
42
42
|
VALUE rb_out_args;
|
@@ -46,7 +46,9 @@ rg_invoke(VALUE self, VALUE rb_options)
|
|
46
46
|
|
47
47
|
/* TODO: use rb_protect */
|
48
48
|
rb_out_args = rb_gi_function_info_invoke_raw(info,
|
49
|
-
|
49
|
+
self,
|
50
|
+
rb_receiver,
|
51
|
+
rb_arguments,
|
50
52
|
NULL,
|
51
53
|
&rb_return_value);
|
52
54
|
|
@@ -76,5 +78,5 @@ rb_gi_method_info_init(VALUE rb_mGI, VALUE rb_cGIFunctionInfo)
|
|
76
78
|
G_DEF_CLASS_WITH_PARENT(GI_TYPE_METHOD_INFO, "MethodInfo", rb_mGI,
|
77
79
|
rb_cGIFunctionInfo);
|
78
80
|
|
79
|
-
RG_DEF_METHOD(invoke,
|
81
|
+
RG_DEF_METHOD(invoke, 2);
|
80
82
|
}
|
@@ -93,7 +93,9 @@ void rb_gi_repository_init (VALUE rb_mGI);
|
|
93
93
|
void rb_gi_loader_init (VALUE rb_mGI);
|
94
94
|
|
95
95
|
VALUE rb_gi_function_info_invoke_raw (GIFunctionInfo *info,
|
96
|
-
VALUE
|
96
|
+
VALUE rb_info,
|
97
|
+
VALUE rb_receiver,
|
98
|
+
VALUE rb_arguments,
|
97
99
|
GIArgument *return_value,
|
98
100
|
VALUE *rb_return_value);
|
99
101
|
|
Binary file
|
Binary file
|
data/lib/gi.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (C) 2016 Ruby-GNOME2 Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
require "gobject-introspection"
|
18
|
+
|
19
|
+
GI = GObjectIntrospection
|
@@ -47,6 +47,16 @@ GObjectIntrospection.prepend_typelib_path(vendor_girepository_dir)
|
|
47
47
|
|
48
48
|
module GObjectIntrospection
|
49
49
|
LOG_DOMAIN = "GObjectIntrospection"
|
50
|
+
|
51
|
+
class << self
|
52
|
+
def load(namespace, options={})
|
53
|
+
base_module = Module.new
|
54
|
+
loader = Loader.new(base_module)
|
55
|
+
loader.version = options[:version]
|
56
|
+
loader.load(namespace)
|
57
|
+
base_module
|
58
|
+
end
|
59
|
+
end
|
50
60
|
end
|
51
61
|
GLib::Log.set_log_domain(GObjectIntrospection::LOG_DOMAIN)
|
52
62
|
|
@@ -41,11 +41,7 @@ module GObjectIntrospection
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def require_callback?
|
44
|
-
|
45
|
-
arg.direction == Direction::IN and
|
46
|
-
arg.scope != ScopeType::INVALID and
|
47
|
-
!arg.may_be_null?
|
48
|
-
end
|
44
|
+
(@require_callback ||= compute_require_callback) == :required
|
49
45
|
end
|
50
46
|
|
51
47
|
def out_args
|
@@ -63,6 +59,12 @@ module GObjectIntrospection
|
|
63
59
|
out_args.size
|
64
60
|
end
|
65
61
|
|
62
|
+
def have_return_value?
|
63
|
+
return true if return_type.tag != TypeTag::VOID
|
64
|
+
return true if return_type.pointer?
|
65
|
+
not n_out_args.zero?
|
66
|
+
end
|
67
|
+
|
66
68
|
private
|
67
69
|
def compute_in_args
|
68
70
|
array_length_indexes = []
|
@@ -103,5 +105,17 @@ module GObjectIntrospection
|
|
103
105
|
end
|
104
106
|
end
|
105
107
|
end
|
108
|
+
|
109
|
+
def compute_require_callback
|
110
|
+
args.each do |arg|
|
111
|
+
if arg.direction == Direction::IN and
|
112
|
+
arg.scope != ScopeType::INVALID and
|
113
|
+
!arg.may_be_null?
|
114
|
+
return :required
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
:not_required
|
119
|
+
end
|
106
120
|
end
|
107
121
|
end
|