gir_ffi 0.7.10 → 0.8.0
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 +6 -0
- data/Gemfile +3 -1
- data/README.md +5 -2
- data/lib/ffi-glib.rb +1 -0
- data/lib/ffi-glib/array.rb +6 -6
- data/lib/ffi-glib/array_methods.rb +1 -1
- data/lib/ffi-glib/byte_array.rb +1 -1
- data/lib/ffi-glib/bytes.rb +3 -3
- data/lib/ffi-glib/container_class_methods.rb +2 -2
- data/lib/ffi-glib/error.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +9 -9
- data/lib/ffi-glib/iconv.rb +1 -1
- data/lib/ffi-glib/list.rb +2 -2
- data/lib/ffi-glib/list_methods.rb +8 -7
- data/lib/ffi-glib/main_loop.rb +1 -1
- data/lib/ffi-glib/ptr_array.rb +7 -7
- data/lib/ffi-glib/s_list.rb +2 -2
- data/lib/ffi-glib/strv.rb +3 -3
- data/lib/ffi-glib/variant.rb +9 -2
- data/lib/ffi-gobject.rb +10 -10
- data/lib/ffi-gobject/closure.rb +1 -1
- data/lib/ffi-gobject/initially_unowned.rb +4 -3
- data/lib/ffi-gobject/object.rb +19 -19
- data/lib/ffi-gobject/object_class.rb +2 -2
- data/lib/ffi-gobject/ruby_closure.rb +5 -4
- data/lib/ffi-gobject/value.rb +15 -20
- data/lib/ffi-gobject_introspection/g_error.rb +1 -1
- data/lib/ffi-gobject_introspection/i_base_info.rb +6 -6
- data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_enum_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_interface_info.rb +8 -8
- data/lib/ffi-gobject_introspection/i_object_info.rb +9 -9
- data/lib/ffi-gobject_introspection/i_repository.rb +13 -13
- data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -2
- data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_union_info.rb +3 -3
- data/lib/ffi-gobject_introspection/lib.rb +4 -4
- data/lib/gir_ffi-base/glib/boolean.rb +4 -4
- data/lib/gir_ffi-base/glib/strv.rb +2 -2
- data/lib/gir_ffi/allocation_helper.rb +1 -1
- data/lib/gir_ffi/arg_helper.rb +8 -8
- data/lib/gir_ffi/boxed_base.rb +5 -9
- data/lib/gir_ffi/builder.rb +4 -4
- data/lib/gir_ffi/builder_helper.rb +3 -3
- data/lib/gir_ffi/builders/argument_builder_collection.rb +1 -1
- data/lib/gir_ffi/builders/base_argument_builder.rb +3 -3
- data/lib/gir_ffi/builders/base_method_builder.rb +71 -0
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/boxed_builder.rb +3 -2
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +1 -1
- data/lib/gir_ffi/builders/closure_convertor.rb +1 -1
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
- data/lib/gir_ffi/builders/constructor_builder.rb +52 -0
- data/lib/gir_ffi/builders/enum_builder.rb +3 -3
- data/lib/gir_ffi/builders/field_builder.rb +3 -2
- data/lib/gir_ffi/builders/function_builder.rb +9 -50
- data/lib/gir_ffi/builders/initializer_builder.rb +32 -0
- data/lib/gir_ffi/builders/initializer_return_value_builder.rb +16 -0
- data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -3
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/module_builder.rb +8 -7
- data/lib/gir_ffi/builders/null_convertor.rb +1 -1
- data/lib/gir_ffi/builders/null_return_value_builder.rb +21 -0
- data/lib/gir_ffi/builders/object_builder.rb +3 -3
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/registered_type_builder.rb +31 -15
- data/lib/gir_ffi/builders/return_value_builder.rb +1 -14
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
- data/lib/gir_ffi/builders/type_builder.rb +2 -2
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
- data/lib/gir_ffi/builders/user_defined_builder.rb +11 -11
- data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +8 -13
- data/lib/gir_ffi/class_base.rb +41 -45
- data/lib/gir_ffi/core.rb +2 -2
- data/lib/gir_ffi/enum_base.rb +9 -14
- data/lib/gir_ffi/field_argument_info.rb +1 -1
- data/lib/gir_ffi/g_type.rb +1 -1
- data/lib/gir_ffi/glib_error.rb +1 -1
- data/lib/gir_ffi/in_out_pointer.rb +4 -4
- data/lib/gir_ffi/in_pointer.rb +12 -12
- data/lib/gir_ffi/info_ext/i_arg_info.rb +0 -10
- data/lib/gir_ffi/info_ext/i_callback_info.rb +0 -5
- data/lib/gir_ffi/info_ext/i_property_info.rb +1 -1
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -6
- data/lib/gir_ffi/info_ext/i_signal_info.rb +2 -2
- data/lib/gir_ffi/info_ext/i_type_info.rb +2 -17
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +0 -5
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
- data/lib/gir_ffi/interface_base.rb +2 -7
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/module_base.rb +4 -7
- data/lib/gir_ffi/object_base.rb +4 -9
- data/lib/gir_ffi/receiver_argument_info.rb +1 -1
- data/lib/gir_ffi/receiver_type_info.rb +1 -1
- data/lib/gir_ffi/registered_type_base.rb +0 -5
- data/lib/gir_ffi/return_value_info.rb +1 -1
- data/lib/gir_ffi/sized_array.rb +10 -10
- data/lib/gir_ffi/type_map.rb +3 -3
- data/lib/gir_ffi/unintrospectable_type_info.rb +3 -1
- data/lib/gir_ffi/user_data_argument_info.rb +1 -1
- data/lib/gir_ffi/user_defined_property_info.rb +1 -1
- data/lib/gir_ffi/user_defined_type_info.rb +4 -4
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +6 -6
- data/test/base_test_helper.rb +13 -13
- data/test/ffi-gobject/object_test.rb +22 -1
- data/test/ffi-gobject/value_test.rb +24 -24
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +4 -4
- data/test/ffi-gobject_introspection/i_type_info_test.rb +2 -2
- data/test/ffi-gobject_test.rb +2 -2
- data/test/gir_ffi/builders/argument_builder_test.rb +60 -60
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +8 -8
- data/test/gir_ffi/builders/callback_builder_test.rb +4 -4
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +8 -8
- data/test/gir_ffi/builders/constructor_builder_test.rb +34 -0
- data/test/gir_ffi/builders/function_builder_test.rb +8 -24
- data/test/gir_ffi/builders/initializer_builder_test.rb +36 -0
- data/test/gir_ffi/builders/interface_builder_test.rb +2 -2
- data/test/gir_ffi/builders/object_builder_test.rb +6 -18
- data/test/gir_ffi/builders/property_builder_test.rb +2 -2
- data/test/gir_ffi/builders/return_value_builder_test.rb +54 -79
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +14 -14
- data/test/gir_ffi/builders/user_defined_builder_test.rb +8 -8
- data/test/gir_ffi/builders/vfunc_builder_test.rb +22 -22
- data/test/gir_ffi/class_base_test.rb +9 -7
- data/test/gir_ffi/in_pointer_test.rb +1 -1
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_field_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_function_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/i_type_info_test.rb +18 -18
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
- data/test/gir_ffi/method_stubber_test.rb +6 -6
- data/test/gir_ffi/user_defined_type_info_test.rb +3 -3
- data/test/gir_ffi_test_helper.rb +12 -12
- data/test/integration/derived_classes_test.rb +7 -3
- data/test/integration/generated_gimarshallingtests_test.rb +10 -10
- data/test/integration/generated_regress_test.rb +11 -20
- data/test/introspection_test_helper.rb +1 -1
- data/test/minitest/stats_plugin.rb +3 -3
- metadata +9 -3
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +0 -14
@@ -20,9 +20,10 @@ module GirFFI
|
|
20
20
|
def provide_constructor
|
21
21
|
return if info.find_method 'new'
|
22
22
|
|
23
|
-
|
23
|
+
# TODO: Provide both new and initialize
|
24
|
+
(class << klass; self; end).class_eval do
|
24
25
|
alias_method :new, :_allocate
|
25
|
-
|
26
|
+
end
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -3,7 +3,7 @@ module GirFFI
|
|
3
3
|
# Builder that generates code to convert values from C to Ruby. Used by
|
4
4
|
# argument builders.
|
5
5
|
class CToRubyConvertor
|
6
|
-
def initialize
|
6
|
+
def initialize(type_info, argument_name, length_arg)
|
7
7
|
@type_info = type_info
|
8
8
|
@argument_name = argument_name
|
9
9
|
@length_arg = length_arg
|
@@ -3,7 +3,7 @@ module GirFFI
|
|
3
3
|
# Builder that generates code to convert closure arguments ('user data')
|
4
4
|
# from Ruby to C. Used by argument builders.
|
5
5
|
class ClosureToPointerConvertor
|
6
|
-
def initialize
|
6
|
+
def initialize(argument_name)
|
7
7
|
@argument_name = argument_name
|
8
8
|
end
|
9
9
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'gir_ffi/builders/argument_builder_collection'
|
2
|
+
require 'gir_ffi/builders/method_template'
|
3
|
+
require 'gir_ffi/builders/null_return_value_builder'
|
4
|
+
|
5
|
+
module GirFFI
|
6
|
+
module Builders
|
7
|
+
# Implements the creation of a Ruby constructor definition out of a
|
8
|
+
# GIR IFunctionInfo.
|
9
|
+
class ConstructorBuilder
|
10
|
+
def initialize(info)
|
11
|
+
@info = info
|
12
|
+
return_value_builder = NullReturnValueBuilder.new
|
13
|
+
arg_builders = ArgumentBuilderCollection.new(return_value_builder, [])
|
14
|
+
@template = MethodTemplate.new(self, arg_builders)
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_definition
|
18
|
+
@template.method_definition
|
19
|
+
end
|
20
|
+
|
21
|
+
def singleton_method?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_name
|
26
|
+
@info.safe_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_arguments
|
30
|
+
['*args']
|
31
|
+
end
|
32
|
+
|
33
|
+
def preparation
|
34
|
+
['obj = allocate']
|
35
|
+
end
|
36
|
+
|
37
|
+
def invocation
|
38
|
+
"obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(', ')}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def result
|
42
|
+
['obj']
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def initializer_name
|
48
|
+
@info.safe_name.sub(/^new/, 'initialize')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -14,10 +14,10 @@ module GirFFI
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def value_spec
|
17
|
-
info.values.map
|
17
|
+
info.values.map do|vinfo|
|
18
18
|
val = GirFFI::ArgHelper.cast_uint32_to_int32(vinfo.value)
|
19
19
|
[vinfo.name.to_sym, val]
|
20
|
-
|
20
|
+
end.flatten
|
21
21
|
end
|
22
22
|
|
23
23
|
def setup_class
|
@@ -47,7 +47,7 @@ module GirFFI
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def already_set_up
|
50
|
-
klass.respond_to? :
|
50
|
+
klass.respond_to? :gtype
|
51
51
|
end
|
52
52
|
|
53
53
|
def superclass
|
@@ -9,7 +9,7 @@ module GirFFI
|
|
9
9
|
class FieldBuilder
|
10
10
|
# Builder for field getters
|
11
11
|
class GetterBuilder
|
12
|
-
def initialize
|
12
|
+
def initialize(field_builder, return_value_builder)
|
13
13
|
@field_builder = field_builder
|
14
14
|
@return_value_builder = return_value_builder
|
15
15
|
end
|
@@ -62,7 +62,7 @@ module GirFFI
|
|
62
62
|
|
63
63
|
attr_reader :info
|
64
64
|
|
65
|
-
def initialize
|
65
|
+
def initialize(field_info)
|
66
66
|
@info = field_info
|
67
67
|
end
|
68
68
|
|
@@ -89,6 +89,7 @@ module GirFFI
|
|
89
89
|
MethodTemplate.new(getter_builder, argument_builders).method_definition
|
90
90
|
end
|
91
91
|
|
92
|
+
# TODO: Use MethodTemplate
|
92
93
|
def setter_def
|
93
94
|
builder = setter_builder
|
94
95
|
|
@@ -1,55 +1,24 @@
|
|
1
|
-
require 'gir_ffi/variable_name_generator'
|
2
|
-
require 'gir_ffi/builders/argument_builder'
|
3
|
-
require 'gir_ffi/return_value_info'
|
4
|
-
require 'gir_ffi/error_argument_info'
|
5
1
|
require 'gir_ffi/builders/return_value_builder'
|
6
|
-
require 'gir_ffi/builders/
|
7
|
-
require 'gir_ffi/builders/method_template'
|
2
|
+
require 'gir_ffi/builders/base_method_builder'
|
8
3
|
|
9
4
|
module GirFFI
|
10
5
|
module Builders
|
11
6
|
# Implements the creation of a Ruby function definition out of a GIR
|
12
7
|
# IFunctionInfo.
|
13
|
-
class FunctionBuilder
|
14
|
-
def initialize
|
8
|
+
class FunctionBuilder < BaseMethodBuilder
|
9
|
+
def initialize(info)
|
15
10
|
@info = info
|
16
|
-
vargen = GirFFI::VariableNameGenerator.new
|
17
|
-
@argument_builders = @info.args.map { |arg| ArgumentBuilder.new vargen, arg }
|
18
|
-
return_value_info = ReturnValueInfo.new(@info.return_type,
|
19
|
-
@info.caller_owns,
|
20
|
-
@info.skip_return?)
|
21
11
|
@return_value_builder = ReturnValueBuilder.new(vargen,
|
22
|
-
return_value_info
|
23
|
-
@info.constructor?)
|
24
|
-
@argument_builder_collection = ArgumentBuilderCollection.new(
|
25
|
-
@return_value_builder, @argument_builders,
|
26
|
-
error_argument_builder: error_argument(vargen))
|
27
|
-
@template = MethodTemplate.new(self, @argument_builder_collection)
|
28
|
-
end
|
29
|
-
|
30
|
-
def generate
|
31
|
-
@template.method_definition
|
12
|
+
return_value_info)
|
32
13
|
end
|
33
14
|
|
34
15
|
def method_name
|
35
16
|
@info.safe_name
|
36
17
|
end
|
37
18
|
|
38
|
-
def method_arguments
|
39
|
-
@argument_builder_collection.method_argument_names
|
40
|
-
end
|
41
|
-
|
42
|
-
def preparation
|
43
|
-
[]
|
44
|
-
end
|
45
|
-
|
46
|
-
def invocation
|
47
|
-
"#{lib_name}.#{@info.symbol} #{function_call_arguments.join(', ')}"
|
48
|
-
end
|
49
|
-
|
50
19
|
def result
|
51
|
-
if
|
52
|
-
["return #{
|
20
|
+
if argument_builder_collection.has_return_values?
|
21
|
+
["return #{argument_builder_collection.return_value_names.join(', ')}"]
|
53
22
|
else
|
54
23
|
[]
|
55
24
|
end
|
@@ -59,24 +28,14 @@ module GirFFI
|
|
59
28
|
!@info.method?
|
60
29
|
end
|
61
30
|
|
62
|
-
private
|
63
|
-
|
64
|
-
def lib_name
|
65
|
-
"#{@info.safe_namespace}::Lib"
|
66
|
-
end
|
67
|
-
|
68
|
-
def error_argument vargen
|
69
|
-
if @info.throws?
|
70
|
-
ErrorArgumentBuilder.new vargen, ErrorArgumentInfo.new if @info.throws?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
31
|
def function_call_arguments
|
75
|
-
ca =
|
32
|
+
ca = argument_builder_collection.call_argument_names
|
76
33
|
ca.unshift receiver_call_argument if @info.method?
|
77
34
|
ca
|
78
35
|
end
|
79
36
|
|
37
|
+
private
|
38
|
+
|
80
39
|
def receiver_call_argument
|
81
40
|
if @info.instance_ownership_transfer == :everything
|
82
41
|
'self.ref'
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'gir_ffi/builders/initializer_return_value_builder'
|
2
|
+
require 'gir_ffi/builders/base_method_builder'
|
3
|
+
|
4
|
+
module GirFFI
|
5
|
+
module Builders
|
6
|
+
# Implements the creation of a Ruby object initializer definition out of a
|
7
|
+
# GIR IFunctionInfo.
|
8
|
+
class InitializerBuilder < BaseMethodBuilder
|
9
|
+
def initialize(info)
|
10
|
+
@info = info
|
11
|
+
@return_value_builder = InitializerReturnValueBuilder.new(vargen,
|
12
|
+
return_value_info)
|
13
|
+
end
|
14
|
+
|
15
|
+
def singleton_method?
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_name
|
20
|
+
@info.safe_name.sub(/^new/, 'initialize')
|
21
|
+
end
|
22
|
+
|
23
|
+
def result
|
24
|
+
[]
|
25
|
+
end
|
26
|
+
|
27
|
+
def function_call_arguments
|
28
|
+
argument_builder_collection.call_argument_names
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'gir_ffi/builders/base_argument_builder'
|
2
|
+
|
3
|
+
module GirFFI
|
4
|
+
module Builders
|
5
|
+
# Implements post-conversion for initializer functions
|
6
|
+
class InitializerReturnValueBuilder < BaseArgumentBuilder
|
7
|
+
def capture_variable_name
|
8
|
+
@capture_variable_name ||= new_variable
|
9
|
+
end
|
10
|
+
|
11
|
+
def post_conversion
|
12
|
+
["store_pointer(#{capture_variable_name})"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -10,16 +10,18 @@ module GirFFI
|
|
10
10
|
# Implements the creation mapping method for a callback or vfunc
|
11
11
|
# handler. This method converts arguments from C to Ruby, and the
|
12
12
|
# result from Ruby to C.
|
13
|
+
#
|
14
|
+
# TODO: Inherit from BaseMethodBuilder
|
13
15
|
class MappingMethodBuilder
|
14
|
-
def self.for_callback
|
15
|
-
new argument_infos, return_value_info, CallbackArgumentBuilder
|
16
|
+
def self.for_callback(argument_infos, return_value_info)
|
17
|
+
new nil, argument_infos, return_value_info, CallbackArgumentBuilder
|
16
18
|
end
|
17
19
|
|
18
|
-
def self.for_vfunc
|
20
|
+
def self.for_vfunc(receiver_info, argument_infos, return_value_info)
|
19
21
|
new receiver_info, argument_infos, return_value_info, VFuncArgumentBuilder
|
20
22
|
end
|
21
23
|
|
22
|
-
def initialize
|
24
|
+
def initialize(receiver_info, argument_infos, return_value_info, builder_class)
|
23
25
|
@argument_builder_class = builder_class
|
24
26
|
receiver_builder = make_argument_builder receiver_info if receiver_info
|
25
27
|
argument_builders = argument_infos.map { |info| make_argument_builder info }
|
@@ -75,7 +77,7 @@ module GirFFI
|
|
75
77
|
@variable_generator ||= VariableNameGenerator.new
|
76
78
|
end
|
77
79
|
|
78
|
-
def make_argument_builder
|
80
|
+
def make_argument_builder(argument_info)
|
79
81
|
@argument_builder_class.new variable_generator, argument_info
|
80
82
|
end
|
81
83
|
end
|
@@ -9,12 +9,14 @@ module GirFFI
|
|
9
9
|
# Implements the creation mapping method for a signal
|
10
10
|
# handler. This method converts arguments from C to Ruby, and the
|
11
11
|
# result from Ruby to C.
|
12
|
+
#
|
13
|
+
# TODO: Inherit from BaseMethodBuilder
|
12
14
|
class MarshallingMethodBuilder
|
13
|
-
def self.for_signal
|
15
|
+
def self.for_signal(receiver_info, argument_infos, return_value_info)
|
14
16
|
new receiver_info, argument_infos, return_value_info
|
15
17
|
end
|
16
18
|
|
17
|
-
def initialize
|
19
|
+
def initialize(receiver_info, argument_infos, return_value_info)
|
18
20
|
receiver_builder = make_argument_builder receiver_info
|
19
21
|
argument_builders = argument_infos.map { |arg| make_argument_builder arg }
|
20
22
|
return_value_builder =
|
@@ -76,7 +78,7 @@ module GirFFI
|
|
76
78
|
@variable_generator ||= VariableNameGenerator.new
|
77
79
|
end
|
78
80
|
|
79
|
-
def make_argument_builder
|
81
|
+
def make_argument_builder(argument_info)
|
80
82
|
ClosureArgumentBuilder.new variable_generator, argument_info
|
81
83
|
end
|
82
84
|
end
|
@@ -10,7 +10,7 @@ module GirFFI
|
|
10
10
|
# The different method builders collaborate with MethodTemplate to build
|
11
11
|
# the desired method.
|
12
12
|
class MethodTemplate
|
13
|
-
def initialize
|
13
|
+
def initialize(builder, argument_builder_collection)
|
14
14
|
@builder = builder
|
15
15
|
@argument_builder_collection = argument_builder_collection
|
16
16
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'gir_ffi/builder_helper'
|
2
2
|
require 'gir_ffi/module_base'
|
3
3
|
require 'gir_ffi/builders/function_builder'
|
4
|
+
|
4
5
|
require 'indentation'
|
5
6
|
|
6
7
|
module GirFFI
|
@@ -10,7 +11,7 @@ module GirFFI
|
|
10
11
|
class ModuleBuilder
|
11
12
|
include BuilderHelper
|
12
13
|
|
13
|
-
def initialize
|
14
|
+
def initialize(namespace, version = nil)
|
14
15
|
@namespace = namespace
|
15
16
|
@version = version
|
16
17
|
# FIXME: Pass safe namespace as an argument
|
@@ -21,17 +22,17 @@ module GirFFI
|
|
21
22
|
modul
|
22
23
|
end
|
23
24
|
|
24
|
-
def setup_method
|
25
|
+
def setup_method(method)
|
25
26
|
go = function_introspection_data method.to_s
|
26
27
|
return false unless go
|
27
28
|
|
28
29
|
Builder.attach_ffi_function lib, go
|
29
|
-
modul.class_eval FunctionBuilder.new(go).
|
30
|
+
modul.class_eval FunctionBuilder.new(go).method_definition
|
30
31
|
|
31
32
|
true
|
32
33
|
end
|
33
34
|
|
34
|
-
def build_namespaced_class
|
35
|
+
def build_namespaced_class(classname)
|
35
36
|
info = gir.find_by_name @namespace, classname.to_s
|
36
37
|
unless info
|
37
38
|
raise NameError,
|
@@ -54,10 +55,10 @@ module GirFFI
|
|
54
55
|
|
55
56
|
def build_dependencies
|
56
57
|
deps = gir.dependencies @namespace
|
57
|
-
deps.each
|
58
|
+
deps.each do|dep|
|
58
59
|
name, version = dep.split '-'
|
59
60
|
Builder.build_module name, version
|
60
|
-
|
61
|
+
end
|
61
62
|
end
|
62
63
|
|
63
64
|
def instantiate_module
|
@@ -93,7 +94,7 @@ module GirFFI
|
|
93
94
|
@lib ||= get_or_define_module modul, :Lib
|
94
95
|
end
|
95
96
|
|
96
|
-
def function_introspection_data
|
97
|
+
def function_introspection_data(function)
|
97
98
|
info = gir.find_by_name @namespace, function.to_s
|
98
99
|
return unless info
|
99
100
|
info.info_type == :function ? info : nil
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module GirFFI
|
2
|
+
module Builders
|
3
|
+
# Implements a blank return value matching ReturnValueBuilder's interface.
|
4
|
+
class NullReturnValueBuilder
|
5
|
+
def initialize
|
6
|
+
end
|
7
|
+
|
8
|
+
def array_length_idx
|
9
|
+
-1
|
10
|
+
end
|
11
|
+
|
12
|
+
def capture_variable_name
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def post_conversion
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|