gir_ffi 0.14.1 → 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 +56 -0
- data/README.md +12 -12
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +26 -21
- data/lib/ffi-glib/array.rb +14 -4
- data/lib/ffi-glib/byte_array.rb +9 -3
- data/lib/ffi-glib/container_class_methods.rb +1 -1
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/error.rb +1 -1
- data/lib/ffi-glib/hash_table.rb +4 -5
- data/lib/ffi-glib/list.rb +12 -6
- data/lib/ffi-glib/list_methods.rb +13 -1
- data/lib/ffi-glib/main_loop.rb +3 -3
- data/lib/ffi-glib/ptr_array.rb +30 -8
- data/lib/ffi-glib/s_list.rb +11 -5
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject.rb +13 -16
- data/lib/ffi-gobject/object.rb +82 -87
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/param_spec.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +2 -2
- data/lib/ffi-gobject/value.rb +136 -126
- data/lib/ffi-gobject_introspection.rb +20 -20
- data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
- data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
- data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
- data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
- data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
- data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +30 -19
- data/lib/ffi-gobject_introspection/strv.rb +1 -1
- data/lib/gir_ffi-base.rb +1 -1
- data/lib/gir_ffi-base/gobject.rb +26 -25
- data/lib/gir_ffi-base/gobject/lib.rb +7 -2
- data/lib/gir_ffi.rb +3 -3
- data/lib/gir_ffi/allocation_helper.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +4 -4
- data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
- data/lib/gir_ffi/boolean.rb +1 -1
- data/lib/gir_ffi/boxed_base.rb +2 -6
- data/lib/gir_ffi/builder.rb +19 -11
- data/lib/gir_ffi/builder_helper.rb +10 -2
- data/lib/gir_ffi/builders/argument_builder.rb +19 -19
- data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
- data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
- data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
- data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
- data/lib/gir_ffi/builders/callback_builder.rb +28 -14
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
- data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
- data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/constant_builder.rb +1 -1
- data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
- data/lib/gir_ffi/builders/enum_builder.rb +11 -7
- data/lib/gir_ffi/builders/field_builder.rb +20 -18
- data/lib/gir_ffi/builders/flags_builder.rb +2 -2
- data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +11 -5
- data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
- data/lib/gir_ffi/builders/interface_builder.rb +5 -3
- data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
- data/lib/gir_ffi/builders/method_template.rb +5 -5
- data/lib/gir_ffi/builders/module_builder.rb +7 -7
- 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 +22 -12
- data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/property_builder.rb +14 -14
- data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
- data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
- data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
- data/lib/gir_ffi/builders/struct_builder.rb +8 -6
- data/lib/gir_ffi/builders/struct_like.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +12 -12
- data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
- data/lib/gir_ffi/builders/union_builder.rb +4 -4
- data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
- data/lib/gir_ffi/builders/with_layout.rb +2 -2
- data/lib/gir_ffi/callback_base.rb +7 -9
- data/lib/gir_ffi/class_base.rb +6 -5
- data/lib/gir_ffi/core.rb +36 -22
- data/lib/gir_ffi/enum_base.rb +1 -1
- data/lib/gir_ffi/enum_like_base.rb +2 -2
- data/lib/gir_ffi/error_argument_info.rb +2 -2
- data/lib/gir_ffi/error_type_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/flags_base.rb +1 -1
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +17 -0
- data/lib/gir_ffi/info_ext.rb +15 -15
- data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
- data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
- data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
- data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
- data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
- data/lib/gir_ffi/interface_base.rb +3 -3
- data/lib/gir_ffi/lib_c.rb +1 -1
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/object_base.rb +30 -4
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/receiver_type_info.rb +2 -2
- data/lib/gir_ffi/registered_type_base.rb +1 -1
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/sized_array.rb +4 -2
- data/lib/gir_ffi/struct.rb +1 -1
- data/lib/gir_ffi/struct_base.rb +2 -10
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/type_map.rb +2 -23
- data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
- data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
- data/lib/gir_ffi/union.rb +1 -1
- data/lib/gir_ffi/union_base.rb +2 -10
- data/lib/gir_ffi/user_defined_object_info.rb +9 -4
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +102 -155
- data/Gemfile +0 -12
- data/Rakefile +0 -9
- data/lib/ffi-glib/array_methods.rb +0 -16
- data/tasks/test.rake +0 -203
- data/test/base_test_helper.rb +0 -63
- data/test/ffi-glib/array_test.rb +0 -188
- data/test/ffi-glib/byte_array_test.rb +0 -22
- data/test/ffi-glib/bytes_test.rb +0 -56
- 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 -72
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -140
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -370
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
- 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 -33
- 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 -140
- 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 -300
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
- 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 -538
- 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 -161
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
- data/test/gir_ffi/builders/union_builder_test.rb +0 -31
- 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 -253
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -168
- 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_out_pointer_test.rb +0 -56
- data/test/gir_ffi/in_pointer_test.rb +0 -183
- 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 -697
- 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 -63
- 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 -2995
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -12
- data/test/integration/generated_gobject_test.rb +0 -116
- data/test/integration/generated_gst_test.rb +0 -34
- data/test/integration/generated_gtk_source_test.rb +0 -27
- data/test/integration/generated_gtop_test.rb +0 -29
- 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 -3850
- data/test/integration/generated_secret_test.rb +0 -17
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -49
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -52
- 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/boolean.rb
CHANGED
data/lib/gir_ffi/boxed_base.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
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
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "gir_ffi/builders/type_builder"
|
4
|
+
require "gir_ffi/builders/module_builder"
|
5
|
+
require "gir_ffi/builder_helper"
|
6
|
+
require "gir_ffi/unintrospectable_type_info"
|
7
|
+
require "gir_ffi/unintrospectable_boxed_info"
|
8
8
|
|
9
9
|
module GirFFI
|
10
10
|
# Builds modules and classes based on information found in the
|
@@ -19,11 +19,17 @@ module GirFFI
|
|
19
19
|
|
20
20
|
def self.build_by_gtype(gtype)
|
21
21
|
info = GObjectIntrospection::IRepository.default.find_by_gtype gtype
|
22
|
-
info ||=
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
info ||= begin
|
23
|
+
fund = GObject.type_fundamental gtype
|
24
|
+
if fund == GObject::TYPE_BOXED
|
25
|
+
UnintrospectableBoxedInfo.new gtype
|
26
|
+
elsif fund == GObject::TYPE_OBJECT
|
27
|
+
UnintrospectableTypeInfo.new gtype
|
28
|
+
elsif fund >= GObject::TYPE_RESERVED_USER_FIRST
|
29
|
+
UnintrospectableTypeInfo.new gtype
|
30
|
+
else
|
31
|
+
raise "Unable to handle type #{GObject.type_name gtype}"
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
build_class info
|
@@ -36,10 +42,12 @@ module GirFFI
|
|
36
42
|
unless modul.const_defined? :GIR_FFI_BUILDER
|
37
43
|
raise "The module #{module_name} was already defined elsewhere"
|
38
44
|
end
|
45
|
+
|
46
|
+
return modul
|
39
47
|
end
|
40
48
|
Builders::ModuleBuilder.new(module_name,
|
41
49
|
namespace: namespace,
|
42
|
-
version:
|
50
|
+
version: version).generate
|
43
51
|
end
|
44
52
|
|
45
53
|
# 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)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
3
|
+
require "gir_ffi/builders/base_argument_builder"
|
4
|
+
require "gir_ffi/builders/closure_to_pointer_convertor"
|
5
|
+
require "gir_ffi/builders/full_c_to_ruby_convertor"
|
6
|
+
require "gir_ffi/builders/ruby_to_c_convertor"
|
7
|
+
require "gir_ffi/builders/pointer_value_convertor"
|
8
|
+
require "gir_ffi/builders/null_convertor"
|
9
9
|
|
10
10
|
module GirFFI
|
11
11
|
module Builders
|
@@ -91,8 +91,8 @@ module GirFFI
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def ingoing_value_storage
|
94
|
-
PointerValueConvertor.new(type_spec)
|
95
|
-
value_to_pointer(call_argument_name, ingoing_convertor.conversion)
|
94
|
+
PointerValueConvertor.new(type_spec)
|
95
|
+
.value_to_pointer(call_argument_name, ingoing_convertor.conversion)
|
96
96
|
end
|
97
97
|
|
98
98
|
def has_post_conversion?
|
@@ -114,7 +114,7 @@ module GirFFI
|
|
114
114
|
|
115
115
|
def outgoing_convertor(base)
|
116
116
|
FullCToRubyConvertor.new(type_info, base, length_argument_name,
|
117
|
-
ownership_transfer:
|
117
|
+
ownership_transfer: arginfo.ownership_transfer)
|
118
118
|
end
|
119
119
|
|
120
120
|
def sub_type_spec
|
@@ -138,11 +138,11 @@ module GirFFI
|
|
138
138
|
# is a pointer. For example, an out parameter of type gint8* will always
|
139
139
|
# be allocated by the caller (that's us).
|
140
140
|
def allocated_by_them?
|
141
|
-
|
141
|
+
!arginfo.caller_allocates? && type_info.pointer?
|
142
142
|
end
|
143
143
|
|
144
144
|
def length_argument_name
|
145
|
-
length_arg
|
145
|
+
length_arg&.post_converted_name
|
146
146
|
end
|
147
147
|
|
148
148
|
def needs_size_check?
|
@@ -155,12 +155,12 @@ module GirFFI
|
|
155
155
|
end
|
156
156
|
|
157
157
|
def skipped_in?
|
158
|
-
|
158
|
+
arginfo.skip?
|
159
159
|
end
|
160
160
|
|
161
161
|
def skipped_out?
|
162
|
-
|
163
|
-
|
162
|
+
arginfo.skip? ||
|
163
|
+
array_arg && array_arg.specialized_type_tag == :strv
|
164
164
|
end
|
165
165
|
|
166
166
|
def has_output_value?
|
@@ -176,7 +176,7 @@ module GirFFI
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def array_length_assignment
|
179
|
-
arrname =
|
179
|
+
arrname = array_arg.name
|
180
180
|
"#{name} = #{arrname}.nil? ? 0 : #{arrname}.length"
|
181
181
|
end
|
182
182
|
|
@@ -200,14 +200,14 @@ module GirFFI
|
|
200
200
|
|
201
201
|
def caller_allocated_object?
|
202
202
|
[:struct, :array].include?(specialized_type_tag) &&
|
203
|
-
|
203
|
+
arginfo.caller_allocates?
|
204
204
|
end
|
205
205
|
|
206
|
-
DESTROY_NOTIFIER =
|
206
|
+
DESTROY_NOTIFIER = "GLib::DestroyNotify.default"
|
207
207
|
|
208
208
|
def ingoing_convertor
|
209
209
|
if skipped_in?
|
210
|
-
NullConvertor.new(
|
210
|
+
NullConvertor.new("0")
|
211
211
|
elsif destroy_notifier?
|
212
212
|
NullConvertor.new(DESTROY_NOTIFIER)
|
213
213
|
elsif user_data?
|
@@ -233,7 +233,7 @@ module GirFFI
|
|
233
233
|
end
|
234
234
|
|
235
235
|
def callback_argument_name
|
236
|
-
|
236
|
+
related_callback_builder.call_argument_name
|
237
237
|
end
|
238
238
|
end
|
239
239
|
end
|
@@ -121,8 +121,8 @@ module GirFFI
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def sorted_base_argument_builders
|
124
|
-
@sorted_base_argument_builders ||= @base_argument_builders
|
125
|
-
sort_by.with_index { |arg, i| [arg.array_length_idx, i] }
|
124
|
+
@sorted_base_argument_builders ||= @base_argument_builders
|
125
|
+
.sort_by.with_index { |arg, i| [arg.array_length_idx, i] }
|
126
126
|
end
|
127
127
|
|
128
128
|
def split_off_block_argument
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
3
|
+
require "gir_ffi/builders/argument_builder"
|
4
|
+
require "gir_ffi/builders/argument_builder_collection"
|
5
|
+
require "gir_ffi/builders/method_template"
|
6
|
+
require "gir_ffi/builders/null_argument_builder"
|
7
|
+
require "gir_ffi/error_argument_info"
|
8
|
+
require "gir_ffi/return_value_info"
|
9
|
+
require "gir_ffi/variable_name_generator"
|
10
10
|
|
11
11
|
module GirFFI
|
12
12
|
module Builders
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gir_ffi/builder_helper"
|
4
4
|
|
5
5
|
module GirFFI
|
6
6
|
# Base class for type builders.
|
@@ -35,7 +35,7 @@ module GirFFI
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def setup_constants
|
38
|
-
klass
|
38
|
+
optionally_define_constant(klass, :GIR_INFO) { info }
|
39
39
|
klass.const_set :GIR_FFI_BUILDER, self
|
40
40
|
end
|
41
41
|
|
@@ -35,19 +35,19 @@ module GirFFI
|
|
35
35
|
when :struct, :union
|
36
36
|
case @ownership_transfer
|
37
37
|
when :everything
|
38
|
-
|
38
|
+
"wrap_own"
|
39
39
|
when :nothing
|
40
|
-
|
40
|
+
"wrap_copy"
|
41
41
|
else
|
42
|
-
|
42
|
+
"wrap"
|
43
43
|
end
|
44
44
|
else
|
45
|
-
|
45
|
+
"wrap"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
def conversion_argument_list
|
50
|
-
conversion_arguments.join(
|
50
|
+
conversion_arguments.join(", ")
|
51
51
|
end
|
52
52
|
|
53
53
|
def conversion_arguments
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "gir_ffi/builders/base_argument_builder"
|
4
|
+
require "gir_ffi/builders/c_to_ruby_convertor"
|
5
|
+
require "gir_ffi/builders/closure_convertor"
|
6
|
+
require "gir_ffi/builders/null_convertor"
|
7
|
+
require "gir_ffi/builders/pointer_value_convertor"
|
8
8
|
|
9
9
|
module GirFFI
|
10
10
|
module Builders
|
@@ -19,6 +19,8 @@ module GirFFI
|
|
19
19
|
false
|
20
20
|
end
|
21
21
|
|
22
|
+
# All arguments to the argument mapper must always be provided. They may
|
23
|
+
# be nil, though.
|
22
24
|
def allow_none?
|
23
25
|
false
|
24
26
|
end
|
@@ -53,7 +55,7 @@ module GirFFI
|
|
53
55
|
when :inout
|
54
56
|
[out_parameter_preparation, ingoing_pre_conversion]
|
55
57
|
when :error
|
56
|
-
[out_parameter_preparation,
|
58
|
+
[out_parameter_preparation, "begin"]
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -65,7 +67,7 @@ module GirFFI
|
|
65
67
|
[
|
66
68
|
"rescue => #{result_name}",
|
67
69
|
value_to_pointer_conversion,
|
68
|
-
|
70
|
+
"end"
|
69
71
|
]
|
70
72
|
else
|
71
73
|
[]
|
@@ -166,7 +168,7 @@ module GirFFI
|
|
166
168
|
end
|
167
169
|
|
168
170
|
def length_argument_name
|
169
|
-
length_arg
|
171
|
+
length_arg&.pre_converted_name
|
170
172
|
end
|
171
173
|
end
|
172
174
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "gir_ffi/builders/base_type_builder"
|
4
|
+
require "gir_ffi/builders/mapping_method_builder"
|
5
|
+
require "gir_ffi/callback_base"
|
6
6
|
|
7
7
|
module GirFFI
|
8
8
|
module Builders
|
@@ -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
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "gir_ffi/builders/base_return_value_builder"
|
4
|
+
require "gir_ffi/builders/ruby_to_c_convertor"
|
5
5
|
|
6
6
|
module GirFFI
|
7
7
|
module Builders
|
@@ -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}"]
|