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
@@ -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}"]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "gir_ffi/builders/struct_builder"
|
4
|
+
|
5
|
+
module GirFFI
|
6
|
+
module Builders
|
7
|
+
# Implements the creation of a class representing a Struct.
|
8
|
+
class ClassStructBuilder < RegisteredTypeBuilder
|
9
|
+
include StructLike
|
10
|
+
|
11
|
+
attr_reader :superclass
|
12
|
+
|
13
|
+
def initialize(info, super_class_struct)
|
14
|
+
@superclass = super_class_struct
|
15
|
+
super info
|
16
|
+
raise "Info does not represent gtype_struct" unless info.gtype_struct?
|
17
|
+
end
|
18
|
+
|
19
|
+
def layout_superclass
|
20
|
+
GirFFI::Struct
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
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
|
|
@@ -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
|
+
ClassStructBuilder.new(iface_struct_info,
|
13
|
+
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
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require "gir_ffi/builders/registered_type_builder"
|
4
4
|
require "gir_ffi/builders/with_layout"
|
5
5
|
require "gir_ffi/builders/property_builder"
|
6
|
+
require "gir_ffi/builders/class_struct_builder"
|
6
7
|
require "gir_ffi/object_base"
|
7
8
|
require "gir_ffi/struct"
|
8
9
|
|
@@ -18,6 +19,10 @@ module GirFFI
|
|
18
19
|
ObjectBase
|
19
20
|
end
|
20
21
|
|
22
|
+
def object_class_struct
|
23
|
+
GObject::TypeClass
|
24
|
+
end
|
25
|
+
|
21
26
|
def ancestor_infos
|
22
27
|
[]
|
23
28
|
end
|
@@ -32,7 +37,13 @@ module GirFFI
|
|
32
37
|
end
|
33
38
|
|
34
39
|
def object_class_struct
|
35
|
-
@object_class_struct ||=
|
40
|
+
@object_class_struct ||=
|
41
|
+
if object_class_struct_info
|
42
|
+
ClassStructBuilder.new(object_class_struct_info,
|
43
|
+
parent_builder.object_class_struct).build_class
|
44
|
+
else
|
45
|
+
parent_builder.object_class_struct
|
46
|
+
end
|
36
47
|
end
|
37
48
|
|
38
49
|
def ancestor_infos
|
@@ -48,8 +59,7 @@ module GirFFI
|
|
48
59
|
protected
|
49
60
|
|
50
61
|
def object_class_struct_info
|
51
|
-
@object_class_struct_info ||=
|
52
|
-
info.class_struct || parent_builder.object_class_struct_info
|
62
|
+
@object_class_struct_info ||= info.class_struct
|
53
63
|
end
|
54
64
|
|
55
65
|
private
|
@@ -107,9 +117,9 @@ module GirFFI
|
|
107
117
|
return if vfunc_name == invoker_name
|
108
118
|
|
109
119
|
klass.class_eval <<-DEF, __FILE__, __LINE__ + 1
|
110
|
-
def #{vfunc_name} *args, &block
|
111
|
-
#{invoker_name}(*args, &block)
|
112
|
-
end
|
120
|
+
def #{vfunc_name} *args, &block # def foo *args, &block
|
121
|
+
#{invoker_name}(*args, &block) # foo_invoker *args, &block
|
122
|
+
end # end
|
113
123
|
DEF
|
114
124
|
end
|
115
125
|
|
@@ -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
|
@@ -15,16 +15,16 @@ module GirFFI
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def superclass
|
18
|
-
|
19
|
-
if info.full_type_name == "GObject::InitiallyUnownedClass"
|
20
|
-
return GObject::ObjectClass
|
21
|
-
end
|
22
|
-
return parent_field_type.tag_or_class if info.gtype_struct?
|
18
|
+
raise "Use ClassStructBuilder to build #{info.full_type_name}" if info.gtype_struct?
|
23
19
|
return BoxedBase if GObject.type_fundamental(info.gtype) == GObject::TYPE_BOXED
|
24
20
|
|
25
21
|
StructBase
|
26
22
|
end
|
27
23
|
|
24
|
+
def klass
|
25
|
+
@klass ||= get_or_define_class(namespace_module, @classname) { superclass }
|
26
|
+
end
|
27
|
+
|
28
28
|
def parent_field_type
|
29
29
|
fields.first.field_type
|
30
30
|
end
|
@@ -12,6 +12,7 @@ module GirFFI
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def setup_class
|
15
|
+
check_ancestry
|
15
16
|
setup_layout
|
16
17
|
register_type
|
17
18
|
setup_constants
|
@@ -26,6 +27,12 @@ module GirFFI
|
|
26
27
|
|
27
28
|
private
|
28
29
|
|
30
|
+
def check_ancestry
|
31
|
+
unless klass < GirFFI::ObjectBase
|
32
|
+
raise ArgumentError, "#{klass} is not a GObject class"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
29
36
|
def register_type
|
30
37
|
@gtype = GObject.type_register_static(parent_gtype.to_i,
|
31
38
|
info.g_name,
|
@@ -98,7 +105,7 @@ module GirFFI
|
|
98
105
|
end
|
99
106
|
|
100
107
|
def class_size
|
101
|
-
parent_gtype.class_size + interface_gtypes.map(&:class_size).
|
108
|
+
parent_gtype.class_size + interface_gtypes.map(&:class_size).sum
|
102
109
|
end
|
103
110
|
|
104
111
|
def setup_properties(object_class_ptr)
|
@@ -35,14 +35,14 @@ module GirFFI
|
|
35
35
|
from_native ptr, nil
|
36
36
|
end
|
37
37
|
|
38
|
-
CALLBACKS =
|
38
|
+
CALLBACKS = Set.new
|
39
39
|
|
40
40
|
def self.store_callback(prc)
|
41
|
-
CALLBACKS
|
41
|
+
CALLBACKS.add prc
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.drop_callback(prc)
|
45
|
-
CALLBACKS.delete prc
|
45
|
+
CALLBACKS.delete prc
|
46
46
|
end
|
47
47
|
|
48
48
|
# Create Callback from a Proc. Makes sure arguments are properly wrapped,
|
data/lib/gir_ffi/core.rb
CHANGED
@@ -28,8 +28,23 @@ module GirFFI
|
|
28
28
|
Builder.build_module namespace, version
|
29
29
|
end
|
30
30
|
|
31
|
-
def define_type(klass
|
32
|
-
|
31
|
+
def define_type(klass)
|
32
|
+
unless klass < GirFFI::ObjectBase
|
33
|
+
raise ArgumentError, "#{klass} is not a GObject class"
|
34
|
+
end
|
35
|
+
|
36
|
+
klass.prepare_user_defined_class
|
37
|
+
info = klass.gir_info
|
38
|
+
|
39
|
+
unless info.is_a? UserDefinedObjectInfo
|
40
|
+
raise ArgumentError, "#{klass} is not a user-defined class"
|
41
|
+
end
|
42
|
+
|
43
|
+
if block_given?
|
44
|
+
warn "Using define_type with a block is deprecated." \
|
45
|
+
" Call the relevant functions inside the class definition instead."
|
46
|
+
yield info
|
47
|
+
end
|
33
48
|
Builders::UserDefinedBuilder.new(info).build_class
|
34
49
|
|
35
50
|
klass.gtype
|
data/lib/gir_ffi/glib_error.rb
CHANGED
@@ -4,8 +4,7 @@ module GirFFI
|
|
4
4
|
# Exception class to be raised whenever an error is signaled through
|
5
5
|
# GLib::Error.
|
6
6
|
class GLibError < RuntimeError
|
7
|
-
attr_reader :domain_quark
|
8
|
-
attr_reader :code
|
7
|
+
attr_reader :domain_quark, :code
|
9
8
|
|
10
9
|
def initialize(g_error)
|
11
10
|
@domain_quark = g_error.domain
|
data/lib/gir_ffi/in_pointer.rb
CHANGED
@@ -67,6 +67,8 @@ module GirFFI
|
|
67
67
|
from_utf8_array ary
|
68
68
|
when :gboolean
|
69
69
|
from_boolean_array ary
|
70
|
+
when :guint8
|
71
|
+
from_char_array ary
|
70
72
|
else
|
71
73
|
from_basic_type_array type, ary
|
72
74
|
end
|
@@ -92,6 +94,11 @@ module GirFFI
|
|
92
94
|
from_basic_type_array :int, ary.map { |val| val ? 1 : 0 }
|
93
95
|
end
|
94
96
|
|
97
|
+
def from_char_array(ary)
|
98
|
+
ary = ary.bytes if ary.is_a? String
|
99
|
+
from_basic_type_array :int8, ary
|
100
|
+
end
|
101
|
+
|
95
102
|
def from_pointer_array(type, ary)
|
96
103
|
from_basic_type_array :pointer, ary.map { |elem| from type, elem }
|
97
104
|
end
|
data/lib/gir_ffi/object_base.rb
CHANGED
@@ -81,5 +81,32 @@ module GirFFI
|
|
81
81
|
it < GirFFI::ObjectBase || it.singleton_class.include?(InterfaceBase)
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
def self.prepare_user_defined_class
|
86
|
+
return if const_defined? :GIR_INFO, false
|
87
|
+
|
88
|
+
info = UserDefinedObjectInfo.new(self)
|
89
|
+
const_set :GIR_INFO, info
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.install_property(param_spec)
|
93
|
+
if const_defined? :GIR_FFI_BUILDER, false
|
94
|
+
raise "Installing a property in a class that is already set up is not supported"
|
95
|
+
end
|
96
|
+
|
97
|
+
prepare_user_defined_class
|
98
|
+
|
99
|
+
gir_info.install_property(param_spec)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.install_vfunc_implementation(name, implementation = nil)
|
103
|
+
if const_defined? :GIR_FFI_BUILDER, false
|
104
|
+
raise "Installing a property in a class that is already set up is not supported"
|
105
|
+
end
|
106
|
+
|
107
|
+
prepare_user_defined_class
|
108
|
+
|
109
|
+
gir_info.install_vfunc_implementation(name, implementation)
|
110
|
+
end
|
84
111
|
end
|
85
112
|
end
|
@@ -3,8 +3,7 @@
|
|
3
3
|
module GirFFI
|
4
4
|
# Represents a return value with the same interface as IArgInfo
|
5
5
|
class ReturnValueInfo
|
6
|
-
attr_reader :argument_type
|
7
|
-
attr_reader :ownership_transfer
|
6
|
+
attr_reader :argument_type, :ownership_transfer
|
8
7
|
|
9
8
|
def initialize(type, ownership_transfer, skip)
|
10
9
|
@argument_type = type
|
data/lib/gir_ffi/struct_base.rb
CHANGED
@@ -4,14 +4,6 @@ require "gir_ffi/struct_like_base"
|
|
4
4
|
|
5
5
|
module GirFFI
|
6
6
|
# Base class for generated classes representing GLib structs.
|
7
|
-
class StructBase <
|
8
|
-
extend FFI::DataConverter
|
9
|
-
include GirFFI::StructLikeBase
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@struct = self.class::Struct.new
|
13
|
-
@struct.owned = true
|
14
|
-
@struct.to_ptr.autorelease = false
|
15
|
-
end
|
7
|
+
class StructBase < StructLikeBase
|
16
8
|
end
|
17
9
|
end
|
@@ -1,15 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module GirFFI
|
4
|
-
# Base
|
4
|
+
# Base class providing methods for generated classes representing GLib
|
5
5
|
# structs, unions and boxed types.
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class StructLikeBase < ClassBase
|
7
|
+
extend FFI::DataConverter
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
store_pointer(nil)
|
11
|
+
struct.owned = true
|
12
|
+
struct.to_ptr.autorelease = false
|
9
13
|
end
|
10
14
|
|
11
15
|
# Class methods for struct-like classes.
|
12
|
-
|
16
|
+
class << self
|
13
17
|
def native_type
|
14
18
|
FFI::Type::Struct.new(self::Struct)
|
15
19
|
end
|