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.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
3
+ require "ffi"
4
4
 
5
5
  module GirFFI
6
6
  # Class representing a boolean (natively, an int).
@@ -1,14 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/class_base'
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 < StructBase
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?
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
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'
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 ||= case GObject.type_fundamental gtype
23
- when GObject::TYPE_BOXED
24
- UnintrospectableBoxedInfo.new gtype
25
- when GObject::TYPE_OBJECT
26
- UnintrospectableTypeInfo.new gtype
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: version).generate
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) { Class.new parent }
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 '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'
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: @arginfo.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
- !@arginfo.caller_allocates? && type_info.pointer?
141
+ !arginfo.caller_allocates? && type_info.pointer?
142
142
  end
143
143
 
144
144
  def length_argument_name
145
- length_arg && length_arg.post_converted_name
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
- @arginfo.skip?
158
+ arginfo.skip?
159
159
  end
160
160
 
161
161
  def skipped_out?
162
- @arginfo.skip? ||
163
- @array_arg && @array_arg.specialized_type_tag == :strv
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 = @array_arg.name
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
- @arginfo.caller_allocates?
203
+ arginfo.caller_allocates?
204
204
  end
205
205
 
206
- DESTROY_NOTIFIER = 'GLib::DestroyNotify.default'.freeze
206
+ DESTROY_NOTIFIER = "GLib::DestroyNotify.default"
207
207
 
208
208
  def ingoing_convertor
209
209
  if skipped_in?
210
- NullConvertor.new('0')
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
- @related_callback_builder.call_argument_name
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
@@ -14,7 +14,8 @@ module GirFFI
14
14
  until when while yield
15
15
  ).freeze
16
16
 
17
- attr_reader :arginfo
17
+ attr_reader :arginfo, :related_callback_builder
18
+
18
19
  attr_accessor :length_arg, :array_arg
19
20
 
20
21
  def initialize(var_gen, arginfo)
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
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'
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: 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 'gir_ffi/builders/base_argument_builder'
3
+ require "gir_ffi/builders/base_argument_builder"
4
4
 
5
5
  module GirFFI
6
6
  module Builders
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builder_helper'
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.const_set :GIR_INFO, info
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
- 'wrap_own'
38
+ "wrap_own"
39
39
  when :nothing
40
- 'wrap_copy'
40
+ "wrap_copy"
41
41
  else
42
- 'wrap'
42
+ "wrap"
43
43
  end
44
44
  else
45
- 'wrap'
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 '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'
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, 'begin']
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
- 'end'
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 && length_arg.pre_converted_name
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 'gir_ffi/builders/base_type_builder'
4
- require 'gir_ffi/builders/mapping_method_builder'
5
- require 'gir_ffi/callback_base'
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 namespace_module, @classname, CallbackBase
40
+ @klass ||= get_or_define_class container_module, @classname, CallbackBase
27
41
  end
28
42
 
29
- def mapping_method_definition
30
- MappingMethodBuilder.for_callback(info).method_definition
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 'gir_ffi/builders/base_return_value_builder'
4
- require 'gir_ffi/builders/ruby_to_c_convertor'
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
- if has_post_conversion?
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 specialized_type_tag == :object
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}"]