gir_ffi 0.7.8 → 0.7.9
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/Changelog.md +16 -0
- data/README.md +24 -11
- data/TODO.md +10 -2
- data/gir_ffi.gemspec +2 -2
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +0 -4
- data/lib/ffi-gobject.rb +10 -6
- data/lib/ffi-gobject/object.rb +17 -0
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +28 -4
- data/lib/ffi-gobject_introspection.rb +4 -0
- data/lib/ffi-gobject_introspection/g_error.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +1 -3
- data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -0
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +2 -0
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -4
- data/lib/ffi-gobject_introspection/lib.rb +57 -32
- data/lib/gir_ffi.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +40 -0
- data/lib/gir_ffi/builders/argument_builder.rb +11 -3
- data/lib/gir_ffi/builders/base_argument_builder.rb +4 -0
- data/lib/gir_ffi/builders/boxed_builder.rb +29 -0
- data/lib/gir_ffi/builders/callback_builder.rb +3 -1
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +9 -1
- data/lib/gir_ffi/builders/field_builder.rb +68 -18
- data/lib/gir_ffi/builders/function_builder.rb +12 -2
- data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +0 -9
- data/lib/gir_ffi/builders/return_value_builder.rb +0 -1
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -1
- data/lib/gir_ffi/builders/struct_builder.rb +4 -16
- data/lib/gir_ffi/builders/union_builder.rb +2 -13
- data/lib/gir_ffi/builders/user_defined_builder.rb +6 -6
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +44 -0
- data/lib/gir_ffi/builders/vfunc_builder.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +5 -2
- data/lib/gir_ffi/class_base.rb +6 -7
- data/lib/gir_ffi/enum_base.rb +5 -0
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -0
- data/lib/gir_ffi/field_argument_info.rb +4 -0
- data/lib/gir_ffi/in_out_pointer.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/i_arg_info.rb +12 -2
- data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callback_info.rb +7 -2
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +7 -2
- data/lib/gir_ffi/info_ext/i_type_info.rb +21 -9
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +5 -0
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/object_base.rb +5 -0
- data/lib/gir_ffi/receiver_argument_info.rb +5 -0
- data/lib/gir_ffi/registered_type_base.rb +5 -0
- data/lib/gir_ffi/return_value_info.rb +3 -1
- data/lib/gir_ffi/sized_array.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -24
- data/lib/gir_ffi/type_map.rb +5 -1
- data/lib/gir_ffi/union_base.rb +2 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/test/base_test_helper.rb +6 -6
- data/test/ffi-glib/hash_table_test.rb +7 -7
- data/test/ffi-glib/iconv_test.rb +2 -3
- data/test/ffi-glib/main_loop_test.rb +2 -2
- data/test/ffi-gobject/gobject_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +5 -14
- data/test/ffi-gobject/value_test.rb +30 -6
- data/test/ffi-gobject_introspection/i_base_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_repository_test.rb +2 -4
- data/test/gir_ffi/arg_helper_test.rb +1 -1
- data/test/gir_ffi/builder_test.rb +18 -12
- data/test/gir_ffi/builders/argument_builder_test.rb +2 -5
- data/test/gir_ffi/builders/callback_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +11 -10
- data/test/gir_ffi/builders/field_builder_test.rb +0 -2
- data/test/gir_ffi/builders/function_builder_test.rb +156 -147
- data/test/gir_ffi/builders/interface_builder_test.rb +1 -1
- data/test/gir_ffi/builders/module_builder_test.rb +2 -2
- data/test/gir_ffi/builders/object_builder_test.rb +2 -2
- data/test/gir_ffi/builders/property_builder_test.rb +5 -5
- data/test/gir_ffi/builders/return_value_builder_test.rb +30 -30
- data/test/gir_ffi/builders/struct_builder_test.rb +14 -14
- data/test/gir_ffi/builders/user_defined_builder_test.rb +21 -22
- data/test/gir_ffi/builders/vfunc_builder_test.rb +57 -0
- data/test/gir_ffi/class_base_test.rb +8 -8
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +1 -1
- data/test/gir_ffi/in_pointer_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +3 -3
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_field_info_test.rb +8 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +13 -13
- data/test/gir_ffi/info_ext/i_type_info_test.rb +131 -132
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
- data/test/gir_ffi/interface_base_test.rb +3 -3
- data/test/gir_ffi/object_base_test.rb +3 -3
- data/test/gir_ffi/sized_array_test.rb +2 -2
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +14 -14
- data/test/gir_ffi/user_defined_property_info_test.rb +1 -1
- data/test/gir_ffi/user_defined_type_info_test.rb +25 -12
- data/test/gir_ffi/zero_terminated_test.rb +0 -1
- data/test/gir_ffi_test.rb +3 -3
- data/test/gir_ffi_test_helper.rb +4 -0
- data/test/integration/generated_gimarshallingtests_test.rb +31 -25
- data/test/integration/generated_gio_test.rb +1 -1
- data/test/integration/generated_gobject_test.rb +1 -1
- data/test/integration/generated_regress_test.rb +18 -22
- metadata +11 -8
@@ -19,7 +19,7 @@ module GirFFI
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def target_gtype
|
22
|
-
@gtype ||= klass.
|
22
|
+
@gtype ||= klass.gtype
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
@@ -30,7 +30,7 @@ module GirFFI
|
|
30
30
|
gobject_type_info, 0)
|
31
31
|
included_interfaces.each do |interface|
|
32
32
|
ifinfo = gobject_interface_info interface
|
33
|
-
GObject.type_add_interface_static @gtype, interface.
|
33
|
+
GObject.type_add_interface_static @gtype, interface.gtype, ifinfo
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,11 +39,11 @@ module GirFFI
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def parent_gtype
|
42
|
-
@parent_gtype ||= GType.new(klass.superclass.
|
42
|
+
@parent_gtype ||= GType.new(klass.superclass.gtype)
|
43
43
|
end
|
44
44
|
|
45
45
|
def interface_gtypes
|
46
|
-
included_interfaces.map { |interface| GType.new(interface.
|
46
|
+
included_interfaces.map { |interface| GType.new(interface.gtype) }
|
47
47
|
end
|
48
48
|
|
49
49
|
def included_interfaces
|
@@ -166,11 +166,11 @@ module GirFFI
|
|
166
166
|
def layout_specification
|
167
167
|
parent_spec = [:parent, superclass::Struct, 0]
|
168
168
|
offset = superclass::Struct.size
|
169
|
-
fields_spec = properties.
|
169
|
+
fields_spec = properties.flat_map do |pinfo|
|
170
170
|
spec = [pinfo.name.to_sym, :int32, offset]
|
171
171
|
offset += FFI.type_size(:int32)
|
172
172
|
spec
|
173
|
-
end
|
173
|
+
end
|
174
174
|
parent_spec + fields_spec
|
175
175
|
end
|
176
176
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'gir_ffi/builders/callback_argument_builder'
|
2
|
+
|
3
|
+
module GirFFI
|
4
|
+
module Builders
|
5
|
+
# Convertor for arguments for vfuncs. Used when building the
|
6
|
+
# argument mapper for vfuncs.
|
7
|
+
class VFuncArgumentBuilder < CallbackArgumentBuilder
|
8
|
+
def pre_conversion
|
9
|
+
if ingoing_ref_needed
|
10
|
+
super + [pre_ref_count_increase]
|
11
|
+
else
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def ingoing_ref_needed
|
19
|
+
direction == :in &&
|
20
|
+
ownership_transfer == :nothing &&
|
21
|
+
specialized_type_tag == :object
|
22
|
+
end
|
23
|
+
|
24
|
+
def pre_ref_count_increase
|
25
|
+
"#{pre_converted_name}.ref"
|
26
|
+
end
|
27
|
+
|
28
|
+
# SMELL: Override private method
|
29
|
+
def post_convertor_argument
|
30
|
+
if outgoing_ref_needed
|
31
|
+
"#{super}.ref"
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def outgoing_ref_needed
|
38
|
+
direction == :out &&
|
39
|
+
ownership_transfer == :everything &&
|
40
|
+
specialized_type_tag == :object
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -26,7 +26,9 @@ module GirFFI
|
|
26
26
|
arg_infos << ErrorArgumentInfo.new if info.throws?
|
27
27
|
|
28
28
|
receiver_info = ReceiverArgumentInfo.new receiver_type_info
|
29
|
-
return_value_info = ReturnValueInfo.new
|
29
|
+
return_value_info = ReturnValueInfo.new(info.return_type,
|
30
|
+
info.caller_owns,
|
31
|
+
info.skip_return?)
|
30
32
|
|
31
33
|
MappingMethodBuilder.for_vfunc(receiver_info,
|
32
34
|
arg_infos,
|
@@ -24,8 +24,6 @@ module GirFFI
|
|
24
24
|
value.to_native
|
25
25
|
when FFI::Function
|
26
26
|
value
|
27
|
-
else
|
28
|
-
nil
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
@@ -55,10 +53,15 @@ module GirFFI
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
56
|
+
# @deprecated Use .to_ffi_type instead. Will be removed in 0.8.0.
|
58
57
|
def self.to_ffitype
|
59
58
|
self
|
60
59
|
end
|
61
60
|
|
61
|
+
def self.to_ffi_type
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
62
65
|
def to_native
|
63
66
|
@to_native ||= begin
|
64
67
|
builder = self.class.gir_ffi_builder
|
data/lib/gir_ffi/class_base.rb
CHANGED
@@ -46,9 +46,14 @@ module GirFFI
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
def self.to_ffi_type
|
50
|
+
self::Struct
|
51
|
+
end
|
52
|
+
|
49
53
|
class << self
|
54
|
+
# @deprecated Use .to_ffi_type instead. Will be removed in 0.8.0.
|
50
55
|
def to_ffitype
|
51
|
-
|
56
|
+
to_ffi_type
|
52
57
|
end
|
53
58
|
|
54
59
|
def setup_method name
|
@@ -77,12 +82,6 @@ module GirFFI
|
|
77
82
|
obj
|
78
83
|
end
|
79
84
|
|
80
|
-
def _allocate
|
81
|
-
obj = _real_new
|
82
|
-
obj.instance_variable_set :@struct, self::Struct.new
|
83
|
-
obj
|
84
|
-
end
|
85
|
-
|
86
85
|
# Pass-through casting method. This may become a type checking
|
87
86
|
# method. It is overridden by GValue to implement wrapping of plain
|
88
87
|
# Ruby objects.
|
data/lib/gir_ffi/enum_base.rb
CHANGED
data/lib/gir_ffi/in_pointer.rb
CHANGED
@@ -78,7 +78,7 @@ module GirFFI
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def from_struct_array type, ary
|
81
|
-
ffi_type = TypeMap.
|
81
|
+
ffi_type = TypeMap.type_specification_to_ffi_type type
|
82
82
|
type_size = FFI.type_size(ffi_type)
|
83
83
|
length = ary.length
|
84
84
|
|
@@ -101,7 +101,7 @@ module GirFFI
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def from_basic_type_array type, ary
|
104
|
-
ffi_type = TypeMap.
|
104
|
+
ffi_type = TypeMap.type_specification_to_ffi_type type
|
105
105
|
ary = ary.dup << null_value(ffi_type)
|
106
106
|
type_size = FFI.type_size(ffi_type)
|
107
107
|
block = AllocationHelper.safe_malloc type_size * ary.length
|
@@ -2,14 +2,24 @@ module GirFFI
|
|
2
2
|
module InfoExt
|
3
3
|
# Extensions for GObjectIntrospection::IArgInfo needed by GirFFI
|
4
4
|
module IArgInfo
|
5
|
+
# @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
|
5
6
|
def to_ffitype
|
7
|
+
to_ffi_type
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_ffi_type
|
6
11
|
return :pointer if direction != :in
|
7
|
-
argument_type.
|
12
|
+
argument_type.to_ffi_type
|
8
13
|
end
|
9
14
|
|
15
|
+
# @deprecated Use #to_callback_ffi_type instead. Will be removed in 0.8.0.
|
10
16
|
def to_callback_ffitype
|
17
|
+
to_callback_ffi_type
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_callback_ffi_type
|
11
21
|
return :pointer if direction != :in
|
12
|
-
argument_type.
|
22
|
+
argument_type.to_callback_ffi_type
|
13
23
|
end
|
14
24
|
end
|
15
25
|
end
|
@@ -2,16 +2,21 @@ module GirFFI
|
|
2
2
|
module InfoExt
|
3
3
|
# Extensions for GObjectIntrospection::ICallbackInfo needed by GirFFI
|
4
4
|
module ICallbackInfo
|
5
|
+
# @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
|
5
6
|
def to_ffitype
|
7
|
+
to_ffi_type
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_ffi_type
|
6
11
|
Builder.build_class(self)
|
7
12
|
end
|
8
13
|
|
9
14
|
def argument_ffi_types
|
10
|
-
args.map(&:
|
15
|
+
args.map(&:to_callback_ffi_type)
|
11
16
|
end
|
12
17
|
|
13
18
|
def return_ffi_type
|
14
|
-
return_type.
|
19
|
+
return_type.to_callback_ffi_type
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -4,8 +4,13 @@ module GirFFI
|
|
4
4
|
module InfoExt
|
5
5
|
# Extensions for GObjectIntrospection::IRegisteredTypeInfo needed by GirFFI
|
6
6
|
module IRegisteredTypeInfo
|
7
|
+
# @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
|
7
8
|
def to_ffitype
|
8
|
-
|
9
|
+
to_ffi_type
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_ffi_type
|
13
|
+
to_type.to_ffi_type
|
9
14
|
end
|
10
15
|
|
11
16
|
def to_type
|
@@ -21,4 +26,4 @@ module GirFFI
|
|
21
26
|
end
|
22
27
|
|
23
28
|
GObjectIntrospection::IRegisteredTypeInfo.send :include,
|
24
|
-
|
29
|
+
GirFFI::InfoExt::IRegisteredTypeInfo
|
@@ -19,9 +19,14 @@ module GirFFI
|
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
22
|
+
# @deprecated Use #gtype instead. Will be removed in 0.8.0.
|
22
23
|
def g_type
|
24
|
+
gtype
|
25
|
+
end
|
26
|
+
|
27
|
+
def gtype
|
23
28
|
if tag == :interface
|
24
|
-
return interface.
|
29
|
+
return interface.gtype
|
25
30
|
elsif (type = ITypeInfo.flattened_tag_to_gtype_map[flattened_tag])
|
26
31
|
return type
|
27
32
|
else
|
@@ -30,7 +35,7 @@ module GirFFI
|
|
30
35
|
end
|
31
36
|
|
32
37
|
def make_g_value
|
33
|
-
GObject::Value.
|
38
|
+
GObject::Value.for_gtype gtype
|
34
39
|
end
|
35
40
|
|
36
41
|
def element_type
|
@@ -39,8 +44,6 @@ module GirFFI
|
|
39
44
|
enumerable_element_type
|
40
45
|
when :ghash
|
41
46
|
dictionary_element_type
|
42
|
-
else
|
43
|
-
nil
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
@@ -99,21 +102,30 @@ module GirFFI
|
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
105
|
+
# @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
|
102
106
|
def to_ffitype
|
107
|
+
to_ffi_type
|
108
|
+
end
|
109
|
+
|
110
|
+
def to_ffi_type
|
103
111
|
return :pointer if pointer?
|
104
112
|
|
105
113
|
case tag
|
106
114
|
when :interface
|
107
|
-
interface.
|
115
|
+
interface.to_ffi_type
|
108
116
|
when :array
|
109
|
-
[
|
117
|
+
[subtype_ffi_type(0), array_fixed_size]
|
110
118
|
else
|
111
119
|
TypeMap.map_basic_type tag
|
112
120
|
end
|
113
121
|
end
|
114
122
|
|
115
|
-
#
|
123
|
+
# @deprecated Use #to_callback_ffi_type instead. Will be removed in 0.8.0.
|
116
124
|
def to_callback_ffitype
|
125
|
+
to_callback_ffi_type
|
126
|
+
end
|
127
|
+
|
128
|
+
def to_callback_ffi_type
|
117
129
|
return :pointer if pointer?
|
118
130
|
|
119
131
|
case tag
|
@@ -193,8 +205,8 @@ module GirFFI
|
|
193
205
|
subtype_tag_or_class 0
|
194
206
|
end
|
195
207
|
|
196
|
-
def
|
197
|
-
subtype = param_type(index).
|
208
|
+
def subtype_ffi_type index
|
209
|
+
subtype = param_type(index).to_ffi_type
|
198
210
|
if subtype == :pointer
|
199
211
|
# NOTE: Don't use pointer directly to appease JRuby.
|
200
212
|
:"uint#{FFI.type_size(:pointer) * 8}"
|
@@ -2,7 +2,12 @@ module GirFFI
|
|
2
2
|
module InfoExt
|
3
3
|
# Extensions for GObjectIntrospection::IUnresolvedInfo needed by GirFFI
|
4
4
|
module IUnresolvedInfo
|
5
|
+
# @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
|
5
6
|
def to_ffitype
|
7
|
+
to_ffi_type
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_ffi_type
|
6
11
|
:pointer
|
7
12
|
end
|
8
13
|
end
|
data/lib/gir_ffi/object_base.rb
CHANGED