gir_ffi 0.15.1 → 0.15.6
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 +42 -0
- data/README.md +10 -10
- 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/container_class_methods.rb +1 -3
- 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 +2 -5
- data/lib/ffi-gobject/object.rb +102 -92
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +108 -117
- data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +2 -3
- data/lib/gir_ffi/boxed_base.rb +13 -11
- data/lib/gir_ffi/builder.rb +3 -4
- data/lib/gir_ffi/builder_helper.rb +10 -2
- 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 +25 -11
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/enum_builder.rb +9 -5
- data/lib/gir_ffi/builders/field_builder.rb +2 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- 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/module_builder.rb +4 -2
- 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 +18 -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 +34 -7
- 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 +7 -8
- data/lib/gir_ffi/class_base.rb +1 -0
- 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/type_map.rb +1 -0
- 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 +106 -143
- 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 -122
- 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 -151
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -139
- 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 -322
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -134
- data/test/gir_ffi/builders/function_builder_test.rb +0 -550
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
- 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 -158
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- 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 -524
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -166
- data/test/gir_ffi/core_test.rb +0 -98
- 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 -20
- 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 -21
- 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 -711
- 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 -65
- 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 -53
- data/test/integration/generated_everything_test.rb +0 -452
- data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
- 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 -32
- 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 -4038
- 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 -43
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -93
- 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/gir_ffi/builder.rb
CHANGED
@@ -23,9 +23,8 @@ module GirFFI
|
|
23
23
|
fund = GObject.type_fundamental gtype
|
24
24
|
if fund == GObject::TYPE_BOXED
|
25
25
|
UnintrospectableBoxedInfo.new gtype
|
26
|
-
elsif fund == GObject::TYPE_OBJECT
|
27
|
-
|
28
|
-
elsif fund >= GObject::TYPE_RESERVED_USER_FIRST
|
26
|
+
elsif fund == GObject::TYPE_OBJECT ||
|
27
|
+
fund >= GObject::TYPE_RESERVED_USER_FIRST
|
29
28
|
UnintrospectableTypeInfo.new gtype
|
30
29
|
else
|
31
30
|
raise "Unable to handle type #{GObject.type_name gtype}"
|
@@ -47,7 +46,7 @@ module GirFFI
|
|
47
46
|
end
|
48
47
|
Builders::ModuleBuilder.new(module_name,
|
49
48
|
namespace: namespace,
|
50
|
-
version:
|
49
|
+
version: version).generate
|
51
50
|
end
|
52
51
|
|
53
52
|
# TODO: Move elsewhere, perhaps to FunctionBuilder.
|
@@ -11,8 +11,16 @@ module GirFFI
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def get_or_define_class(namespace, name, parent)
|
15
|
-
optionally_define_constant(namespace, name)
|
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}"
|
21
|
+
end
|
22
|
+
|
23
|
+
klass
|
16
24
|
end
|
17
25
|
|
18
26
|
def get_or_define_module(parent, name)
|
@@ -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
|
@@ -23,24 +37,24 @@ module GirFFI
|
|
23
37
|
end
|
24
38
|
|
25
39
|
def klass
|
26
|
-
@klass ||= get_or_define_class
|
40
|
+
@klass ||= get_or_define_class container_module, @classname, CallbackBase
|
27
41
|
end
|
28
42
|
|
29
|
-
def
|
30
|
-
|
43
|
+
def container_module
|
44
|
+
@container_module ||=
|
45
|
+
if @info.container
|
46
|
+
type_info = @info.container
|
47
|
+
field_info = type_info.container
|
48
|
+
container_class_info = field_info.container
|
49
|
+
namespace_module.const_get container_class_info.safe_name
|
50
|
+
else
|
51
|
+
namespace_module
|
52
|
+
end
|
31
53
|
end
|
32
54
|
|
33
55
|
def callback_sym
|
34
56
|
@classname.to_sym
|
35
57
|
end
|
36
|
-
|
37
|
-
def argument_ffi_types
|
38
|
-
@argument_ffi_types ||= @info.argument_ffi_types
|
39
|
-
end
|
40
|
-
|
41
|
-
def return_ffi_type
|
42
|
-
@return_ffi_type ||= @info.return_ffi_type
|
43
|
-
end
|
44
58
|
end
|
45
59
|
end
|
46
60
|
end
|
@@ -9,11 +9,7 @@ module GirFFI
|
|
9
9
|
# callbacks.
|
10
10
|
class CallbackReturnValueBuilder < BaseReturnValueBuilder
|
11
11
|
def post_conversion
|
12
|
-
|
13
|
-
optional_outgoing_ref + base_post_conversion
|
14
|
-
else
|
15
|
-
[]
|
16
|
-
end
|
12
|
+
optional_outgoing_ref + base_post_conversion
|
17
13
|
end
|
18
14
|
|
19
15
|
private
|
@@ -35,7 +31,9 @@ module GirFFI
|
|
35
31
|
end
|
36
32
|
|
37
33
|
def base_post_conversion
|
38
|
-
if
|
34
|
+
if !has_post_conversion?
|
35
|
+
[]
|
36
|
+
elsif specialized_type_tag == :object
|
39
37
|
["#{post_converted_name} = #{post_convertor.conversion}.to_ptr"]
|
40
38
|
else
|
41
39
|
["#{post_converted_name} = #{post_convertor.conversion}"]
|
@@ -16,7 +16,7 @@ module GirFFI
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def value_spec
|
19
|
-
|
19
|
+
value_infos.map do |vinfo|
|
20
20
|
val = GirFFI::ArgHelper.cast_uint32_to_int32(vinfo.value)
|
21
21
|
[vinfo.name.to_sym, val]
|
22
22
|
end.flatten
|
@@ -42,7 +42,7 @@ module GirFFI
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def setup_value_constants
|
45
|
-
|
45
|
+
value_infos.each do |vinfo|
|
46
46
|
optionally_define_constant klass, vinfo.constant_name do
|
47
47
|
vinfo.value
|
48
48
|
end
|
@@ -51,9 +51,9 @@ module GirFFI
|
|
51
51
|
|
52
52
|
def setup_inspect
|
53
53
|
klass.instance_eval <<-RUBY, __FILE__, __LINE__ + 1
|
54
|
-
def self.inspect
|
55
|
-
"#{@namespace}::#{@classname}"
|
56
|
-
end
|
54
|
+
def self.inspect # def self.inspect
|
55
|
+
"#{@namespace}::#{@classname}" # "GFoo::Bar"
|
56
|
+
end # end
|
57
57
|
RUBY
|
58
58
|
end
|
59
59
|
|
@@ -64,6 +64,10 @@ module GirFFI
|
|
64
64
|
def superclass
|
65
65
|
EnumBase
|
66
66
|
end
|
67
|
+
|
68
|
+
def value_infos
|
69
|
+
@value_infos ||= info.values
|
70
|
+
end
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|
@@ -58,7 +58,8 @@ module GirFFI
|
|
58
58
|
private
|
59
59
|
|
60
60
|
def pointer_to_value_conversion
|
61
|
-
PointerValueConvertor.new(field_type_tag)
|
61
|
+
PointerValueConvertor.new(field_type_tag)
|
62
|
+
.pointer_to_value(field_ptr, field_offset)
|
62
63
|
end
|
63
64
|
|
64
65
|
def field_offset
|
@@ -39,7 +39,7 @@ module GirFFI
|
|
39
39
|
def receiver_call_argument
|
40
40
|
container_type_info = ReceiverTypeInfo.new(container_info)
|
41
41
|
if @info.instance_ownership_transfer == :everything &&
|
42
|
-
|
42
|
+
container_type_info.flattened_tag == :object
|
43
43
|
"self.ref"
|
44
44
|
else
|
45
45
|
"self"
|
@@ -8,7 +8,9 @@ module GirFFI
|
|
8
8
|
# Implements the creation of a module representing an Interface.
|
9
9
|
class InterfaceBuilder < RegisteredTypeBuilder
|
10
10
|
def interface_struct
|
11
|
-
@interface_struct ||=
|
11
|
+
@interface_struct ||=
|
12
|
+
StructBuilder.new(iface_struct_info,
|
13
|
+
superclass: GObject::TypeInterface).build_class
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
@@ -12,13 +12,16 @@ module GirFFI
|
|
12
12
|
# handler. This method converts arguments from C to Ruby, and the
|
13
13
|
# result from Ruby to C.
|
14
14
|
class MarshallingMethodBuilder < BaseMethodBuilder
|
15
|
-
def self.for_signal(
|
15
|
+
def self.for_signal(info)
|
16
|
+
container_info = info.container
|
17
|
+
container_type_info = ReceiverTypeInfo.new(container_info)
|
18
|
+
receiver_info = ReceiverArgumentInfo.new(container_type_info)
|
16
19
|
new receiver_info, info
|
17
20
|
end
|
18
21
|
|
19
22
|
def initialize(receiver_info, info)
|
20
23
|
super(info, ClosureReturnValueBuilder,
|
21
|
-
receiver_info:
|
24
|
+
receiver_info: receiver_info,
|
22
25
|
argument_builder_class: ClosureArgumentBuilder)
|
23
26
|
end
|
24
27
|
|
@@ -18,10 +18,10 @@ module GirFFI
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def method_definition
|
21
|
-
code = "def #{qualified_method_name}"
|
22
|
-
code
|
23
|
-
method_lines.each { |line| code
|
24
|
-
code
|
21
|
+
code = +"def #{qualified_method_name}"
|
22
|
+
code << "(#{method_arguments.join(', ')})" if method_arguments.any?
|
23
|
+
method_lines.each { |line| code << "\n #{line}" }
|
24
|
+
code << "\nend\n"
|
25
25
|
end
|
26
26
|
|
27
27
|
private
|
@@ -43,7 +43,7 @@ module GirFFI
|
|
43
43
|
def find_namespaced_class_info(classname)
|
44
44
|
name = classname.to_s
|
45
45
|
info = gir.find_by_name(@namespace, name) ||
|
46
|
-
|
46
|
+
gir.find_by_name(@namespace, name.sub(/^./, &:downcase))
|
47
47
|
unless info
|
48
48
|
raise NameError,
|
49
49
|
"Class #{classname} not found in namespace #{@namespace}"
|
@@ -88,7 +88,9 @@ module GirFFI
|
|
88
88
|
lib.extend FFI::Library
|
89
89
|
lib.extend FFI::BitMasks
|
90
90
|
lib.ffi_lib_flags :global, :lazy
|
91
|
-
|
91
|
+
if shared_library_specification
|
92
|
+
lib.ffi_lib(*shared_library_specification.split(/,/))
|
93
|
+
end
|
92
94
|
end
|
93
95
|
|
94
96
|
def shared_library_specification
|
@@ -18,6 +18,10 @@ module GirFFI
|
|
18
18
|
ObjectBase
|
19
19
|
end
|
20
20
|
|
21
|
+
def object_class_struct
|
22
|
+
GObject::TypeClass
|
23
|
+
end
|
24
|
+
|
21
25
|
def ancestor_infos
|
22
26
|
[]
|
23
27
|
end
|
@@ -32,7 +36,16 @@ module GirFFI
|
|
32
36
|
end
|
33
37
|
|
34
38
|
def object_class_struct
|
35
|
-
@object_class_struct ||=
|
39
|
+
@object_class_struct ||=
|
40
|
+
begin
|
41
|
+
parent_struct = parent_builder.object_class_struct
|
42
|
+
if object_class_struct_info
|
43
|
+
StructBuilder.new(object_class_struct_info,
|
44
|
+
superclass: parent_struct).build_class
|
45
|
+
else
|
46
|
+
parent_struct
|
47
|
+
end
|
48
|
+
end
|
36
49
|
end
|
37
50
|
|
38
51
|
def ancestor_infos
|
@@ -48,8 +61,7 @@ module GirFFI
|
|
48
61
|
protected
|
49
62
|
|
50
63
|
def object_class_struct_info
|
51
|
-
@object_class_struct_info ||=
|
52
|
-
info.class_struct || parent_builder.object_class_struct_info
|
64
|
+
@object_class_struct_info ||= info.class_struct
|
53
65
|
end
|
54
66
|
|
55
67
|
private
|
@@ -107,9 +119,9 @@ module GirFFI
|
|
107
119
|
return if vfunc_name == invoker_name
|
108
120
|
|
109
121
|
klass.class_eval <<-DEF, __FILE__, __LINE__ + 1
|
110
|
-
def #{vfunc_name} *args, &block
|
111
|
-
#{invoker_name}(*args, &block)
|
112
|
-
end
|
122
|
+
def #{vfunc_name} *args, &block # def foo *args, &block
|
123
|
+
#{invoker_name}(*args, &block) # foo_invoker *args, &block
|
124
|
+
end # end
|
113
125
|
DEF
|
114
126
|
end
|
115
127
|
|
@@ -11,8 +11,7 @@ module GirFFI
|
|
11
11
|
module Builders
|
12
12
|
# Method builder used for the creation of property getter methods.
|
13
13
|
class PropertyGetterBuilder
|
14
|
-
attr_reader :info
|
15
|
-
attr_reader :return_value_builder
|
14
|
+
attr_reader :info, :return_value_builder
|
16
15
|
|
17
16
|
def initialize(info, return_value_builder)
|
18
17
|
@return_value_builder = return_value_builder
|
@@ -18,13 +18,11 @@ module GirFFI
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def marshaller_definition
|
21
|
-
|
22
|
-
receiver_info = ReceiverArgumentInfo.new(container_type_info)
|
23
|
-
|
24
|
-
MarshallingMethodBuilder.for_signal(receiver_info,
|
25
|
-
info).method_definition
|
21
|
+
MarshallingMethodBuilder.for_signal(info).method_definition
|
26
22
|
end
|
27
23
|
|
24
|
+
private
|
25
|
+
|
28
26
|
def klass
|
29
27
|
@klass ||= get_or_define_class container_class, @classname, GObject::RubyClosure
|
30
28
|
end
|
@@ -10,21 +10,48 @@ module GirFFI
|
|
10
10
|
class StructBuilder < RegisteredTypeBuilder
|
11
11
|
include StructLike
|
12
12
|
|
13
|
+
def initialize(info, superclass: nil)
|
14
|
+
@superclass = superclass
|
15
|
+
super info
|
16
|
+
end
|
17
|
+
|
18
|
+
def superclass
|
19
|
+
@superclass ||= if info.gtype_struct?
|
20
|
+
gtype_struct_parent
|
21
|
+
elsif GObject.type_fundamental(info.gtype) == GObject::TYPE_BOXED
|
22
|
+
BoxedBase
|
23
|
+
else
|
24
|
+
StructBase
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
13
30
|
def layout_superclass
|
14
31
|
GirFFI::Struct
|
15
32
|
end
|
16
33
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
return parent_field_type.tag_or_class if info.gtype_struct?
|
21
|
-
return BoxedBase if GObject.type_fundamental(info.gtype) == GObject::TYPE_BOXED
|
34
|
+
def klass
|
35
|
+
@klass ||= get_or_define_class(namespace_module, @classname) { superclass }
|
36
|
+
end
|
22
37
|
|
23
|
-
|
38
|
+
def parent_info
|
39
|
+
@parent_info ||= parent_field_type&.interface
|
24
40
|
end
|
25
41
|
|
26
42
|
def parent_field_type
|
27
|
-
fields.first
|
43
|
+
fields.first&.field_type
|
44
|
+
end
|
45
|
+
|
46
|
+
def gtype_struct_parent
|
47
|
+
full_name = info.full_type_name
|
48
|
+
if full_name == "GObject::InitiallyUnownedClass"
|
49
|
+
GObject::ObjectClass
|
50
|
+
else
|
51
|
+
raise "Unable to calculate parent class for #{full_name}" unless parent_info
|
52
|
+
|
53
|
+
Builder.build_class parent_info
|
54
|
+
end
|
28
55
|
end
|
29
56
|
end
|
30
57
|
end
|