gir_ffi 0.13.0 → 0.13.1
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 +10 -0
- data/lib/ffi-glib/array.rb +2 -2
- data/lib/ffi-glib/array_methods.rb +1 -0
- data/lib/ffi-glib/list_methods.rb +3 -2
- data/lib/ffi-glib/main_loop.rb +2 -0
- data/lib/ffi-glib/ptr_array.rb +2 -2
- data/lib/ffi-gobject.rb +3 -11
- data/lib/ffi-gobject/closure.rb +1 -0
- data/lib/ffi-gobject/object.rb +30 -16
- data/lib/ffi-gobject/object_class.rb +2 -2
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +2 -1
- data/lib/ffi-gobject_introspection/i_arg_info.rb +11 -11
- data/lib/ffi-gobject_introspection/i_base_info.rb +12 -10
- data/lib/ffi-gobject_introspection/i_callable_info.rb +8 -8
- data/lib/ffi-gobject_introspection/i_enum_info.rb +5 -5
- data/lib/ffi-gobject_introspection/i_field_info.rb +4 -4
- data/lib/ffi-gobject_introspection/i_function_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_interface_info.rb +15 -15
- data/lib/ffi-gobject_introspection/i_object_info.rb +22 -22
- data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_repository.rb +16 -10
- data/lib/ffi-gobject_introspection/i_struct_info.rb +11 -7
- data/lib/ffi-gobject_introspection/i_type_info.rb +8 -8
- data/lib/ffi-gobject_introspection/i_union_info.rb +7 -7
- data/lib/ffi-gobject_introspection/i_value_info.rb +1 -1
- data/lib/ffi-gobject_introspection/strv.rb +1 -0
- data/lib/gir_ffi-base/gobject.rb +5 -0
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/boolean.rb +2 -2
- data/lib/gir_ffi/builders/argument_builder.rb +41 -14
- data/lib/gir_ffi/builders/argument_builder_collection.rb +17 -4
- data/lib/gir_ffi/builders/base_argument_builder.rb +12 -16
- data/lib/gir_ffi/builders/callback_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_builder.rb +1 -1
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +2 -9
- data/lib/gir_ffi/builders/field_builder.rb +11 -9
- data/lib/gir_ffi/builders/module_builder.rb +2 -1
- data/lib/gir_ffi/builders/object_builder.rb +21 -12
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +8 -6
- data/lib/gir_ffi/builders/property_builder.rb +4 -2
- data/lib/gir_ffi/builders/registered_type_builder.rb +30 -19
- data/lib/gir_ffi/builders/return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -0
- data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
- data/lib/gir_ffi/builders/struct_builder.rb +7 -8
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -1
- data/lib/gir_ffi/builders/user_defined_builder.rb +31 -95
- data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
- data/lib/gir_ffi/builders/with_layout.rb +3 -1
- data/lib/gir_ffi/callback_base.rb +3 -2
- data/lib/gir_ffi/class_base.rb +5 -0
- data/lib/gir_ffi/enum_like_base.rb +9 -5
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -4
- data/lib/gir_ffi/field_argument_info.rb +1 -1
- data/lib/gir_ffi/in_pointer.rb +36 -23
- data/lib/gir_ffi/info_ext/i_arg_info.rb +2 -0
- data/lib/gir_ffi/info_ext/i_callback_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_type_info.rb +3 -27
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -0
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/module_base.rb +1 -0
- data/lib/gir_ffi/object_base.rb +10 -0
- data/lib/gir_ffi/object_store.rb +2 -0
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/return_value_info.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +7 -14
- data/lib/gir_ffi/struct_like_base.rb +3 -0
- data/lib/gir_ffi/type_map.rb +21 -0
- data/lib/gir_ffi/user_defined_object_info.rb +6 -2
- data/lib/gir_ffi/user_defined_property_info.rb +113 -71
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +26 -1
- data/tasks/test.rake +1 -0
- data/test/ffi-gobject_introspection/i_repository_test.rb +1 -2
- data/test/gir_ffi/builder_test.rb +13 -7
- data/test/gir_ffi/builders/argument_builder_test.rb +1 -5
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +1 -1
- data/test/gir_ffi/builders/field_builder_test.rb +20 -20
- data/test/gir_ffi/builders/return_value_builder_test.rb +1 -1
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +1 -1
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +1 -1
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +2 -2
- data/test/gir_ffi/builders/vfunc_builder_test.rb +1 -1
- data/test/gir_ffi/enum_base_test.rb +43 -0
- data/test/gir_ffi/info_ext/i_type_info_test.rb +3 -9
- data/test/gir_ffi/object_base_test.rb +30 -0
- data/test/gir_ffi/sized_array_test.rb +0 -9
- data/test/gir_ffi/user_defined_object_info_test.rb +4 -6
- data/test/gir_ffi/user_defined_property_info_test.rb +6 -5
- data/test/gir_ffi/zero_terminated_test.rb +22 -0
- data/test/gir_ffi_test_helper.rb +2 -0
- data/test/integration/generated_gimarshallingtests_test.rb +1 -0
- data/test/integration/generated_gio_test.rb +5 -6
- data/test/integration/generated_gobject_test.rb +1 -1
- data/test/integration/generated_gtop_test.rb +3 -1
- data/test/integration/generated_regress_test.rb +3 -4
- metadata +3 -2
@@ -5,11 +5,11 @@ module GObjectIntrospection
|
|
5
5
|
# Represents a struct.
|
6
6
|
class IStructInfo < IRegisteredTypeInfo
|
7
7
|
def n_fields
|
8
|
-
Lib.g_struct_info_get_n_fields
|
8
|
+
Lib.g_struct_info_get_n_fields self
|
9
9
|
end
|
10
10
|
|
11
11
|
def field(index)
|
12
|
-
IFieldInfo.wrap Lib.g_struct_info_get_field(
|
12
|
+
IFieldInfo.wrap Lib.g_struct_info_get_field(self, index)
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
@@ -17,11 +17,11 @@ module GObjectIntrospection
|
|
17
17
|
build_finder_method :find_field
|
18
18
|
|
19
19
|
def get_n_methods
|
20
|
-
Lib.g_struct_info_get_n_methods
|
20
|
+
Lib.g_struct_info_get_n_methods self
|
21
21
|
end
|
22
22
|
|
23
23
|
def get_method(index)
|
24
|
-
IFunctionInfo.wrap Lib.g_struct_info_get_method(
|
24
|
+
IFunctionInfo.wrap Lib.g_struct_info_get_method(self, index)
|
25
25
|
end
|
26
26
|
|
27
27
|
##
|
@@ -30,15 +30,19 @@ module GObjectIntrospection
|
|
30
30
|
build_finder_method :find_method, :get_n_methods, :get_method
|
31
31
|
|
32
32
|
def size
|
33
|
-
Lib.g_struct_info_get_size
|
33
|
+
Lib.g_struct_info_get_size self
|
34
|
+
end
|
35
|
+
|
36
|
+
def empty?
|
37
|
+
size == 0
|
34
38
|
end
|
35
39
|
|
36
40
|
def alignment
|
37
|
-
Lib.g_struct_info_get_alignment
|
41
|
+
Lib.g_struct_info_get_alignment self
|
38
42
|
end
|
39
43
|
|
40
44
|
def gtype_struct?
|
41
|
-
Lib.g_struct_info_is_gtype_struct
|
45
|
+
Lib.g_struct_info_is_gtype_struct self
|
42
46
|
end
|
43
47
|
end
|
44
48
|
end
|
@@ -5,36 +5,36 @@ module GObjectIntrospection
|
|
5
5
|
# Represents type information, direction, transfer etc.
|
6
6
|
class ITypeInfo < IBaseInfo
|
7
7
|
def pointer?
|
8
|
-
Lib.g_type_info_is_pointer
|
8
|
+
Lib.g_type_info_is_pointer self
|
9
9
|
end
|
10
10
|
|
11
11
|
def tag
|
12
|
-
Lib.g_type_info_get_tag
|
12
|
+
Lib.g_type_info_get_tag self
|
13
13
|
end
|
14
14
|
|
15
15
|
def param_type(index)
|
16
|
-
ITypeInfo.wrap Lib.g_type_info_get_param_type(
|
16
|
+
ITypeInfo.wrap Lib.g_type_info_get_param_type(self, index)
|
17
17
|
end
|
18
18
|
|
19
19
|
def interface
|
20
|
-
ptr = Lib.g_type_info_get_interface
|
20
|
+
ptr = Lib.g_type_info_get_interface self
|
21
21
|
IRepository.wrap_ibaseinfo_pointer ptr
|
22
22
|
end
|
23
23
|
|
24
24
|
def array_length
|
25
|
-
Lib.g_type_info_get_array_length
|
25
|
+
Lib.g_type_info_get_array_length self
|
26
26
|
end
|
27
27
|
|
28
28
|
def array_fixed_size
|
29
|
-
Lib.g_type_info_get_array_fixed_size
|
29
|
+
Lib.g_type_info_get_array_fixed_size self
|
30
30
|
end
|
31
31
|
|
32
32
|
def array_type
|
33
|
-
Lib.g_type_info_get_array_type
|
33
|
+
Lib.g_type_info_get_array_type self
|
34
34
|
end
|
35
35
|
|
36
36
|
def zero_terminated?
|
37
|
-
Lib.g_type_info_is_zero_terminated
|
37
|
+
Lib.g_type_info_is_zero_terminated self
|
38
38
|
end
|
39
39
|
|
40
40
|
def name
|
@@ -5,37 +5,37 @@ module GObjectIntrospection
|
|
5
5
|
# Represents a union.
|
6
6
|
class IUnionInfo < IRegisteredTypeInfo
|
7
7
|
def n_fields
|
8
|
-
Lib.g_union_info_get_n_fields
|
8
|
+
Lib.g_union_info_get_n_fields self
|
9
9
|
end
|
10
10
|
|
11
11
|
def field(index)
|
12
|
-
IFieldInfo.wrap Lib.g_union_info_get_field(
|
12
|
+
IFieldInfo.wrap Lib.g_union_info_get_field(self, index)
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
16
16
|
build_array_method :fields
|
17
17
|
|
18
18
|
def get_n_methods
|
19
|
-
Lib.g_union_info_get_n_methods
|
19
|
+
Lib.g_union_info_get_n_methods self
|
20
20
|
end
|
21
21
|
|
22
22
|
def get_method(index)
|
23
|
-
IFunctionInfo.wrap Lib.g_union_info_get_method(
|
23
|
+
IFunctionInfo.wrap Lib.g_union_info_get_method(self, index)
|
24
24
|
end
|
25
25
|
|
26
26
|
##
|
27
27
|
build_array_method :get_methods
|
28
28
|
|
29
29
|
def find_method(name)
|
30
|
-
IFunctionInfo.wrap Lib.g_union_info_find_method(
|
30
|
+
IFunctionInfo.wrap Lib.g_union_info_find_method(self, name.to_s)
|
31
31
|
end
|
32
32
|
|
33
33
|
def size
|
34
|
-
Lib.g_union_info_get_size
|
34
|
+
Lib.g_union_info_get_size self
|
35
35
|
end
|
36
36
|
|
37
37
|
def alignment
|
38
|
-
Lib.g_union_info_get_alignment
|
38
|
+
Lib.g_union_info_get_alignment self
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
data/lib/gir_ffi-base/gobject.rb
CHANGED
@@ -40,4 +40,9 @@ module GObject
|
|
40
40
|
TYPE_OBJECT = type_from_name('GObject')
|
41
41
|
TYPE_GTYPE = type_from_name('GType')
|
42
42
|
TYPE_VARIANT = type_from_name('GVariant')
|
43
|
+
|
44
|
+
TYPE_ARRAY = Lib.g_array_get_type
|
45
|
+
TYPE_BYTE_ARRAY = Lib.g_byte_array_get_type
|
46
|
+
TYPE_HASH_TABLE = Lib.g_hash_table_get_type
|
47
|
+
TYPE_STRV = Lib.g_strv_get_type
|
43
48
|
end
|
@@ -10,5 +10,9 @@ module GObject
|
|
10
10
|
ffi_lib 'gobject-2.0'
|
11
11
|
attach_function :g_type_from_name, [:string], :size_t
|
12
12
|
attach_function :g_type_fundamental, [:size_t], :size_t
|
13
|
+
attach_function :g_array_get_type, [], :size_t
|
14
|
+
attach_function :g_byte_array_get_type, [], :size_t
|
15
|
+
attach_function :g_hash_table_get_type, [], :size_t
|
16
|
+
attach_function :g_strv_get_type, [], :size_t
|
13
17
|
end
|
14
18
|
end
|
data/lib/gir_ffi/boolean.rb
CHANGED
@@ -23,8 +23,8 @@ module GirFFI
|
|
23
23
|
FFI.type_size FFI::Type::INT
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.copy_value_to_pointer(value, pointer)
|
27
|
-
pointer.put_int
|
26
|
+
def self.copy_value_to_pointer(value, pointer, offset = 0)
|
27
|
+
pointer.put_int offset, to_native(value, nil)
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.get_value_from_pointer(pointer, offset)
|
@@ -40,23 +40,16 @@ module GirFFI
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def pre_conversion
|
43
|
-
pr = []
|
44
|
-
if has_ingoing_component?
|
45
|
-
pr << fixed_array_size_check if needs_size_check?
|
46
|
-
pr << array_length_assignment if array_length_parameter?
|
47
|
-
end
|
48
43
|
case direction
|
49
44
|
when :in
|
50
|
-
|
45
|
+
pre_conversion_in
|
51
46
|
when :inout
|
52
|
-
|
53
|
-
pr << ingoing_value_storage
|
47
|
+
pre_conversion_inout
|
54
48
|
when :out
|
55
|
-
|
49
|
+
pre_conversion_out
|
56
50
|
when :error
|
57
|
-
|
51
|
+
pre_conversion_error
|
58
52
|
end
|
59
|
-
pr
|
60
53
|
end
|
61
54
|
|
62
55
|
def post_conversion
|
@@ -72,6 +65,31 @@ module GirFFI
|
|
72
65
|
|
73
66
|
private
|
74
67
|
|
68
|
+
def pre_conversion_in
|
69
|
+
pr = []
|
70
|
+
pr << fixed_array_size_check if needs_size_check?
|
71
|
+
pr << array_length_assignment if array_length_parameter?
|
72
|
+
pr << "#{call_argument_name} = #{ingoing_convertor.conversion}"
|
73
|
+
pr
|
74
|
+
end
|
75
|
+
|
76
|
+
def pre_conversion_inout
|
77
|
+
pr = []
|
78
|
+
pr << fixed_array_size_check if needs_size_check?
|
79
|
+
pr << array_length_assignment if array_length_parameter?
|
80
|
+
pr << out_parameter_preparation
|
81
|
+
pr << ingoing_value_storage
|
82
|
+
pr
|
83
|
+
end
|
84
|
+
|
85
|
+
def pre_conversion_out
|
86
|
+
[out_parameter_preparation]
|
87
|
+
end
|
88
|
+
|
89
|
+
def pre_conversion_error
|
90
|
+
["#{call_argument_name} = FFI::MemoryPointer.new(:pointer).write_pointer nil"]
|
91
|
+
end
|
92
|
+
|
75
93
|
def ingoing_value_storage
|
76
94
|
PointerValueConvertor.new(type_spec).
|
77
95
|
value_to_pointer(call_argument_name, ingoing_convertor.conversion)
|
@@ -83,6 +101,7 @@ module GirFFI
|
|
83
101
|
|
84
102
|
def output_value
|
85
103
|
return "#{call_argument_name}.get_value" if caller_allocated_object? && gvalue?
|
104
|
+
|
86
105
|
base = pointer_to_value_method_call call_argument_name, type_spec
|
87
106
|
if needs_out_conversion?
|
88
107
|
outgoing_convertor(base).conversion
|
@@ -191,9 +210,9 @@ module GirFFI
|
|
191
210
|
NullConvertor.new('0')
|
192
211
|
elsif destroy_notifier?
|
193
212
|
NullConvertor.new(DESTROY_NOTIFIER)
|
194
|
-
elsif
|
195
|
-
ClosureToPointerConvertor.new(
|
196
|
-
elsif
|
213
|
+
elsif user_data?
|
214
|
+
ClosureToPointerConvertor.new(callback_argument_name)
|
215
|
+
elsif needs_ruby_to_c_conversion?
|
197
216
|
RubyToCConvertor.new(type_info, pre_convertor_argument,
|
198
217
|
ownership_transfer: ownership_transfer)
|
199
218
|
else
|
@@ -208,6 +227,14 @@ module GirFFI
|
|
208
227
|
name
|
209
228
|
end
|
210
229
|
end
|
230
|
+
|
231
|
+
def needs_ruby_to_c_conversion?
|
232
|
+
type_info.needs_ruby_to_c_conversion_for_functions?
|
233
|
+
end
|
234
|
+
|
235
|
+
def callback_argument_name
|
236
|
+
@related_callback_builder.call_argument_name
|
237
|
+
end
|
211
238
|
end
|
212
239
|
end
|
213
240
|
end
|
@@ -67,20 +67,33 @@ module GirFFI
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def set_up_argument_relations
|
70
|
+
set_up_user_data_relations
|
71
|
+
set_up_destroy_notifier_relations
|
72
|
+
set_up_length_argument_relations
|
73
|
+
end
|
74
|
+
|
75
|
+
def set_up_user_data_relations
|
70
76
|
@base_argument_builders.each do |bldr|
|
71
77
|
if (idx = bldr.closure_idx) >= 0
|
72
|
-
@base_argument_builders[idx].
|
78
|
+
@base_argument_builders[idx].mark_as_user_data bldr
|
73
79
|
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_up_destroy_notifier_relations
|
84
|
+
@base_argument_builders.each do |bldr|
|
74
85
|
if (idx = bldr.destroy_idx) >= 0
|
75
86
|
@base_argument_builders[idx].mark_as_destroy_notifier bldr
|
76
87
|
end
|
77
88
|
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def set_up_length_argument_relations
|
78
92
|
all_builders.each do |bldr|
|
79
93
|
idx = bldr.array_length_idx
|
80
|
-
next
|
81
|
-
other = @base_argument_builders[idx]
|
82
|
-
next unless other
|
94
|
+
next if idx < 0
|
83
95
|
|
96
|
+
other = @base_argument_builders[idx]
|
84
97
|
bldr.length_arg = other
|
85
98
|
other.array_arg = bldr
|
86
99
|
end
|
@@ -22,8 +22,8 @@ module GirFFI
|
|
22
22
|
@arginfo = arginfo
|
23
23
|
@length_arg = nil
|
24
24
|
@array_arg = nil
|
25
|
-
@
|
26
|
-
@
|
25
|
+
@is_user_data = false
|
26
|
+
@is_destroy_notifier = false
|
27
27
|
end
|
28
28
|
|
29
29
|
def name
|
@@ -59,34 +59,30 @@ module GirFFI
|
|
59
59
|
arginfo.destroy
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
def closure=(arg)
|
66
|
-
@is_closure = arg
|
62
|
+
def mark_as_user_data(callback_builder)
|
63
|
+
@is_user_data = true
|
64
|
+
@related_callback_builder = callback_builder
|
67
65
|
end
|
68
66
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
def mark_as_destroy_notifier(callback)
|
73
|
-
@destroy_notifier = callback
|
67
|
+
def mark_as_destroy_notifier(callback_builder)
|
68
|
+
@is_destroy_notifier = true
|
69
|
+
@related_callback_builder = callback_builder
|
74
70
|
end
|
75
71
|
|
76
72
|
def array_length_parameter?
|
77
73
|
@array_arg
|
78
74
|
end
|
79
75
|
|
80
|
-
def
|
81
|
-
@
|
76
|
+
def user_data?
|
77
|
+
@is_user_data
|
82
78
|
end
|
83
79
|
|
84
80
|
def destroy_notifier?
|
85
|
-
@
|
81
|
+
@is_destroy_notifier
|
86
82
|
end
|
87
83
|
|
88
84
|
def helper_argument?
|
89
|
-
array_length_parameter? ||
|
85
|
+
array_length_parameter? || user_data? || destroy_notifier?
|
90
86
|
end
|
91
87
|
|
92
88
|
def ownership_transfer
|
@@ -5,19 +5,12 @@ module GirFFI
|
|
5
5
|
# Builder that generates code to convert closure arguments ('user data')
|
6
6
|
# from Ruby to C. Used by argument builders.
|
7
7
|
class ClosureToPointerConvertor
|
8
|
-
def initialize(argument_name
|
8
|
+
def initialize(argument_name)
|
9
9
|
@argument_name = argument_name
|
10
|
-
@callback_argument = callback_argument
|
11
10
|
end
|
12
11
|
|
13
12
|
def conversion
|
14
|
-
"GirFFI::ArgHelper.store(#{
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def callback_argument_name
|
20
|
-
@callback_argument.call_argument_name
|
13
|
+
"GirFFI::ArgHelper.store(#{@argument_name})"
|
21
14
|
end
|
22
15
|
end
|
23
16
|
end
|
@@ -26,7 +26,7 @@ module GirFFI
|
|
26
26
|
|
27
27
|
def pre_conversion
|
28
28
|
[
|
29
|
-
"#{field_ptr} = @struct.to_ptr
|
29
|
+
"#{field_ptr} = @struct.to_ptr",
|
30
30
|
"#{bare_value} = #{pointer_to_value_conversion}"
|
31
31
|
]
|
32
32
|
end
|
@@ -58,7 +58,7 @@ module GirFFI
|
|
58
58
|
private
|
59
59
|
|
60
60
|
def pointer_to_value_conversion
|
61
|
-
PointerValueConvertor.new(field_type_tag).pointer_to_value(field_ptr)
|
61
|
+
PointerValueConvertor.new(field_type_tag).pointer_to_value(field_ptr, field_offset)
|
62
62
|
end
|
63
63
|
|
64
64
|
def field_offset
|
@@ -78,7 +78,7 @@ module GirFFI
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def field_type_tag
|
81
|
-
@field_type_tag ||=
|
81
|
+
@field_type_tag ||= field_type.tag_or_class
|
82
82
|
end
|
83
83
|
|
84
84
|
def field_type
|
@@ -97,7 +97,7 @@ module GirFFI
|
|
97
97
|
end
|
98
98
|
|
99
99
|
# Class to represent argument info for the argument of a getter method.
|
100
|
-
# Implements the necessary parts of
|
100
|
+
# Implements the necessary parts of IArgInfo's interface.
|
101
101
|
class GetterArgumentInfo
|
102
102
|
attr_reader :name, :argument_type
|
103
103
|
|
@@ -216,7 +216,7 @@ module GirFFI
|
|
216
216
|
end
|
217
217
|
|
218
218
|
def field_type_tag
|
219
|
-
@field_type_tag ||=
|
219
|
+
@field_type_tag ||= field_type.tag_or_class.inspect
|
220
220
|
end
|
221
221
|
|
222
222
|
def field_type
|
@@ -243,7 +243,8 @@ module GirFFI
|
|
243
243
|
def setup_getter
|
244
244
|
return if container_defines_getter_method?
|
245
245
|
return if hidden_struct_type?
|
246
|
-
|
246
|
+
|
247
|
+
container_class.class_eval getter_def, __FILE__, __LINE__
|
247
248
|
end
|
248
249
|
|
249
250
|
def container_defines_getter_method?
|
@@ -253,7 +254,8 @@ module GirFFI
|
|
253
254
|
def setup_setter
|
254
255
|
return unless info.writable?
|
255
256
|
return if hidden_struct_type?
|
256
|
-
|
257
|
+
|
258
|
+
container_class.class_eval setter_def, __FILE__, __LINE__
|
257
259
|
end
|
258
260
|
|
259
261
|
def getter_def
|
@@ -269,7 +271,7 @@ module GirFFI
|
|
269
271
|
|
270
272
|
<<-CODE.reset_indentation
|
271
273
|
def #{info.name}= #{builder.method_argument_name}
|
272
|
-
#{field_ptr} = @struct.to_ptr
|
274
|
+
#{field_ptr} = @struct.to_ptr
|
273
275
|
#{builder.pre_conversion.join("\n ")}
|
274
276
|
#{value_storage(field_ptr, builder)}
|
275
277
|
end
|
@@ -280,7 +282,7 @@ module GirFFI
|
|
280
282
|
|
281
283
|
def value_storage(typed_ptr, builder)
|
282
284
|
PointerValueConvertor.new(field_type_tag).
|
283
|
-
value_to_pointer(typed_ptr, builder.call_argument_name)
|
285
|
+
value_to_pointer(typed_ptr, builder.call_argument_name, info.offset)
|
284
286
|
end
|
285
287
|
|
286
288
|
def field_type_tag
|