gir_ffi 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|