gir_ffi 0.15.3 → 0.15.4
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 +15 -0
- data/README.md +5 -6
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +8 -3
- data/lib/ffi-glib/byte_array.rb +2 -1
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +1 -2
- data/lib/ffi-glib/list.rb +11 -5
- data/lib/ffi-glib/list_methods.rb +12 -0
- data/lib/ffi-glib/s_list.rb +10 -4
- data/lib/ffi-gobject.rb +0 -3
- data/lib/ffi-gobject/object.rb +77 -73
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/value.rb +107 -108
- data/lib/ffi-gobject_introspection/i_base_info.rb +20 -19
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +1 -2
- data/lib/gir_ffi/boxed_base.rb +1 -5
- data/lib/gir_ffi/builder.rb +1 -1
- data/lib/gir_ffi/builder_helper.rb +7 -4
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
- data/lib/gir_ffi/builders/callback_builder.rb +14 -12
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
- data/lib/gir_ffi/builders/enum_builder.rb +3 -3
- data/lib/gir_ffi/builders/interface_builder.rb +3 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
- data/lib/gir_ffi/builders/method_template.rb +4 -4
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
- data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
- data/lib/gir_ffi/builders/object_builder.rb +16 -6
- data/lib/gir_ffi/builders/property_builder.rb +1 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
- data/lib/gir_ffi/builders/struct_builder.rb +5 -5
- data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +3 -3
- data/lib/gir_ffi/core.rb +17 -2
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +7 -0
- data/lib/gir_ffi/object_base.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/struct_base.rb +1 -9
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -9
- data/lib/gir_ffi/user_defined_object_info.rb +3 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +86 -136
- data/Gemfile +0 -14
- data/Rakefile +0 -9
- data/tasks/test.rake +0 -204
- data/test/base_test_helper.rb +0 -70
- data/test/ffi-glib/array_test.rb +0 -203
- data/test/ffi-glib/byte_array_test.rb +0 -28
- data/test/ffi-glib/bytes_test.rb +0 -61
- data/test/ffi-glib/closure_test.rb +0 -38
- data/test/ffi-glib/destroy_notify_test.rb +0 -18
- data/test/ffi-glib/hash_table_test.rb +0 -68
- data/test/ffi-glib/list_test.rb +0 -86
- data/test/ffi-glib/main_loop_test.rb +0 -53
- data/test/ffi-glib/ptr_array_test.rb +0 -112
- data/test/ffi-glib/ruby_closure_test.rb +0 -62
- data/test/ffi-glib/s_list_test.rb +0 -76
- data/test/ffi-glib/strv_test.rb +0 -60
- data/test/ffi-glib/variant_test.rb +0 -12
- data/test/ffi-gobject/gobject_test.rb +0 -76
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -123
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -390
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
- data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
- data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
- data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
- data/test/ffi-gobject_introspection/lib_test.rb +0 -13
- data/test/ffi-gobject_introspection/strv_test.rb +0 -46
- data/test/ffi-gobject_test.rb +0 -153
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -146
- data/test/gir_ffi/boolean_test.rb +0 -43
- data/test/gir_ffi/boxed_base_test.rb +0 -65
- data/test/gir_ffi/builder_test.rb +0 -168
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -691
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -130
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -84
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -39
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -140
- data/test/gir_ffi/builders/function_builder_test.rb +0 -570
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -56
- data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
- data/test/gir_ffi/builders/module_builder_test.rb +0 -43
- data/test/gir_ffi/builders/object_builder_test.rb +0 -98
- data/test/gir_ffi/builders/property_builder_test.rb +0 -161
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -444
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -199
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -96
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
- data/test/gir_ffi/builders/union_builder_test.rb +0 -28
- data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -528
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -107
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -245
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -171
- data/test/gir_ffi/core_test.rb +0 -99
- data/test/gir_ffi/enum_base_test.rb +0 -43
- data/test/gir_ffi/error_type_info_test.rb +0 -50
- data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -22
- data/test/gir_ffi/g_type_test.rb +0 -31
- data/test/gir_ffi/in_pointer_test.rb +0 -203
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -22
- data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
- data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -712
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
- data/test/gir_ffi/interface_base_test.rb +0 -20
- data/test/gir_ffi/method_stubber_test.rb +0 -67
- data/test/gir_ffi/object_base_test.rb +0 -64
- data/test/gir_ffi/object_store_test.rb +0 -41
- data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
- data/test/gir_ffi/sized_array_test.rb +0 -206
- data/test/gir_ffi/struct_base_test.rb +0 -23
- data/test/gir_ffi/struct_like_base_test.rb +0 -167
- data/test/gir_ffi/type_map_test.rb +0 -17
- data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
- data/test/gir_ffi/union_base_test.rb +0 -23
- data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
- data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
- data/test/gir_ffi/variable_name_generator_test.rb +0 -18
- data/test/gir_ffi/version_test.rb +0 -9
- data/test/gir_ffi/zero_terminated_test.rb +0 -108
- data/test/gir_ffi_test_helper.rb +0 -84
- data/test/integration/callback_exceptions_test.rb +0 -59
- data/test/integration/derived_classes_test.rb +0 -54
- data/test/integration/generated_everything_test.rb +0 -453
- data/test/integration/generated_gimarshallingtests_test.rb +0 -3109
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -10
- data/test/integration/generated_gobject_test.rb +0 -124
- data/test/integration/generated_gst_test.rb +0 -38
- data/test/integration/generated_gtk_source_test.rb +0 -21
- data/test/integration/generated_gtop_test.rb +0 -22
- data/test/integration/generated_pango_ft2_test.rb +0 -17
- data/test/integration/generated_pango_test.rb +0 -24
- data/test/integration/generated_regress_test.rb +0 -4076
- data/test/integration/generated_secret_test.rb +0 -14
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -45
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -94
- data/test/lib/Makefile.am +0 -110
- data/test/lib/autogen.sh +0 -4
- data/test/lib/configure.ac +0 -34
- data/test/lib/m4/jhflags.m4 +0 -21
- data/test/minitest/stats_plugin.rb +0 -30
data/lib/ffi-gobject/value.rb
CHANGED
@@ -5,18 +5,7 @@ GObject.load_class :Value
|
|
5
5
|
module GObject
|
6
6
|
# Overrides for GValue, GObject's generic value container structure.
|
7
7
|
class Value
|
8
|
-
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
super
|
12
|
-
struct.owned = true
|
13
|
-
to_ptr.autorelease = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def init(type)
|
17
|
-
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
18
|
-
self
|
19
|
-
end
|
8
|
+
setup_instance_method! :init
|
20
9
|
|
21
10
|
def self.make_finalizer(struct)
|
22
11
|
proc do
|
@@ -54,37 +43,6 @@ module GObject
|
|
54
43
|
TYPE_VARIANT => [:get_variant, :set_variant]
|
55
44
|
}.freeze
|
56
45
|
|
57
|
-
def set_value(val)
|
58
|
-
send set_method, val
|
59
|
-
end
|
60
|
-
|
61
|
-
alias value= set_value
|
62
|
-
|
63
|
-
def current_gtype
|
64
|
-
struct[:g_type]
|
65
|
-
end
|
66
|
-
|
67
|
-
def current_fundamental_type
|
68
|
-
GObject.type_fundamental current_gtype
|
69
|
-
end
|
70
|
-
|
71
|
-
def current_gtype_name
|
72
|
-
GObject.type_name current_gtype
|
73
|
-
end
|
74
|
-
|
75
|
-
def get_value
|
76
|
-
value = get_value_plain
|
77
|
-
if current_fundamental_type == TYPE_BOXED
|
78
|
-
wrap_boxed value
|
79
|
-
else
|
80
|
-
value
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def get_value_plain
|
85
|
-
send get_method
|
86
|
-
end
|
87
|
-
|
88
46
|
# TODO: Give more generic name
|
89
47
|
def self.wrap_ruby_value(val)
|
90
48
|
new.tap { |gv| gv.__send__ :set_ruby_value, val }
|
@@ -119,17 +77,6 @@ module GObject
|
|
119
77
|
Lib.g_value_copy value, target unless value.uninitialized?
|
120
78
|
end
|
121
79
|
|
122
|
-
def uninitialized?
|
123
|
-
current_gtype == TYPE_INVALID
|
124
|
-
end
|
125
|
-
|
126
|
-
private
|
127
|
-
|
128
|
-
def set_ruby_value(val)
|
129
|
-
init_for_ruby_value val if uninitialized?
|
130
|
-
set_value val
|
131
|
-
end
|
132
|
-
|
133
80
|
CLASS_TO_GTYPE_MAP = {
|
134
81
|
NilClass => TYPE_INVALID,
|
135
82
|
TrueClass => TYPE_BOOLEAN,
|
@@ -138,78 +85,130 @@ module GObject
|
|
138
85
|
String => TYPE_STRING
|
139
86
|
}.freeze
|
140
87
|
|
141
|
-
|
142
|
-
|
88
|
+
# Overrides for existing Value methods
|
89
|
+
module Overrides
|
90
|
+
def set_value(val)
|
91
|
+
send set_method, val
|
92
|
+
end
|
93
|
+
|
94
|
+
alias value= set_value
|
143
95
|
|
144
|
-
|
145
|
-
|
96
|
+
def current_gtype
|
97
|
+
struct[:g_type]
|
146
98
|
end
|
147
|
-
raise "Can't handle #{val.class}"
|
148
|
-
end
|
149
99
|
|
150
|
-
|
100
|
+
def current_fundamental_type
|
101
|
+
GObject.type_fundamental current_gtype
|
102
|
+
end
|
151
103
|
|
152
|
-
|
104
|
+
def current_gtype_name
|
105
|
+
GObject.type_name current_gtype
|
106
|
+
end
|
153
107
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
108
|
+
def get_value
|
109
|
+
value = get_value_plain
|
110
|
+
if current_fundamental_type == TYPE_BOXED
|
111
|
+
wrap_boxed value
|
112
|
+
else
|
113
|
+
value
|
114
|
+
end
|
115
|
+
end
|
158
116
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
117
|
+
def get_value_plain
|
118
|
+
send get_method
|
119
|
+
end
|
163
120
|
|
164
|
-
|
165
|
-
|
166
|
-
|
121
|
+
def uninitialized?
|
122
|
+
current_gtype == TYPE_INVALID
|
123
|
+
end
|
167
124
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
125
|
+
def init(type)
|
126
|
+
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
127
|
+
self
|
128
|
+
end
|
172
129
|
|
173
|
-
|
174
|
-
current_gtype_class.wrap(get_flags)
|
175
|
-
end
|
130
|
+
private
|
176
131
|
|
177
|
-
|
178
|
-
|
179
|
-
|
132
|
+
def set_ruby_value(val)
|
133
|
+
init_for_ruby_value val if uninitialized?
|
134
|
+
set_value val
|
135
|
+
end
|
136
|
+
|
137
|
+
def init_for_ruby_value(val)
|
138
|
+
return init val.class.gtype if val.class.respond_to? :gtype
|
180
139
|
|
181
|
-
|
182
|
-
|
183
|
-
|
140
|
+
CLASS_TO_GTYPE_MAP.each do |klass, type|
|
141
|
+
return init type if val.is_a? klass
|
142
|
+
end
|
143
|
+
raise "Can't handle #{val.class}"
|
184
144
|
end
|
185
145
|
|
186
|
-
|
187
|
-
end
|
146
|
+
def set_none(_val); end
|
188
147
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
195
|
-
when TYPE_ARRAY
|
196
|
-
GLib::Array.wrap nil, boxed
|
197
|
-
else
|
198
|
-
current_gtype_class.wrap(boxed) unless boxed.null?
|
148
|
+
def get_none; end
|
149
|
+
|
150
|
+
def set_instance_enhanced(val)
|
151
|
+
check_type_compatibility val if val
|
152
|
+
set_instance val
|
199
153
|
end
|
200
|
-
end
|
201
154
|
|
202
|
-
|
203
|
-
|
204
|
-
|
155
|
+
def set_enum_enhanced(val)
|
156
|
+
val = current_gtype_class.to_native(val, nil)
|
157
|
+
set_enum val
|
158
|
+
end
|
205
159
|
|
206
|
-
|
207
|
-
|
208
|
-
|
160
|
+
def get_enum_enhanced
|
161
|
+
current_gtype_class.wrap(get_enum)
|
162
|
+
end
|
163
|
+
|
164
|
+
def set_flags_enhanced(val)
|
165
|
+
val = current_gtype_class.to_native(val, nil)
|
166
|
+
set_flags val
|
167
|
+
end
|
209
168
|
|
210
|
-
|
211
|
-
|
212
|
-
|
169
|
+
def get_flags_enhanced
|
170
|
+
current_gtype_class.wrap(get_flags)
|
171
|
+
end
|
172
|
+
|
173
|
+
def current_gtype_class
|
174
|
+
GirFFI::Builder.build_by_gtype(current_gtype)
|
175
|
+
end
|
176
|
+
|
177
|
+
def check_type_compatibility(val)
|
178
|
+
if GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
179
|
+
return
|
180
|
+
end
|
181
|
+
|
182
|
+
raise ArgumentError, "#{val.class} is incompatible with #{current_gtype_name}"
|
183
|
+
end
|
184
|
+
|
185
|
+
def wrap_boxed(boxed)
|
186
|
+
case current_gtype
|
187
|
+
when TYPE_STRV
|
188
|
+
GLib::Strv.wrap boxed
|
189
|
+
when TYPE_HASH_TABLE
|
190
|
+
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
191
|
+
when TYPE_ARRAY
|
192
|
+
GLib::Array.wrap nil, boxed
|
193
|
+
else
|
194
|
+
current_gtype_class.wrap(boxed) unless boxed.null?
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def get_method
|
199
|
+
method_map_entry.first
|
200
|
+
end
|
201
|
+
|
202
|
+
def set_method
|
203
|
+
method_map_entry.last
|
204
|
+
end
|
205
|
+
|
206
|
+
def method_map_entry
|
207
|
+
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
208
|
+
raise("No method map entry for '#{current_gtype_name}'")
|
209
|
+
end
|
213
210
|
end
|
211
|
+
|
212
|
+
prepend Overrides
|
214
213
|
end
|
215
214
|
end
|
@@ -35,7 +35,7 @@ module GObjectIntrospection
|
|
35
35
|
# Examples:
|
36
36
|
#
|
37
37
|
# build_array_method :fields
|
38
|
-
#
|
38
|
+
# build_array_method :properties, :property
|
39
39
|
# build_array_method :get_methods
|
40
40
|
#
|
41
41
|
def self.build_array_method(method, single = nil)
|
@@ -44,12 +44,12 @@ module GObjectIntrospection
|
|
44
44
|
single ||= method[0..-2]
|
45
45
|
count = method.sub(/^(get_)?/, '\\1n_')
|
46
46
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
47
|
-
def #{method}
|
48
|
-
#{cache_ivar} ||=
|
49
|
-
(0..(#{count} - 1)).map do |i|
|
50
|
-
#{single} i
|
51
|
-
end
|
52
|
-
end
|
47
|
+
def #{method} # def fields
|
48
|
+
#{cache_ivar} ||= # @fields_cache ||=
|
49
|
+
(0..(#{count} - 1)).map do |i| # (0..(n_fields - 1)).map do |i|
|
50
|
+
#{single} i # field i
|
51
|
+
end # end
|
52
|
+
end # end
|
53
53
|
CODE
|
54
54
|
end
|
55
55
|
|
@@ -76,18 +76,18 @@ module GObjectIntrospection
|
|
76
76
|
counter ||= "n_#{single}s"
|
77
77
|
fetcher ||= single
|
78
78
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
79
|
-
def #{method}(name)
|
80
|
-
#{cache_ivar} ||= begin
|
81
|
-
hash = {}
|
82
|
-
#{counter}.times do |i|
|
83
|
-
it = #{fetcher}(i)
|
84
|
-
hash[it.name] = it
|
85
|
-
end
|
86
|
-
hash
|
87
|
-
end
|
88
|
-
name = name.to_s
|
89
|
-
#{cache_ivar}[name]
|
90
|
-
end
|
79
|
+
def #{method}(name) # def find_field(name)
|
80
|
+
#{cache_ivar} ||= begin # @find_field_cache ||= begin
|
81
|
+
hash = {} # hash = {}
|
82
|
+
#{counter}.times do |i| # n_fields.times do |i|
|
83
|
+
it = #{fetcher}(i) # it = field(i)
|
84
|
+
hash[it.name] = it # hash[it.name] = it
|
85
|
+
end # end
|
86
|
+
hash # hash
|
87
|
+
end # end
|
88
|
+
name = name.to_s # name = name.to_s
|
89
|
+
#{cache_ivar}[name] # @find_field_cache[name]
|
90
|
+
end # end
|
91
91
|
CODE
|
92
92
|
end
|
93
93
|
|
@@ -111,6 +111,7 @@ module GObjectIntrospection
|
|
111
111
|
@container ||= begin
|
112
112
|
ptr = Lib.g_base_info_get_container self
|
113
113
|
return if ptr.null?
|
114
|
+
|
114
115
|
Lib.g_base_info_ref ptr
|
115
116
|
IRepository.wrap_ibaseinfo_pointer ptr
|
116
117
|
end
|
@@ -7,9 +7,13 @@ module GObject
|
|
7
7
|
module Lib
|
8
8
|
extend FFI::Library
|
9
9
|
extend FFI::BitMasks
|
10
|
+
|
10
11
|
ffi_lib "gobject-2.0"
|
12
|
+
|
11
13
|
attach_function :g_type_from_name, [:string], :size_t
|
12
14
|
attach_function :g_type_fundamental, [:size_t], :size_t
|
15
|
+
attach_function :g_type_class_ref, [:size_t], :pointer
|
16
|
+
|
13
17
|
attach_function :g_array_get_type, [], :size_t
|
14
18
|
attach_function :g_byte_array_get_type, [], :size_t
|
15
19
|
attach_function :g_error_get_type, [], :size_t
|
@@ -4,8 +4,7 @@ module GirFFI
|
|
4
4
|
# The ArrayElementConvertor class handles conversion from C array elements to
|
5
5
|
# ruby values
|
6
6
|
class ArrayElementConvertor
|
7
|
-
attr_reader :value_type
|
8
|
-
attr_reader :pointer
|
7
|
+
attr_reader :value_type, :pointer
|
9
8
|
|
10
9
|
def initialize(type, ptr)
|
11
10
|
@value_type = type
|
data/lib/gir_ffi/boxed_base.rb
CHANGED
@@ -4,11 +4,7 @@ require "gir_ffi/class_base"
|
|
4
4
|
|
5
5
|
module GirFFI
|
6
6
|
# Base class for generated classes representing boxed types.
|
7
|
-
class BoxedBase <
|
8
|
-
def initialize
|
9
|
-
store_pointer(nil)
|
10
|
-
end
|
11
|
-
|
7
|
+
class BoxedBase < StructLikeBase
|
12
8
|
def self.make_finalizer(struct)
|
13
9
|
proc do
|
14
10
|
if struct.owned?
|
data/lib/gir_ffi/builder.rb
CHANGED
@@ -11,10 +11,13 @@ module GirFFI
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def get_or_define_class(namespace, name, parent)
|
15
|
-
klass = optionally_define_constant(namespace, name)
|
16
|
-
|
17
|
-
|
14
|
+
def get_or_define_class(namespace, name, parent = nil)
|
15
|
+
klass = optionally_define_constant(namespace, name) do
|
16
|
+
parent ||= yield
|
17
|
+
Class.new parent
|
18
|
+
end
|
19
|
+
if parent && klass.superclass != parent
|
20
|
+
raise "Expected #{klass} to have superclass #{parent}, found #{klass.superclass}"
|
18
21
|
end
|
19
22
|
|
20
23
|
klass
|
@@ -59,7 +59,7 @@ module GirFFI
|
|
59
59
|
@argument_builder_collection ||=
|
60
60
|
ArgumentBuilderCollection.new(return_value_builder, argument_builders,
|
61
61
|
error_argument_builder: error_argument,
|
62
|
-
receiver_builder:
|
62
|
+
receiver_builder: receiver_builder)
|
63
63
|
end
|
64
64
|
|
65
65
|
def error_argument
|
@@ -16,6 +16,20 @@ module GirFFI
|
|
16
16
|
klass.class_eval mapping_method_definition, __FILE__, __LINE__
|
17
17
|
end
|
18
18
|
|
19
|
+
def mapping_method_definition
|
20
|
+
MappingMethodBuilder.for_callback(info).method_definition
|
21
|
+
end
|
22
|
+
|
23
|
+
def argument_ffi_types
|
24
|
+
@argument_ffi_types ||= @info.argument_ffi_types
|
25
|
+
end
|
26
|
+
|
27
|
+
def return_ffi_type
|
28
|
+
@return_ffi_type ||= @info.return_ffi_type
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
19
33
|
def setup_callback
|
20
34
|
optionally_define_constant klass, :Callback do
|
21
35
|
lib.callback callback_sym, argument_ffi_types, return_ffi_type
|
@@ -38,21 +52,9 @@ module GirFFI
|
|
38
52
|
end
|
39
53
|
end
|
40
54
|
|
41
|
-
def mapping_method_definition
|
42
|
-
MappingMethodBuilder.for_callback(info).method_definition
|
43
|
-
end
|
44
|
-
|
45
55
|
def callback_sym
|
46
56
|
@classname.to_sym
|
47
57
|
end
|
48
|
-
|
49
|
-
def argument_ffi_types
|
50
|
-
@argument_ffi_types ||= @info.argument_ffi_types
|
51
|
-
end
|
52
|
-
|
53
|
-
def return_ffi_type
|
54
|
-
@return_ffi_type ||= @info.return_ffi_type
|
55
|
-
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|