gir_ffi 0.14.0 → 0.15.3

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 (265) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +45 -0
  3. data/Gemfile +6 -4
  4. data/README.md +11 -10
  5. data/Rakefile +5 -5
  6. data/lib/ffi-glib.rb +16 -16
  7. data/lib/ffi-glib/array.rb +14 -4
  8. data/lib/ffi-glib/byte_array.rb +7 -2
  9. data/lib/ffi-glib/container_class_methods.rb +1 -1
  10. data/lib/ffi-glib/error.rb +1 -1
  11. data/lib/ffi-glib/hash_table.rb +3 -3
  12. data/lib/ffi-glib/list.rb +1 -1
  13. data/lib/ffi-glib/list_methods.rb +1 -1
  14. data/lib/ffi-glib/main_loop.rb +3 -3
  15. data/lib/ffi-glib/ptr_array.rb +30 -8
  16. data/lib/ffi-glib/s_list.rb +1 -1
  17. data/lib/ffi-glib/variant.rb +1 -1
  18. data/lib/ffi-gobject.rb +13 -13
  19. data/lib/ffi-gobject/object.rb +23 -32
  20. data/lib/ffi-gobject/param_spec.rb +1 -1
  21. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  22. data/lib/ffi-gobject/value.rb +40 -29
  23. data/lib/ffi-gobject_introspection.rb +20 -20
  24. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  25. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  26. data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
  27. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  28. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  30. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  34. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  35. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  36. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  37. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  38. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  39. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  40. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  41. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  42. data/lib/gir_ffi-base.rb +1 -1
  43. data/lib/gir_ffi-base/gobject.rb +26 -25
  44. data/lib/gir_ffi-base/gobject/lib.rb +3 -2
  45. data/lib/gir_ffi.rb +3 -3
  46. data/lib/gir_ffi/allocation_helper.rb +1 -1
  47. data/lib/gir_ffi/arg_helper.rb +4 -4
  48. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
  49. data/lib/gir_ffi/boolean.rb +1 -1
  50. data/lib/gir_ffi/boxed_base.rb +1 -1
  51. data/lib/gir_ffi/builder.rb +18 -10
  52. data/lib/gir_ffi/builder_helper.rb +6 -1
  53. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  54. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  55. data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
  56. data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
  57. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  58. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  59. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  60. data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
  61. data/lib/gir_ffi/builders/callback_builder.rb +16 -4
  62. data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
  63. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  64. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  65. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  66. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  67. data/lib/gir_ffi/builders/enum_builder.rb +16 -3
  68. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  69. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  70. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  71. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  72. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  73. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/interface_builder.rb +2 -2
  75. data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
  76. data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
  77. data/lib/gir_ffi/builders/method_template.rb +1 -1
  78. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  79. data/lib/gir_ffi/builders/object_builder.rb +6 -6
  80. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  81. data/lib/gir_ffi/builders/property_builder.rb +13 -12
  82. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  83. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  84. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  85. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  86. data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
  87. data/lib/gir_ffi/builders/struct_builder.rb +6 -4
  88. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  89. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  90. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  91. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  92. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  93. data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
  94. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  95. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  96. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  97. data/lib/gir_ffi/callback_base.rb +4 -6
  98. data/lib/gir_ffi/class_base.rb +6 -5
  99. data/lib/gir_ffi/core.rb +19 -20
  100. data/lib/gir_ffi/enum_base.rb +1 -1
  101. data/lib/gir_ffi/enum_like_base.rb +2 -2
  102. data/lib/gir_ffi/error_argument_info.rb +2 -2
  103. data/lib/gir_ffi/error_type_info.rb +1 -1
  104. data/lib/gir_ffi/ffi_ext.rb +1 -1
  105. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  106. data/lib/gir_ffi/flags_base.rb +1 -1
  107. data/lib/gir_ffi/in_pointer.rb +10 -0
  108. data/lib/gir_ffi/info_ext.rb +15 -14
  109. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  110. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  111. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  112. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  113. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  114. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  115. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  116. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  117. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  118. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  119. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_value_info.rb +25 -0
  121. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  122. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  123. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  124. data/lib/gir_ffi/interface_base.rb +3 -3
  125. data/lib/gir_ffi/lib_c.rb +1 -1
  126. data/lib/gir_ffi/method_stubber.rb +1 -1
  127. data/lib/gir_ffi/module_base.rb +1 -1
  128. data/lib/gir_ffi/object_base.rb +3 -4
  129. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  130. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  131. data/lib/gir_ffi/registered_type_base.rb +1 -1
  132. data/lib/gir_ffi/sized_array.rb +4 -2
  133. data/lib/gir_ffi/struct.rb +1 -1
  134. data/lib/gir_ffi/struct_base.rb +1 -1
  135. data/lib/gir_ffi/type_map.rb +2 -23
  136. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  137. data/lib/gir_ffi/unintrospectable_type_info.rb +5 -1
  138. data/lib/gir_ffi/union.rb +1 -1
  139. data/lib/gir_ffi/union_base.rb +1 -1
  140. data/lib/gir_ffi/user_defined_object_info.rb +6 -2
  141. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  142. data/lib/gir_ffi/version.rb +1 -1
  143. data/tasks/test.rake +3 -2
  144. data/test/base_test_helper.rb +16 -9
  145. data/test/ffi-glib/array_test.rb +71 -56
  146. data/test/ffi-glib/byte_array_test.rb +13 -7
  147. data/test/ffi-glib/bytes_test.rb +24 -19
  148. data/test/ffi-glib/closure_test.rb +11 -11
  149. data/test/ffi-glib/destroy_notify_test.rb +6 -6
  150. data/test/ffi-glib/hash_table_test.rb +27 -27
  151. data/test/ffi-glib/list_test.rb +22 -22
  152. data/test/ffi-glib/main_loop_test.rb +12 -12
  153. data/test/ffi-glib/ptr_array_test.rb +39 -39
  154. data/test/ffi-glib/ruby_closure_test.rb +10 -10
  155. data/test/ffi-glib/s_list_test.rb +20 -20
  156. data/test/ffi-glib/strv_test.rb +19 -19
  157. data/test/ffi-glib/variant_test.rb +5 -5
  158. data/test/ffi-gobject/gobject_test.rb +48 -44
  159. data/test/ffi-gobject/object_class_test.rb +8 -8
  160. data/test/ffi-gobject/object_test.rb +51 -68
  161. data/test/ffi-gobject/param_spec_test.rb +12 -12
  162. data/test/ffi-gobject/value_test.rb +145 -125
  163. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +9 -9
  164. data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
  165. data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
  166. data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
  167. data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
  168. data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
  169. data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
  170. data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
  171. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
  172. data/test/ffi-gobject_introspection/i_repository_test.rb +34 -34
  173. data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
  174. data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
  175. data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
  176. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
  177. data/test/ffi-gobject_introspection/lib_test.rb +3 -3
  178. data/test/ffi-gobject_introspection/strv_test.rb +9 -9
  179. data/test/ffi-gobject_test.rb +47 -45
  180. data/test/gir_ffi/allocation_helper_test.rb +13 -13
  181. data/test/gir_ffi/arg_helper_test.rb +71 -65
  182. data/test/gir_ffi/boolean_test.rb +20 -20
  183. data/test/gir_ffi/boxed_base_test.rb +18 -18
  184. data/test/gir_ffi/builder_test.rb +81 -213
  185. data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
  186. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  187. data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
  188. data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
  189. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
  190. data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
  191. data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
  192. data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
  193. data/test/gir_ffi/builders/field_builder_test.rb +48 -42
  194. data/test/gir_ffi/builders/function_builder_test.rb +256 -224
  195. data/test/gir_ffi/builders/initializer_builder_test.rb +16 -14
  196. data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
  197. data/test/gir_ffi/builders/module_builder_test.rb +18 -18
  198. data/test/gir_ffi/builders/object_builder_test.rb +41 -41
  199. data/test/gir_ffi/builders/property_builder_test.rb +94 -94
  200. data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
  201. data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
  202. data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
  203. data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
  204. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
  205. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
  206. data/test/gir_ffi/builders/union_builder_test.rb +12 -15
  207. data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
  208. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
  209. data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
  210. data/test/gir_ffi/callback_base_test.rb +9 -9
  211. data/test/gir_ffi/class_base_test.rb +56 -53
  212. data/test/gir_ffi/core_test.rb +36 -35
  213. data/test/gir_ffi/enum_base_test.rb +19 -19
  214. data/test/gir_ffi/error_type_info_test.rb +23 -23
  215. data/test/gir_ffi/ffi_ext/pointer_test.rb +9 -7
  216. data/test/gir_ffi/g_type_test.rb +11 -11
  217. data/test/gir_ffi/in_pointer_test.rb +70 -50
  218. data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
  219. data/test/gir_ffi/info_ext/i_callback_info_test.rb +6 -5
  220. data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
  221. data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
  222. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
  223. data/test/gir_ffi/info_ext/i_type_info_test.rb +231 -216
  224. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
  225. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
  226. data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
  227. data/test/gir_ffi/interface_base_test.rb +8 -8
  228. data/test/gir_ffi/method_stubber_test.rb +21 -19
  229. data/test/gir_ffi/object_base_test.rb +23 -23
  230. data/test/gir_ffi/object_store_test.rb +13 -13
  231. data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
  232. data/test/gir_ffi/sized_array_test.rb +68 -68
  233. data/test/gir_ffi/struct_base_test.rb +8 -8
  234. data/test/gir_ffi/struct_like_base_test.rb +64 -64
  235. data/test/gir_ffi/type_map_test.rb +8 -8
  236. data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
  237. data/test/gir_ffi/union_base_test.rb +8 -8
  238. data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
  239. data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
  240. data/test/gir_ffi/variable_name_generator_test.rb +8 -8
  241. data/test/gir_ffi/version_test.rb +4 -4
  242. data/test/gir_ffi/zero_terminated_test.rb +34 -34
  243. data/test/gir_ffi_test_helper.rb +3 -3
  244. data/test/integration/callback_exceptions_test.rb +17 -21
  245. data/test/integration/derived_classes_test.rb +14 -13
  246. data/test/integration/generated_everything_test.rb +225 -224
  247. data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
  248. data/test/integration/generated_gio_test.rb +36 -36
  249. data/test/integration/generated_glib_test.rb +4 -6
  250. data/test/integration/generated_gobject_test.rb +43 -35
  251. data/test/integration/generated_gst_test.rb +20 -16
  252. data/test/integration/generated_gtk_source_test.rb +9 -15
  253. data/test/integration/generated_gtop_test.rb +8 -15
  254. data/test/integration/generated_pango_ft2_test.rb +2 -2
  255. data/test/integration/generated_pango_test.rb +4 -4
  256. data/test/integration/generated_regress_test.rb +1858 -1632
  257. data/test/integration/generated_secret_test.rb +8 -11
  258. data/test/integration/generated_utility_test.rb +81 -81
  259. data/test/integration/generated_warnlib_test.rb +17 -21
  260. data/test/integration/method_lookup_test.rb +6 -6
  261. data/test/introspection_test_helper.rb +49 -7
  262. data/test/minitest/stats_plugin.rb +1 -1
  263. metadata +21 -23
  264. data/lib/ffi-glib/array_methods.rb +0 -16
  265. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -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,6 +1,6 @@
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.
@@ -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,6 +42,8 @@ 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,
@@ -12,7 +12,12 @@ module GirFFI
12
12
  end
13
13
 
14
14
  def get_or_define_class(namespace, name, parent)
15
- optionally_define_constant(namespace, name) { Class.new parent }
15
+ klass = optionally_define_constant(namespace, name) { Class.new parent }
16
+ unless klass.superclass == parent
17
+ raise "Expected superclass #{parent}, found #{klass.superclass}"
18
+ end
19
+
20
+ klass
16
21
  end
17
22
 
18
23
  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
@@ -15,6 +15,7 @@ module GirFFI
15
15
  ).freeze
16
16
 
17
17
  attr_reader :arginfo
18
+ attr_reader :related_callback_builder
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
@@ -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,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
@@ -53,7 +53,7 @@ module GirFFI
53
53
  when :inout
54
54
  [out_parameter_preparation, ingoing_pre_conversion]
55
55
  when :error
56
- [out_parameter_preparation, 'begin']
56
+ [out_parameter_preparation, "begin"]
57
57
  end
58
58
  end
59
59
 
@@ -65,7 +65,7 @@ module GirFFI
65
65
  [
66
66
  "rescue => #{result_name}",
67
67
  value_to_pointer_conversion,
68
- 'end'
68
+ "end"
69
69
  ]
70
70
  else
71
71
  []
@@ -166,7 +166,7 @@ module GirFFI
166
166
  end
167
167
 
168
168
  def length_argument_name
169
- length_arg && length_arg.pre_converted_name
169
+ length_arg&.pre_converted_name
170
170
  end
171
171
  end
172
172
  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
@@ -23,7 +23,19 @@ module GirFFI
23
23
  end
24
24
 
25
25
  def klass
26
- @klass ||= get_or_define_class namespace_module, @classname, CallbackBase
26
+ @klass ||= get_or_define_class container_module, @classname, CallbackBase
27
+ end
28
+
29
+ def container_module
30
+ @container_module ||=
31
+ if @info.container
32
+ type_info = @info.container
33
+ field_info = type_info.container
34
+ container_class_info = field_info.container
35
+ namespace_module.const_get container_class_info.safe_name
36
+ else
37
+ namespace_module
38
+ end
27
39
  end
28
40
 
29
41
  def mapping_method_definition
@@ -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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builders/callback_argument_builder'
3
+ require "gir_ffi/builders/callback_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/builders/callback_return_value_builder'
3
+ require "gir_ffi/builders/callback_return_value_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/builders/base_type_builder'
3
+ require "gir_ffi/builders/base_type_builder"
4
4
  module GirFFI
5
5
  module Builders
6
6
  # Implements the creation of a constant. Though semantically not a
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builders/argument_builder_collection'
4
- require 'gir_ffi/builders/method_template'
5
- require 'gir_ffi/builders/null_return_value_builder'
3
+ require "gir_ffi/builders/argument_builder_collection"
4
+ require "gir_ffi/builders/method_template"
5
+ require "gir_ffi/builders/null_return_value_builder"
6
6
 
7
7
  module GirFFI
8
8
  module Builders
@@ -30,16 +30,16 @@ module GirFFI
30
30
  end
31
31
 
32
32
  def method_arguments
33
- ['*args', '&block']
33
+ ["*args", "&block"]
34
34
  end
35
35
 
36
36
  def preparation
37
- if @info.safe_name == 'new'
38
- ['obj = allocate']
37
+ if @info.safe_name == "new"
38
+ ["obj = allocate"]
39
39
  else
40
40
  [
41
41
  "raise NoMethodError unless self == #{@info.container.full_type_name}",
42
- 'obj = allocate'
42
+ "obj = allocate"
43
43
  ]
44
44
  end
45
45
  end
@@ -49,13 +49,13 @@ module GirFFI
49
49
  end
50
50
 
51
51
  def result
52
- ['obj']
52
+ ["obj"]
53
53
  end
54
54
 
55
55
  private
56
56
 
57
57
  def initializer_name
58
- @info.safe_name.sub(/^new/, 'initialize')
58
+ @info.safe_name.sub(/^new/, "initialize")
59
59
  end
60
60
  end
61
61
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builders/registered_type_builder'
4
- require 'gir_ffi/enum_base'
3
+ require "gir_ffi/builders/registered_type_builder"
4
+ require "gir_ffi/enum_base"
5
5
 
6
6
  module GirFFI
7
7
  module Builders
@@ -16,7 +16,7 @@ module GirFFI
16
16
  end
17
17
 
18
18
  def value_spec
19
- info.values.map do |vinfo|
19
+ value_infos.map do |vinfo|
20
20
  val = GirFFI::ArgHelper.cast_uint32_to_int32(vinfo.value)
21
21
  [vinfo.name.to_sym, val]
22
22
  end.flatten
@@ -26,6 +26,7 @@ module GirFFI
26
26
  setup_ffi_type
27
27
  klass.extend superclass
28
28
  setup_constants
29
+ setup_value_constants
29
30
  stub_methods
30
31
  setup_inspect
31
32
  end
@@ -40,6 +41,14 @@ module GirFFI
40
41
  end
41
42
  end
42
43
 
44
+ def setup_value_constants
45
+ value_infos.each do |vinfo|
46
+ optionally_define_constant klass, vinfo.constant_name do
47
+ vinfo.value
48
+ end
49
+ end
50
+ end
51
+
43
52
  def setup_inspect
44
53
  klass.instance_eval <<-RUBY, __FILE__, __LINE__ + 1
45
54
  def self.inspect
@@ -55,6 +64,10 @@ module GirFFI
55
64
  def superclass
56
65
  EnumBase
57
66
  end
67
+
68
+ def value_infos
69
+ @value_infos ||= info.values
70
+ end
58
71
  end
59
72
  end
60
73
  end