gir_ffi 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/ffi-glib.rb +1 -0
- data/lib/ffi-glib/array.rb +49 -10
- data/lib/ffi-glib/hash_table.rb +19 -5
- data/lib/ffi-glib/list.rb +4 -1
- data/lib/ffi-glib/list_methods.rb +8 -1
- data/lib/ffi-glib/s_list.rb +4 -1
- data/lib/ffi-glib/strv.rb +31 -0
- data/lib/ffi-gobject.rb +2 -35
- data/lib/ffi-gobject/base.rb +38 -0
- data/lib/ffi-gobject/object.rb +28 -30
- data/lib/ffi-gobject/value.rb +72 -56
- data/lib/ffi-gobject_introspection/i_struct_info.rb +11 -1
- data/lib/ffi-gobject_introspection/lib.rb +3 -1
- data/lib/gir_ffi/arg_helper.rb +2 -19
- data/lib/gir_ffi/builder/argument.rb +239 -305
- data/lib/gir_ffi/builder/argument/base.rb +12 -9
- data/lib/gir_ffi/builder/argument/in_base.rb +2 -6
- data/lib/gir_ffi/builder/argument/in_out_base.rb +2 -5
- data/lib/gir_ffi/builder/argument/out_base.rb +0 -11
- data/lib/gir_ffi/builder/field.rb +55 -0
- data/lib/gir_ffi/builder/function.rb +7 -7
- data/lib/gir_ffi/builder/module.rb +5 -7
- data/lib/gir_ffi/builder/type/object.rb +0 -33
- data/lib/gir_ffi/builder/type/registered_type.rb +0 -16
- data/lib/gir_ffi/builder/type/struct_based.rb +3 -3
- data/lib/gir_ffi/builder/type/unintrospectable.rb +1 -1
- data/lib/gir_ffi/builder/type/with_layout.rb +26 -58
- data/lib/gir_ffi/builder/type/with_methods.rb +9 -11
- data/lib/gir_ffi/class_base.rb +24 -6
- data/lib/gir_ffi/ffi_ext/pointer.rb +15 -0
- data/lib/gir_ffi/in_pointer.rb +10 -5
- data/lib/gir_ffi/info_ext/i_field_info.rb +15 -0
- data/lib/gir_ffi/info_ext/i_type_info.rb +26 -0
- data/lib/gir_ffi/method_stubber.rb +18 -0
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/variable_name_generator.rb +2 -0
- data/lib/gir_ffi/version.rb +1 -1
- data/test/builder_test.rb +6 -5
- data/test/ffi-glib/array_test.rb +40 -5
- data/test/ffi-glib/hash_table_test.rb +27 -3
- data/test/ffi-glib/list_test.rb +23 -0
- data/test/ffi-glib/strv_test.rb +41 -0
- data/test/ffi-gobject/gobject_test.rb +26 -22
- data/test/ffi-gobject/value_test.rb +26 -1
- data/test/ffi-gobject_introspection/lib_test.rb +10 -0
- data/test/gir_ffi_test_helper.rb +1 -1
- data/test/integration/derived_classes_test.rb +31 -0
- data/test/integration/generated_gimarshallingtests_test.rb +29 -15
- data/test/integration/generated_gio_test.rb +5 -6
- data/test/integration/generated_regress_test.rb +11 -7
- data/test/integration/method_lookup_test.rb +32 -0
- data/test/interface_type_builder_test.rb +1 -1
- data/test/test_helper.rb +38 -0
- data/test/unit/argument_builder_test.rb +16 -4
- data/test/unit/class_base_test.rb +48 -0
- data/test/unit/function_builder_test.rb +144 -4
- data/test/unit/hash_table_element_type_provider_test.rb +16 -0
- data/test/unit/i_field_info_test.rb +39 -0
- data/test/unit/i_type_info_test.rb +23 -0
- data/test/unit/list_element_type_provider_test.rb +13 -0
- data/test/unit/module_builder_test.rb +1 -1
- data/test/unit/object_type_builder_test.rb +0 -17
- data/test/unit/struct_builder_test.rb +27 -39
- metadata +118 -60
- data/lib/gir_ffi/builder/argument/hash_table_base.rb +0 -20
- data/lib/gir_ffi/builder/argument/list_base.rb +0 -16
- data/test/class_base_test.rb +0 -10
- data/test/function_definition_builder_test.rb +0 -130
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.2.3 / 2011-12-31
|
2
|
+
|
3
|
+
* Fix issue #7: methods that take GValues will autoconvert other values.
|
4
|
+
* Fix method lookup when include'ing a module that is an Interface.
|
5
|
+
* Various refactorings.
|
6
|
+
|
1
7
|
== 0.2.2 / 2011-12-07
|
2
8
|
|
3
9
|
* Fix issue #19: Check if a GLib::PtrArray.add method was generated
|
data/lib/ffi-glib.rb
CHANGED
data/lib/ffi-glib/array.rb
CHANGED
@@ -6,14 +6,17 @@ module GLib
|
|
6
6
|
class Array
|
7
7
|
include Enumerable
|
8
8
|
|
9
|
-
|
9
|
+
attr_reader :element_type
|
10
|
+
def element_type= val
|
11
|
+
@element_type = val
|
12
|
+
check_element_size_match
|
13
|
+
end
|
10
14
|
|
11
15
|
class << self
|
12
16
|
undef :new
|
13
17
|
def new type
|
14
|
-
|
15
|
-
wrap
|
16
|
-
it.element_type = type}
|
18
|
+
ptr = Lib.g_array_new(0, 0, calculated_element_size(type))
|
19
|
+
wrap type, ptr
|
17
20
|
end
|
18
21
|
end
|
19
22
|
|
@@ -24,16 +27,52 @@ module GLib
|
|
24
27
|
self
|
25
28
|
end
|
26
29
|
|
27
|
-
#
|
28
|
-
def
|
29
|
-
|
30
|
+
# Re-implementation of the g_array_index macro
|
31
|
+
def index idx
|
32
|
+
ptr = @struct[:data].get_pointer(idx * get_element_size)
|
33
|
+
GirFFI::ArgHelper.cast_from_pointer(element_type, ptr)
|
34
|
+
end
|
35
|
+
|
36
|
+
def each
|
37
|
+
@struct[:len].times.each do |idx|
|
38
|
+
yield index(idx)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_element_size
|
43
|
+
self.class.get_element_size self
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.wrap elmttype, ptr
|
47
|
+
super(ptr).tap do |it|
|
48
|
+
break if it.nil?
|
49
|
+
it.element_type = elmttype
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.from elmtype, it
|
54
|
+
case it
|
55
|
+
when self then it
|
56
|
+
when FFI::Pointer then wrap elmtype, it
|
57
|
+
else self.new(elmtype).tap {|arr| arr.append_vals it }
|
58
|
+
end
|
30
59
|
end
|
31
60
|
|
32
61
|
private
|
33
62
|
|
34
|
-
def
|
35
|
-
GirFFI::
|
36
|
-
|
63
|
+
def self.calculated_element_size type
|
64
|
+
ffi_type = GirFFI::TypeMap.map_basic_type_or_string(type)
|
65
|
+
FFI.type_size(ffi_type)
|
66
|
+
end
|
67
|
+
|
68
|
+
def calculated_element_size
|
69
|
+
self.class.calculated_element_size self.element_type
|
70
|
+
end
|
71
|
+
|
72
|
+
def check_element_size_match
|
73
|
+
unless calculated_element_size == self.get_element_size
|
74
|
+
raise "Element sizes do not match"
|
75
|
+
end
|
37
76
|
end
|
38
77
|
end
|
39
78
|
end
|
data/lib/ffi-glib/hash_table.rb
CHANGED
@@ -37,26 +37,40 @@ module GLib
|
|
37
37
|
else
|
38
38
|
[nil, nil]
|
39
39
|
end
|
40
|
-
wrap
|
40
|
+
wrap [keytype, valtype], Lib.g_hash_table_new(hash_fn, eq_fn)
|
41
41
|
end
|
42
42
|
|
43
|
-
def wrap
|
43
|
+
def wrap types, ptr
|
44
44
|
super(ptr).tap do |it|
|
45
|
-
|
45
|
+
return nil if it.nil?
|
46
|
+
keytype, valtype = *types
|
46
47
|
it.key_type = keytype
|
47
48
|
it.value_type = valtype
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
51
|
-
def from_hash
|
52
|
+
def from_hash types, hash
|
53
|
+
keytype, valtype = *types
|
52
54
|
return nil if hash.nil?
|
53
|
-
|
55
|
+
if hash.is_a? self
|
56
|
+
hash.key_type = keytype
|
57
|
+
hash.value_type = valtype
|
58
|
+
return hash
|
59
|
+
end
|
54
60
|
ghash = self.new keytype, valtype
|
55
61
|
hash.each do |key, val|
|
56
62
|
ghash.insert key, val
|
57
63
|
end
|
58
64
|
ghash
|
59
65
|
end
|
66
|
+
|
67
|
+
def from types, it
|
68
|
+
if it.is_a? FFI::Pointer
|
69
|
+
wrap types, it
|
70
|
+
else
|
71
|
+
from_hash types, it
|
72
|
+
end
|
73
|
+
end
|
60
74
|
end
|
61
75
|
end
|
62
76
|
end
|
data/lib/ffi-glib/list.rb
CHANGED
data/lib/ffi-glib/s_list.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module GLib
|
2
|
+
# Represents a null-terminated array of strings.
|
3
|
+
class Strv
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
POINTER_SIZE = FFI.type_size(:pointer)
|
7
|
+
|
8
|
+
def initialize ptr
|
9
|
+
@ptr = ptr
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_ptr
|
13
|
+
@ptr
|
14
|
+
end
|
15
|
+
|
16
|
+
def each
|
17
|
+
return if @ptr.null?
|
18
|
+
offset = 0
|
19
|
+
loop do
|
20
|
+
ptr = @ptr.get_pointer offset
|
21
|
+
break if ptr.null?
|
22
|
+
yield ptr.read_string
|
23
|
+
offset += POINTER_SIZE
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.wrap ptr
|
28
|
+
self.new ptr
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ffi-gobject.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
GirFFI.setup :GObject
|
2
2
|
|
3
|
+
require 'ffi-gobject/base'
|
4
|
+
|
3
5
|
require 'ffi-gobject/value'
|
4
6
|
require 'ffi-gobject/initially_unowned'
|
5
7
|
require 'ffi-gobject/closure'
|
@@ -83,39 +85,4 @@ module GObject
|
|
83
85
|
[:pointer, ClosureMarshal], :void
|
84
86
|
end
|
85
87
|
|
86
|
-
TYPE_INVALID = type_from_name("invalid")
|
87
|
-
TYPE_NONE = type_from_name("void")
|
88
|
-
TYPE_INTERFACE = type_from_name("GInterface")
|
89
|
-
TYPE_CHAR = type_from_name("gchar")
|
90
|
-
TYPE_UCHAR = type_from_name("guchar")
|
91
|
-
TYPE_BOOLEAN = type_from_name("gboolean")
|
92
|
-
TYPE_INT = type_from_name("gint")
|
93
|
-
TYPE_UINT = type_from_name("guint")
|
94
|
-
TYPE_LONG = type_from_name("glong")
|
95
|
-
TYPE_ULONG = type_from_name("gulong")
|
96
|
-
TYPE_INT64 = type_from_name("gint64")
|
97
|
-
TYPE_UINT64 = type_from_name("guint64")
|
98
|
-
TYPE_ENUM = type_from_name("GEnum")
|
99
|
-
TYPE_FLAGS = type_from_name("GFlags")
|
100
|
-
TYPE_FLOAT = type_from_name("gfloat")
|
101
|
-
TYPE_DOUBLE = type_from_name("gdouble")
|
102
|
-
TYPE_STRING = type_from_name("gchararray")
|
103
|
-
TYPE_POINTER = type_from_name("gpointer")
|
104
|
-
TYPE_BOXED = type_from_name("GBoxed")
|
105
|
-
TYPE_PARAM = type_from_name("GParam")
|
106
|
-
TYPE_OBJECT = type_from_name("GObject")
|
107
|
-
TYPE_GTYPE = type_from_name("GType")
|
108
|
-
TYPE_VARIANT = type_from_name("GVariant")
|
109
|
-
TYPE_HASH_TABLE = type_from_name("GHashTable")
|
110
|
-
|
111
|
-
TYPE_TAG_TO_GTYPE = {
|
112
|
-
:void => TYPE_NONE,
|
113
|
-
:gboolean => TYPE_BOOLEAN,
|
114
|
-
:gint32 => TYPE_INT,
|
115
|
-
:gfloat => TYPE_FLOAT,
|
116
|
-
:gdouble => TYPE_DOUBLE,
|
117
|
-
:utf8 => TYPE_STRING,
|
118
|
-
:ghash => TYPE_HASH_TABLE,
|
119
|
-
:glist => TYPE_POINTER
|
120
|
-
}
|
121
88
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module GObject
|
2
|
+
TYPE_INVALID = type_from_name("invalid")
|
3
|
+
TYPE_NONE = type_from_name("void")
|
4
|
+
TYPE_INTERFACE = type_from_name("GInterface")
|
5
|
+
TYPE_CHAR = type_from_name("gchar")
|
6
|
+
TYPE_UCHAR = type_from_name("guchar")
|
7
|
+
TYPE_BOOLEAN = type_from_name("gboolean")
|
8
|
+
TYPE_INT = type_from_name("gint")
|
9
|
+
TYPE_UINT = type_from_name("guint")
|
10
|
+
TYPE_LONG = type_from_name("glong")
|
11
|
+
TYPE_ULONG = type_from_name("gulong")
|
12
|
+
TYPE_INT64 = type_from_name("gint64")
|
13
|
+
TYPE_UINT64 = type_from_name("guint64")
|
14
|
+
TYPE_ENUM = type_from_name("GEnum")
|
15
|
+
TYPE_FLAGS = type_from_name("GFlags")
|
16
|
+
TYPE_FLOAT = type_from_name("gfloat")
|
17
|
+
TYPE_DOUBLE = type_from_name("gdouble")
|
18
|
+
TYPE_STRING = type_from_name("gchararray")
|
19
|
+
TYPE_POINTER = type_from_name("gpointer")
|
20
|
+
TYPE_BOXED = type_from_name("GBoxed")
|
21
|
+
TYPE_PARAM = type_from_name("GParam")
|
22
|
+
TYPE_OBJECT = type_from_name("GObject")
|
23
|
+
TYPE_GTYPE = type_from_name("GType")
|
24
|
+
TYPE_VARIANT = type_from_name("GVariant")
|
25
|
+
TYPE_STRV = GLib.strv_get_type
|
26
|
+
TYPE_HASH_TABLE = type_from_name("GHashTable")
|
27
|
+
|
28
|
+
TYPE_TAG_TO_GTYPE = {
|
29
|
+
:void => TYPE_NONE,
|
30
|
+
:gboolean => TYPE_BOOLEAN,
|
31
|
+
:gint32 => TYPE_INT,
|
32
|
+
:gfloat => TYPE_FLOAT,
|
33
|
+
:gdouble => TYPE_DOUBLE,
|
34
|
+
:utf8 => TYPE_STRING,
|
35
|
+
:ghash => TYPE_HASH_TABLE,
|
36
|
+
:glist => TYPE_POINTER
|
37
|
+
}
|
38
|
+
end
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -7,41 +7,21 @@ module GObject
|
|
7
7
|
_setup_instance_method "set_property"
|
8
8
|
|
9
9
|
def get_property_with_override property_name
|
10
|
-
|
11
|
-
|
12
|
-
v = Helper.gvalue_for_type_info type
|
13
|
-
get_property_without_override property_name, v
|
10
|
+
type = get_property_type property_name
|
11
|
+
gvalue = Helper.gvalue_for_type_info type
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
GLib::HashTable.wrap type.param_type(0).tag, type.param_type(1).tag,
|
19
|
-
val.to_ptr
|
20
|
-
when :glist
|
21
|
-
GLib::List.wrap type.param_type(0).tag, val
|
22
|
-
else
|
23
|
-
val
|
24
|
-
end
|
13
|
+
get_property_without_override property_name, gvalue
|
14
|
+
|
15
|
+
adjust_value_to_type gvalue.ruby_value, type
|
25
16
|
end
|
26
17
|
|
27
18
|
def set_property_with_override property_name, value
|
28
|
-
|
29
|
-
|
30
|
-
v = Helper.gvalue_for_type_info type
|
19
|
+
type = get_property_type property_name
|
20
|
+
gvalue = Helper.gvalue_for_type_info type
|
31
21
|
|
32
|
-
|
33
|
-
when :glist
|
34
|
-
lst = GLib::List.from_array type.param_type(0).tag, value
|
35
|
-
v.set_value lst.to_ptr
|
36
|
-
when :ghash
|
37
|
-
hsh = GLib::HashTable.from_hash type.param_type(0).tag,
|
38
|
-
type.param_type(1).tag, value
|
39
|
-
v.set_value hsh.to_ptr
|
40
|
-
else
|
41
|
-
v.set_value value
|
42
|
-
end
|
22
|
+
gvalue.set_value adjust_value_to_type(value, type)
|
43
23
|
|
44
|
-
set_property_without_override property_name,
|
24
|
+
set_property_without_override property_name, gvalue
|
45
25
|
end
|
46
26
|
|
47
27
|
alias get_property_without_override get_property
|
@@ -49,6 +29,24 @@ module GObject
|
|
49
29
|
|
50
30
|
alias set_property_without_override set_property
|
51
31
|
alias set_property set_property_with_override
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def get_property_type property_name
|
36
|
+
prop = self.class._find_property property_name
|
37
|
+
prop.property_type
|
38
|
+
end
|
39
|
+
|
40
|
+
def adjust_value_to_type val, type
|
41
|
+
case type.tag
|
42
|
+
when :ghash
|
43
|
+
GLib::HashTable.from [type.param_type(0).tag, type.param_type(1).tag],
|
44
|
+
val
|
45
|
+
when :glist
|
46
|
+
GLib::List.from type.param_type(0).tag, val
|
47
|
+
else
|
48
|
+
val
|
49
|
+
end
|
50
|
+
end
|
52
51
|
end
|
53
52
|
end
|
54
|
-
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -11,40 +11,39 @@ module GObject
|
|
11
11
|
set_value val
|
12
12
|
end
|
13
13
|
|
14
|
+
TYPE_TO_SET_METHOD_MAP = {
|
15
|
+
TYPE_BOOLEAN => :set_boolean,
|
16
|
+
TYPE_INT => :set_int,
|
17
|
+
TYPE_STRING => :set_string,
|
18
|
+
TYPE_FLOAT => :set_float,
|
19
|
+
TYPE_DOUBLE => :set_double,
|
20
|
+
TYPE_OBJECT => :set_instance,
|
21
|
+
TYPE_BOXED => :set_boxed,
|
22
|
+
TYPE_POINTER => :set_pointer,
|
23
|
+
TYPE_ENUM => :set_enum
|
24
|
+
}
|
25
|
+
|
14
26
|
def set_value val
|
15
|
-
|
16
|
-
|
17
|
-
set_boolean val
|
18
|
-
when TYPE_INT
|
19
|
-
set_int val
|
20
|
-
when TYPE_STRING
|
21
|
-
set_string val
|
22
|
-
when TYPE_FLOAT
|
23
|
-
set_float val
|
24
|
-
when TYPE_DOUBLE
|
25
|
-
set_double val
|
26
|
-
when TYPE_BOXED
|
27
|
-
set_boxed val
|
28
|
-
when TYPE_OBJECT
|
29
|
-
set_instance val
|
30
|
-
when TYPE_POINTER
|
31
|
-
set_pointer val
|
32
|
-
when TYPE_ENUM
|
33
|
-
set_enum val
|
34
|
-
else
|
35
|
-
raise "Don't know how to handle #{current_gtype_name}"
|
36
|
-
end
|
27
|
+
method = TYPE_TO_SET_METHOD_MAP[current_fundamental_type]
|
28
|
+
call_or_raise method, val
|
37
29
|
self
|
38
30
|
end
|
39
31
|
|
32
|
+
CLASS_TO_GTYPE_MAP = {
|
33
|
+
true => TYPE_BOOLEAN,
|
34
|
+
false => TYPE_BOOLEAN,
|
35
|
+
Integer => TYPE_INT,
|
36
|
+
String => TYPE_STRING
|
37
|
+
}
|
38
|
+
|
40
39
|
def init_for_ruby_value val
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
CLASS_TO_GTYPE_MAP.each do |klass, type|
|
41
|
+
if klass === val
|
42
|
+
init type
|
43
|
+
return self
|
44
|
+
end
|
46
45
|
end
|
47
|
-
|
46
|
+
raise "Can't handle #{val.class}"
|
48
47
|
end
|
49
48
|
|
50
49
|
def current_gtype
|
@@ -59,41 +58,58 @@ module GObject
|
|
59
58
|
GObject.type_name current_gtype
|
60
59
|
end
|
61
60
|
|
61
|
+
TYPE_TO_GET_METHOD_MAP = {
|
62
|
+
TYPE_BOOLEAN => :get_boolean,
|
63
|
+
TYPE_INT => :get_int,
|
64
|
+
TYPE_STRING => :get_string,
|
65
|
+
TYPE_FLOAT => :get_float,
|
66
|
+
TYPE_DOUBLE => :get_double,
|
67
|
+
TYPE_OBJECT => :get_object,
|
68
|
+
TYPE_BOXED => :get_boxed_enhanced,
|
69
|
+
TYPE_POINTER => :get_pointer
|
70
|
+
}
|
71
|
+
|
62
72
|
def ruby_value
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
case current_gtype_name.to_sym
|
79
|
-
when :GStrv
|
80
|
-
# FIXME: Extract this method to even lower level module.
|
81
|
-
GirFFI::ArgHelper.strv_to_utf8_array boxed
|
82
|
-
when :GHashTable
|
83
|
-
GLib::HashTable.wrap :gpointer, :gpointer, boxed
|
73
|
+
method = TYPE_TO_GET_METHOD_MAP[current_fundamental_type]
|
74
|
+
call_or_raise method
|
75
|
+
end
|
76
|
+
|
77
|
+
class << self
|
78
|
+
def wrap_ruby_value val
|
79
|
+
self.new.set_ruby_value val
|
80
|
+
end
|
81
|
+
|
82
|
+
def from val
|
83
|
+
case val
|
84
|
+
when self
|
85
|
+
val
|
86
|
+
when nil
|
87
|
+
nil
|
84
88
|
else
|
85
|
-
|
89
|
+
wrap_ruby_value val
|
86
90
|
end
|
87
|
-
|
88
|
-
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def get_boxed_enhanced
|
97
|
+
boxed = get_boxed
|
98
|
+
case current_gtype
|
99
|
+
when TYPE_STRV
|
100
|
+
GLib::Strv.wrap boxed
|
101
|
+
when TYPE_HASH_TABLE
|
102
|
+
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
89
103
|
else
|
90
|
-
|
104
|
+
GirFFI::ArgHelper.wrap_object_pointer_by_gtype boxed, current_gtype
|
91
105
|
end
|
92
106
|
end
|
93
107
|
|
94
|
-
|
95
|
-
|
96
|
-
|
108
|
+
def call_or_raise method, *args
|
109
|
+
if method
|
110
|
+
send method, *args
|
111
|
+
else
|
112
|
+
raise "Don't know how to handle #{current_gtype_name}"
|
97
113
|
end
|
98
114
|
end
|
99
115
|
end
|