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.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +6 -0
  3. data/Gemfile +3 -1
  4. data/README.md +5 -2
  5. data/lib/ffi-glib.rb +1 -0
  6. data/lib/ffi-glib/array.rb +6 -6
  7. data/lib/ffi-glib/array_methods.rb +1 -1
  8. data/lib/ffi-glib/byte_array.rb +1 -1
  9. data/lib/ffi-glib/bytes.rb +3 -3
  10. data/lib/ffi-glib/container_class_methods.rb +2 -2
  11. data/lib/ffi-glib/error.rb +2 -2
  12. data/lib/ffi-glib/hash_table.rb +9 -9
  13. data/lib/ffi-glib/iconv.rb +1 -1
  14. data/lib/ffi-glib/list.rb +2 -2
  15. data/lib/ffi-glib/list_methods.rb +8 -7
  16. data/lib/ffi-glib/main_loop.rb +1 -1
  17. data/lib/ffi-glib/ptr_array.rb +7 -7
  18. data/lib/ffi-glib/s_list.rb +2 -2
  19. data/lib/ffi-glib/strv.rb +3 -3
  20. data/lib/ffi-glib/variant.rb +9 -2
  21. data/lib/ffi-gobject.rb +10 -10
  22. data/lib/ffi-gobject/closure.rb +1 -1
  23. data/lib/ffi-gobject/initially_unowned.rb +4 -3
  24. data/lib/ffi-gobject/object.rb +19 -19
  25. data/lib/ffi-gobject/object_class.rb +2 -2
  26. data/lib/ffi-gobject/ruby_closure.rb +5 -4
  27. data/lib/ffi-gobject/value.rb +15 -20
  28. data/lib/ffi-gobject_introspection/g_error.rb +1 -1
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +6 -6
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_enum_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +8 -8
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +9 -9
  34. data/lib/ffi-gobject_introspection/i_repository.rb +13 -13
  35. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -2
  36. data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
  37. data/lib/ffi-gobject_introspection/i_union_info.rb +3 -3
  38. data/lib/ffi-gobject_introspection/lib.rb +4 -4
  39. data/lib/gir_ffi-base/glib/boolean.rb +4 -4
  40. data/lib/gir_ffi-base/glib/strv.rb +2 -2
  41. data/lib/gir_ffi/allocation_helper.rb +1 -1
  42. data/lib/gir_ffi/arg_helper.rb +8 -8
  43. data/lib/gir_ffi/boxed_base.rb +5 -9
  44. data/lib/gir_ffi/builder.rb +4 -4
  45. data/lib/gir_ffi/builder_helper.rb +3 -3
  46. data/lib/gir_ffi/builders/argument_builder_collection.rb +1 -1
  47. data/lib/gir_ffi/builders/base_argument_builder.rb +3 -3
  48. data/lib/gir_ffi/builders/base_method_builder.rb +71 -0
  49. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  50. data/lib/gir_ffi/builders/boxed_builder.rb +3 -2
  51. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +1 -1
  52. data/lib/gir_ffi/builders/closure_convertor.rb +1 -1
  53. data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
  54. data/lib/gir_ffi/builders/constructor_builder.rb +52 -0
  55. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  56. data/lib/gir_ffi/builders/field_builder.rb +3 -2
  57. data/lib/gir_ffi/builders/function_builder.rb +9 -50
  58. data/lib/gir_ffi/builders/initializer_builder.rb +32 -0
  59. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +16 -0
  60. data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
  61. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -3
  62. data/lib/gir_ffi/builders/method_template.rb +1 -1
  63. data/lib/gir_ffi/builders/module_builder.rb +8 -7
  64. data/lib/gir_ffi/builders/null_convertor.rb +1 -1
  65. data/lib/gir_ffi/builders/null_return_value_builder.rb +21 -0
  66. data/lib/gir_ffi/builders/object_builder.rb +3 -3
  67. data/lib/gir_ffi/builders/property_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/registered_type_builder.rb +31 -15
  69. data/lib/gir_ffi/builders/return_value_builder.rb +1 -14
  70. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -2
  71. data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
  72. data/lib/gir_ffi/builders/type_builder.rb +2 -2
  73. data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
  74. data/lib/gir_ffi/builders/user_defined_builder.rb +11 -11
  75. data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
  76. data/lib/gir_ffi/callback_base.rb +8 -13
  77. data/lib/gir_ffi/class_base.rb +41 -45
  78. data/lib/gir_ffi/core.rb +2 -2
  79. data/lib/gir_ffi/enum_base.rb +9 -14
  80. data/lib/gir_ffi/field_argument_info.rb +1 -1
  81. data/lib/gir_ffi/g_type.rb +1 -1
  82. data/lib/gir_ffi/glib_error.rb +1 -1
  83. data/lib/gir_ffi/in_out_pointer.rb +4 -4
  84. data/lib/gir_ffi/in_pointer.rb +12 -12
  85. data/lib/gir_ffi/info_ext/i_arg_info.rb +0 -10
  86. data/lib/gir_ffi/info_ext/i_callback_info.rb +0 -5
  87. data/lib/gir_ffi/info_ext/i_property_info.rb +1 -1
  88. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -6
  89. data/lib/gir_ffi/info_ext/i_signal_info.rb +2 -2
  90. data/lib/gir_ffi/info_ext/i_type_info.rb +2 -17
  91. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +0 -5
  92. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  93. data/lib/gir_ffi/interface_base.rb +2 -7
  94. data/lib/gir_ffi/method_stubber.rb +1 -1
  95. data/lib/gir_ffi/module_base.rb +4 -7
  96. data/lib/gir_ffi/object_base.rb +4 -9
  97. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  98. data/lib/gir_ffi/receiver_type_info.rb +1 -1
  99. data/lib/gir_ffi/registered_type_base.rb +0 -5
  100. data/lib/gir_ffi/return_value_info.rb +1 -1
  101. data/lib/gir_ffi/sized_array.rb +10 -10
  102. data/lib/gir_ffi/type_map.rb +3 -3
  103. data/lib/gir_ffi/unintrospectable_type_info.rb +3 -1
  104. data/lib/gir_ffi/user_data_argument_info.rb +1 -1
  105. data/lib/gir_ffi/user_defined_property_info.rb +1 -1
  106. data/lib/gir_ffi/user_defined_type_info.rb +4 -4
  107. data/lib/gir_ffi/version.rb +1 -1
  108. data/lib/gir_ffi/vfunc_implementation.rb +1 -1
  109. data/lib/gir_ffi/zero_terminated.rb +6 -6
  110. data/test/base_test_helper.rb +13 -13
  111. data/test/ffi-gobject/object_test.rb +22 -1
  112. data/test/ffi-gobject/value_test.rb +24 -24
  113. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +4 -4
  114. data/test/ffi-gobject_introspection/i_type_info_test.rb +2 -2
  115. data/test/ffi-gobject_test.rb +2 -2
  116. data/test/gir_ffi/builders/argument_builder_test.rb +60 -60
  117. data/test/gir_ffi/builders/callback_argument_builder_test.rb +8 -8
  118. data/test/gir_ffi/builders/callback_builder_test.rb +4 -4
  119. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +8 -8
  120. data/test/gir_ffi/builders/constructor_builder_test.rb +34 -0
  121. data/test/gir_ffi/builders/function_builder_test.rb +8 -24
  122. data/test/gir_ffi/builders/initializer_builder_test.rb +36 -0
  123. data/test/gir_ffi/builders/interface_builder_test.rb +2 -2
  124. data/test/gir_ffi/builders/object_builder_test.rb +6 -18
  125. data/test/gir_ffi/builders/property_builder_test.rb +2 -2
  126. data/test/gir_ffi/builders/return_value_builder_test.rb +54 -79
  127. data/test/gir_ffi/builders/signal_closure_builder_test.rb +14 -14
  128. data/test/gir_ffi/builders/user_defined_builder_test.rb +8 -8
  129. data/test/gir_ffi/builders/vfunc_builder_test.rb +22 -22
  130. data/test/gir_ffi/class_base_test.rb +9 -7
  131. data/test/gir_ffi/in_pointer_test.rb +1 -1
  132. data/test/gir_ffi/info_ext/i_callable_info_test.rb +2 -2
  133. data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
  134. data/test/gir_ffi/info_ext/i_field_info_test.rb +2 -2
  135. data/test/gir_ffi/info_ext/i_function_info_test.rb +2 -2
  136. data/test/gir_ffi/info_ext/i_signal_info_test.rb +2 -2
  137. data/test/gir_ffi/info_ext/i_type_info_test.rb +18 -18
  138. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
  139. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
  140. data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
  141. data/test/gir_ffi/method_stubber_test.rb +6 -6
  142. data/test/gir_ffi/user_defined_type_info_test.rb +3 -3
  143. data/test/gir_ffi_test_helper.rb +12 -12
  144. data/test/integration/derived_classes_test.rb +7 -3
  145. data/test/integration/generated_gimarshallingtests_test.rb +10 -10
  146. data/test/integration/generated_regress_test.rb +11 -20
  147. data/test/introspection_test_helper.rb +1 -1
  148. data/test/minitest/stats_plugin.rb +3 -3
  149. metadata +9 -3
  150. data/lib/gir_ffi/builders/constructor_result_convertor.rb +0 -14
@@ -63,15 +63,15 @@ module GObjectIntrospection
63
63
  instance
64
64
  end
65
65
 
66
- def self.prepend_search_path path
66
+ def self.prepend_search_path(path)
67
67
  Lib.g_irepository_prepend_search_path path
68
68
  end
69
69
 
70
- def self.type_tag_to_string type
70
+ def self.type_tag_to_string(type)
71
71
  Lib.g_type_tag_to_string type
72
72
  end
73
73
 
74
- def require namespace, version = nil, flags = 0
74
+ def require(namespace, version = nil, flags = 0)
75
75
  errpp = FFI::MemoryPointer.new(:pointer).write_pointer nil
76
76
 
77
77
  Lib.g_irepository_require @gobj, namespace, version, flags, errpp
@@ -80,45 +80,45 @@ module GObjectIntrospection
80
80
  raise GError.new(errp).message unless errp.null?
81
81
  end
82
82
 
83
- def n_infos namespace
83
+ def n_infos(namespace)
84
84
  Lib.g_irepository_get_n_infos @gobj, namespace
85
85
  end
86
86
 
87
- def info namespace, index
87
+ def info(namespace, index)
88
88
  wrap_info Lib.g_irepository_get_info(@gobj, namespace, index)
89
89
  end
90
90
 
91
91
  # Utility method
92
- def infos namespace
92
+ def infos(namespace)
93
93
  (0..(n_infos(namespace) - 1)).map do |idx|
94
94
  info namespace, idx
95
95
  end
96
96
  end
97
97
 
98
- def find_by_name namespace, name
98
+ def find_by_name(namespace, name)
99
99
  wrap_info Lib.g_irepository_find_by_name(@gobj, namespace, name)
100
100
  end
101
101
 
102
- def find_by_gtype gtype
102
+ def find_by_gtype(gtype)
103
103
  raise ArgumentError, "Type #{gtype} is not a valid type" if gtype == 0
104
104
  wrap_info Lib.g_irepository_find_by_gtype(@gobj, gtype)
105
105
  end
106
106
 
107
- def dependencies namespace
107
+ def dependencies(namespace)
108
108
  strv_p = Lib.g_irepository_get_dependencies(@gobj, namespace)
109
109
  strv = GLib::Strv.new strv_p
110
110
  strv.to_a
111
111
  end
112
112
 
113
- def shared_library namespace
113
+ def shared_library(namespace)
114
114
  Lib.g_irepository_get_shared_library @gobj, namespace
115
115
  end
116
116
 
117
- def version namespace
117
+ def version(namespace)
118
118
  Lib.g_irepository_get_version @gobj, namespace
119
119
  end
120
120
 
121
- def self.wrap_ibaseinfo_pointer ptr
121
+ def self.wrap_ibaseinfo_pointer(ptr)
122
122
  return nil if ptr.null?
123
123
  type = Lib.g_base_info_get_type ptr
124
124
  klass = TYPEMAP[type]
@@ -127,7 +127,7 @@ module GObjectIntrospection
127
127
 
128
128
  private
129
129
 
130
- def wrap_info ptr
130
+ def wrap_info(ptr)
131
131
  self.class.wrap_ibaseinfo_pointer ptr
132
132
  end
133
133
  end
@@ -6,7 +6,7 @@ module GObjectIntrospection
6
6
  Lib.g_struct_info_get_n_fields @gobj
7
7
  end
8
8
 
9
- def field index
9
+ def field(index)
10
10
  IFieldInfo.wrap(Lib.g_struct_info_get_field @gobj, index)
11
11
  end
12
12
 
@@ -18,7 +18,7 @@ module GObjectIntrospection
18
18
  Lib.g_struct_info_get_n_methods @gobj
19
19
  end
20
20
 
21
- def get_method index
21
+ def get_method(index)
22
22
  IFunctionInfo.wrap(Lib.g_struct_info_get_method @gobj, index)
23
23
  end
24
24
 
@@ -10,7 +10,7 @@ module GObjectIntrospection
10
10
  Lib.g_type_info_get_tag @gobj
11
11
  end
12
12
 
13
- def param_type index
13
+ def param_type(index)
14
14
  ITypeInfo.wrap(Lib.g_type_info_get_param_type @gobj, index)
15
15
  end
16
16
 
@@ -6,7 +6,7 @@ module GObjectIntrospection
6
6
  Lib.g_union_info_get_n_fields @gobj
7
7
  end
8
8
 
9
- def field index
9
+ def field(index)
10
10
  IFieldInfo.wrap(Lib.g_union_info_get_field @gobj, index)
11
11
  end
12
12
 
@@ -17,14 +17,14 @@ module GObjectIntrospection
17
17
  Lib.g_union_info_get_n_methods @gobj
18
18
  end
19
19
 
20
- def get_method index
20
+ def get_method(index)
21
21
  IFunctionInfo.wrap(Lib.g_union_info_get_method @gobj, index)
22
22
  end
23
23
 
24
24
  ##
25
25
  build_array_method :get_methods
26
26
 
27
- def find_method name
27
+ def find_method(name)
28
28
  IFunctionInfo.wrap(Lib.g_union_info_find_method @gobj, name)
29
29
  end
30
30
 
@@ -10,11 +10,11 @@ module GObjectIntrospection
10
10
  # Provide several guesses to #provide_guess, and the result in #best_guess
11
11
  # will be the best (i.e., lowest) guess.
12
12
  class VersionGuesser
13
- def initialize base
13
+ def initialize(base)
14
14
  @guess = base
15
15
  end
16
16
 
17
- def provide_guess guessed
17
+ def provide_guess(guessed)
18
18
  @guess = guessed if guessed < @guess
19
19
  end
20
20
 
@@ -131,14 +131,14 @@ module GObjectIntrospection
131
131
  # gobject-introspection version 0.9.0 and 0.9.1. Therefore, we need to
132
132
  # retrieve the correct values before declaring the ITypeTag enum.
133
133
  attach_function :tmp_type_tag_to_string, :g_type_tag_to_string, [:int], :string
134
- type_tag_map = (0..31).map { |id|
134
+ type_tag_map = (0..31).map do |id|
135
135
  sym = tmp_type_tag_to_string(id).to_sym
136
136
  if sym == :unknown
137
137
  nil
138
138
  else
139
139
  [sym, id]
140
140
  end
141
- }.compact.flatten
141
+ end.compact.flatten
142
142
  enum :ITypeTag, type_tag_map
143
143
 
144
144
  # Now, attach g_type_tag_to_string again under its own name with an
@@ -6,11 +6,11 @@ module GLib
6
6
  extend FFI::DataConverter
7
7
  native_type FFI::Type::INT
8
8
 
9
- def self.from_native value, _context
9
+ def self.from_native(value, _context)
10
10
  value != 0 ? true : false
11
11
  end
12
12
 
13
- def self.to_native value, _context
13
+ def self.to_native(value, _context)
14
14
  value ? 1 : 0
15
15
  end
16
16
 
@@ -18,11 +18,11 @@ module GLib
18
18
  FFI.type_size FFI::Type::INT
19
19
  end
20
20
 
21
- def self.copy_value_to_pointer value, pointer
21
+ def self.copy_value_to_pointer(value, pointer)
22
22
  pointer.put_int 0, to_native(value, nil)
23
23
  end
24
24
 
25
- def self.get_value_from_pointer pointer
25
+ def self.get_value_from_pointer(pointer)
26
26
  from_native pointer.get_int(0), nil
27
27
  end
28
28
  end
@@ -8,7 +8,7 @@ module GLib
8
8
 
9
9
  POINTER_SIZE = FFI.type_size(:pointer)
10
10
 
11
- def initialize ptr
11
+ def initialize(ptr)
12
12
  @ptr = ptr
13
13
  end
14
14
 
@@ -24,7 +24,7 @@ module GLib
24
24
  end
25
25
  end
26
26
 
27
- def self.wrap ptr
27
+ def self.wrap(ptr)
28
28
  new ptr
29
29
  end
30
30
 
@@ -4,7 +4,7 @@ module GirFFI
4
4
  # Helper module providing a safe allocation method that raises an exception
5
5
  # if memory cannot be allocated.
6
6
  module AllocationHelper
7
- def self.safe_malloc size
7
+ def self.safe_malloc(size)
8
8
  ptr = LibC.malloc size
9
9
  raise NoMemoryError if ptr.null?
10
10
  ptr
@@ -13,11 +13,11 @@ module GirFFI
13
13
  @store = {}
14
14
  end
15
15
 
16
- def store ptr, obj
16
+ def store(ptr, obj)
17
17
  @store[ptr.address] = obj
18
18
  end
19
19
 
20
- def fetch ptr
20
+ def fetch(ptr)
21
21
  return if ptr.null?
22
22
  key = ptr.address
23
23
  if @store.key? key
@@ -30,22 +30,22 @@ module GirFFI
30
30
 
31
31
  OBJECT_STORE = ObjectStore.new
32
32
 
33
- def self.ptr_to_utf8_length ptr, len
33
+ def self.ptr_to_utf8_length(ptr, len)
34
34
  ptr.null? ? nil : ptr.read_string(len)
35
35
  end
36
36
 
37
- def self.check_error errpp
37
+ def self.check_error(errpp)
38
38
  err = GLib::Error.wrap(errpp.read_pointer)
39
39
  raise GLibError, err if err
40
40
  end
41
41
 
42
- def self.check_fixed_array_size size, arr, name
42
+ def self.check_fixed_array_size(size, arr, name)
43
43
  unless arr.size == size
44
44
  raise ArgumentError, "#{name} should have size #{size}"
45
45
  end
46
46
  end
47
47
 
48
- def self.cast_from_pointer type, it
48
+ def self.cast_from_pointer(type, it)
49
49
  case type
50
50
  when :utf8, :filename
51
51
  it.to_utf8
@@ -72,7 +72,7 @@ module GirFFI
72
72
  end
73
73
  end
74
74
 
75
- def self.cast_uint32_to_int32 val
75
+ def self.cast_uint32_to_int32(val)
76
76
  if val >= 0x80000000
77
77
  -(0x100000000 - val)
78
78
  else
@@ -80,7 +80,7 @@ module GirFFI
80
80
  end
81
81
  end
82
82
 
83
- def self.cast_pointer_to_int32 ptr
83
+ def self.cast_pointer_to_int32(ptr)
84
84
  cast_uint32_to_int32(ptr.address & 0xffffffff)
85
85
  end
86
86
  end
@@ -9,30 +9,26 @@ module GirFFI
9
9
  FFI::Type::Struct.new(self::Struct)
10
10
  end
11
11
 
12
- # @deprecated Use #to_ffi_type instead. Will be removed in 0.8.0.
13
- def self.to_ffitype
14
- to_ffi_type
15
- end
16
-
17
12
  def self.to_ffi_type
18
13
  self
19
14
  end
20
15
 
21
- def self.to_native value, _context
16
+ def self.to_native(value, _context)
22
17
  value.struct
23
18
  end
24
19
 
25
- def self.get_value_from_pointer pointer
20
+ def self.get_value_from_pointer(pointer)
26
21
  pointer.to_ptr
27
22
  end
28
23
 
29
- def self.copy_value_to_pointer value, pointer, offset = 0
24
+ def self.copy_value_to_pointer(value, pointer, offset = 0)
30
25
  size = self::Struct.size
31
26
  pointer.put_bytes offset, value.to_ptr.read_bytes(size), 0, size
32
27
  end
33
28
 
29
+ # TODO: Make this behave more like a real .new method
34
30
  def self._allocate
35
- obj = _real_new
31
+ obj = allocate
36
32
  obj.instance_variable_set :@struct, self::Struct.new
37
33
  obj
38
34
  end
@@ -10,23 +10,23 @@ module GirFFI
10
10
  module Builder
11
11
  extend BuilderHelper
12
12
 
13
- def self.build_class info
13
+ def self.build_class(info)
14
14
  Builders::TypeBuilder.build(info)
15
15
  end
16
16
 
17
- def self.build_by_gtype gtype
17
+ def self.build_by_gtype(gtype)
18
18
  info = GObjectIntrospection::IRepository.default.find_by_gtype gtype
19
19
  info ||= UnintrospectableTypeInfo.new gtype
20
20
 
21
21
  build_class info
22
22
  end
23
23
 
24
- def self.build_module namespace, version = nil
24
+ def self.build_module(namespace, version = nil)
25
25
  Builders::ModuleBuilder.new(namespace, version).generate
26
26
  end
27
27
 
28
28
  # TODO: Move elsewhere, perhaps to FunctionBuilder.
29
- def self.attach_ffi_function lib, info
29
+ def self.attach_ffi_function(lib, info)
30
30
  sym = info.symbol
31
31
  return if lib.method_defined? sym
32
32
 
@@ -1,7 +1,7 @@
1
1
  module GirFFI
2
2
  # Set of helper methods used in the builders.
3
3
  module BuilderHelper
4
- def optionally_define_constant parent, name
4
+ def optionally_define_constant(parent, name)
5
5
  if parent.const_defined? name, false
6
6
  parent.const_get name
7
7
  else
@@ -9,11 +9,11 @@ module GirFFI
9
9
  end
10
10
  end
11
11
 
12
- def get_or_define_class namespace, name, parent
12
+ def get_or_define_class(namespace, name, parent)
13
13
  optionally_define_constant(namespace, name) { Class.new parent }
14
14
  end
15
15
 
16
- def get_or_define_module parent, name
16
+ def get_or_define_module(parent, name)
17
17
  optionally_define_constant(parent, name) { Module.new }
18
18
  end
19
19
  end
@@ -6,7 +6,7 @@ module GirFFI
6
6
  class ArgumentBuilderCollection
7
7
  attr_reader :return_value_builder
8
8
 
9
- def initialize return_value_builder, argument_builders, options = {}
9
+ def initialize(return_value_builder, argument_builders, options = {})
10
10
  @receiver_builder = options[:receiver_builder]
11
11
  @error_argument_builder = options[:error_argument_builder]
12
12
  @base_argument_builders = argument_builders
@@ -22,11 +22,11 @@ module GirFFI
22
22
  @is_closure
23
23
  end
24
24
 
25
- def closure= arg
25
+ def closure=(arg)
26
26
  @is_closure = arg
27
27
  end
28
28
 
29
- def initialize var_gen, arginfo
29
+ def initialize(var_gen, arginfo)
30
30
  @var_gen = var_gen
31
31
  @arginfo = arginfo
32
32
  @length_arg = nil
@@ -64,7 +64,7 @@ module GirFFI
64
64
  arginfo.ownership_transfer
65
65
  end
66
66
 
67
- def safe name
67
+ def safe(name)
68
68
  if KEYWORDS.include? name
69
69
  "#{name}_"
70
70
  else
@@ -0,0 +1,71 @@
1
+ require 'gir_ffi/builders/argument_builder'
2
+ require 'gir_ffi/builders/argument_builder_collection'
3
+ require 'gir_ffi/builders/error_argument_builder'
4
+ require 'gir_ffi/builders/method_template'
5
+ require 'gir_ffi/error_argument_info'
6
+ require 'gir_ffi/return_value_info'
7
+ require 'gir_ffi/variable_name_generator'
8
+
9
+ module GirFFI
10
+ module Builders
11
+ # Base class for method definition builders.
12
+ class BaseMethodBuilder
13
+ def vargen
14
+ @vargen ||= VariableNameGenerator.new
15
+ end
16
+
17
+ def method_definition
18
+ template.method_definition
19
+ end
20
+
21
+ def template
22
+ @template ||= MethodTemplate.new(self, argument_builder_collection)
23
+ end
24
+
25
+ # Methods used for setting up the builders
26
+
27
+ def argument_builders
28
+ @argument_builders ||= @info.args.map { |arg| ArgumentBuilder.new vargen, arg }
29
+ end
30
+
31
+ def return_value_info
32
+ @return_value_info ||= ReturnValueInfo.new(@info.return_type,
33
+ @info.caller_owns,
34
+ @info.skip_return?)
35
+ end
36
+
37
+ def argument_builder_collection
38
+ @argument_builder_collection ||= ArgumentBuilderCollection.new(
39
+ @return_value_builder, argument_builders,
40
+ error_argument_builder: error_argument)
41
+ end
42
+
43
+ def error_argument
44
+ @error_argument ||=
45
+ if @info.throws?
46
+ ErrorArgumentBuilder.new vargen, ErrorArgumentInfo.new
47
+ end
48
+ end
49
+
50
+ # Methods used by MethodTemplate
51
+
52
+ def invocation
53
+ "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(', ')}"
54
+ end
55
+
56
+ def method_arguments
57
+ argument_builder_collection.method_argument_names
58
+ end
59
+
60
+ def preparation
61
+ []
62
+ end
63
+
64
+ private
65
+
66
+ def lib_name
67
+ "#{@info.safe_namespace}::Lib"
68
+ end
69
+ end
70
+ end
71
+ end