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
@@ -11,4 +11,4 @@ module GirFFI
11
11
  end
12
12
  end
13
13
 
14
- GObjectIntrospection::ICallableInfo.send :include, GirFFI::InfoExt::ICallableInfo
14
+ GObjectIntrospection::ICallableInfo.include GirFFI::InfoExt::ICallableInfo
@@ -23,4 +23,4 @@ module GirFFI
23
23
  end
24
24
  end
25
25
 
26
- GObjectIntrospection::ICallbackInfo.send :include, GirFFI::InfoExt::ICallbackInfo
26
+ GObjectIntrospection::ICallbackInfo.include GirFFI::InfoExt::ICallbackInfo
@@ -16,4 +16,4 @@ module GirFFI
16
16
  end
17
17
  end
18
18
 
19
- GObjectIntrospection::IFieldInfo.send :include, GirFFI::InfoExt::IFieldInfo
19
+ GObjectIntrospection::IFieldInfo.include GirFFI::InfoExt::IFieldInfo
@@ -18,4 +18,4 @@ module GirFFI
18
18
  end
19
19
  end
20
20
 
21
- GObjectIntrospection::IFunctionInfo.send :include, GirFFI::InfoExt::IFunctionInfo
21
+ GObjectIntrospection::IFunctionInfo.include GirFFI::InfoExt::IFunctionInfo
@@ -5,7 +5,7 @@ module GirFFI
5
5
  # Extensions for GObjectIntrospection::IPropertyInfo needed by GirFFI
6
6
  module IPropertyInfo
7
7
  def getter_name
8
- name.tr('-', '_')
8
+ name.tr("-", "_")
9
9
  end
10
10
 
11
11
  def setter_name
@@ -15,4 +15,4 @@ module GirFFI
15
15
  end
16
16
  end
17
17
 
18
- GObjectIntrospection::IPropertyInfo.send :include, GirFFI::InfoExt::IPropertyInfo
18
+ GObjectIntrospection::IPropertyInfo.include GirFFI::InfoExt::IPropertyInfo
@@ -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
  module InfoExt
@@ -20,15 +20,14 @@ module GirFFI
20
20
 
21
21
  def find_instance_method(method)
22
22
  info = find_method method
23
- return info if info && info.method?
23
+ return info if info&.method?
24
24
  end
25
25
 
26
26
  def find_method(_method)
27
- raise 'Must be overridden in subclass'
27
+ raise "Must be overridden in subclass"
28
28
  end
29
29
  end
30
30
  end
31
31
  end
32
32
 
33
- GObjectIntrospection::IRegisteredTypeInfo.send :include,
34
- GirFFI::InfoExt::IRegisteredTypeInfo
33
+ GObjectIntrospection::IRegisteredTypeInfo.include GirFFI::InfoExt::IRegisteredTypeInfo
@@ -17,8 +17,8 @@ module GirFFI
17
17
  end
18
18
 
19
19
  def arguments_to_gvalues(instance, arguments)
20
- arg_g_values = args.zip(arguments).map do |info, arg|
21
- info.argument_type.make_g_value.tap { |it| it.set_value arg }
20
+ arg_g_values = argument_types.zip(arguments).map do |type, arg|
21
+ type.make_g_value.tap { |it| it.set_value arg }
22
22
  end
23
23
 
24
24
  arg_g_values.unshift GObject::Value.wrap_instance(instance)
@@ -27,8 +27,12 @@ module GirFFI
27
27
  def gvalue_for_return_value
28
28
  return_type.make_g_value
29
29
  end
30
+
31
+ def argument_types
32
+ @argument_types ||= args.map(&:argument_type)
33
+ end
30
34
  end
31
35
  end
32
36
  end
33
37
 
34
- GObjectIntrospection::ISignalInfo.send :include, GirFFI::InfoExt::ISignalInfo
38
+ GObjectIntrospection::ISignalInfo.include GirFFI::InfoExt::ISignalInfo
@@ -1,13 +1,34 @@
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
  module InfoExt
7
7
  # Extensions for GObjectIntrospection::ITypeInfo needed by GirFFI
8
8
  module ITypeInfo
9
+ FLATTENED_TAG_TO_GTYPE_MAP = {
10
+ gboolean: GObject::TYPE_BOOLEAN,
11
+ gint32: GObject::TYPE_INT,
12
+ gint64: GObject::TYPE_INT64,
13
+ guint64: GObject::TYPE_UINT64,
14
+ void: GObject::TYPE_NONE
15
+ }.freeze
16
+
17
+ FLATTENED_TAG_POINTER_TO_GTYPE_MAP = {
18
+ array: GObject::TYPE_ARRAY,
19
+ ghash: GObject::TYPE_HASH_TABLE,
20
+ strv: GObject::TYPE_STRV,
21
+ utf8: GObject::TYPE_STRING
22
+ }.freeze
23
+
9
24
  def gtype
10
- TypeMap.type_info_to_gtype self
25
+ return interface.gtype if tag == :interface
26
+
27
+ if pointer?
28
+ FLATTENED_TAG_POINTER_TO_GTYPE_MAP.fetch(flattened_tag, GObject::TYPE_POINTER)
29
+ else
30
+ FLATTENED_TAG_TO_GTYPE_MAP.fetch(flattened_tag)
31
+ end
11
32
  end
12
33
 
13
34
  def make_g_value
@@ -24,14 +45,15 @@ module GirFFI
24
45
  end
25
46
 
26
47
  def flattened_tag
27
- case tag
28
- when :interface
29
- interface_type
30
- when :array
31
- flattened_array_type
32
- else
33
- tag
34
- end
48
+ @flattened_tag ||=
49
+ case tag
50
+ when :interface
51
+ interface_type
52
+ when :array
53
+ flattened_array_type
54
+ else
55
+ tag
56
+ end
35
57
  end
36
58
 
37
59
  def interface_type
@@ -59,22 +81,22 @@ module GirFFI
59
81
  end
60
82
 
61
83
  def interface_class
62
- Builder.build_class interface if tag == :interface
84
+ @interface_class ||= Builder.build_class interface if tag == :interface
63
85
  end
64
86
 
65
87
  TAG_TO_WRAPPER_CLASS_MAP = {
66
- array: 'GLib::Array',
67
- byte_array: 'GLib::ByteArray',
68
- c: 'GirFFI::SizedArray',
69
- error: 'GLib::Error',
70
- ghash: 'GLib::HashTable',
71
- glist: 'GLib::List',
72
- gslist: 'GLib::SList',
73
- ptr_array: 'GLib::PtrArray',
74
- strv: 'GLib::Strv',
75
- utf8: 'GirFFI::InPointer', # TODO: Create a string-like class
76
- void: 'GirFFI::InPointer', # TODO: Create a void-pointer class
77
- zero_terminated: 'GirFFI::ZeroTerminated'
88
+ array: "GLib::Array",
89
+ byte_array: "GLib::ByteArray",
90
+ c: "GirFFI::SizedArray",
91
+ error: "GLib::Error",
92
+ ghash: "GLib::HashTable",
93
+ glist: "GLib::List",
94
+ gslist: "GLib::SList",
95
+ ptr_array: "GLib::PtrArray",
96
+ strv: "GLib::Strv",
97
+ utf8: "GirFFI::InPointer", # TODO: Create a string-like class
98
+ void: "GirFFI::InPointer", # TODO: Create a void-pointer class
99
+ zero_terminated: "GirFFI::ZeroTerminated"
78
100
  }.freeze
79
101
 
80
102
  # TODO: Use class rather than class name
@@ -144,7 +166,7 @@ module GirFFI
144
166
  end
145
167
 
146
168
  def needs_c_to_ruby_conversion_for_closures?
147
- [:array, :c, :ghash, :glist, :struct, :strv].include?(flattened_tag)
169
+ [:array, :c, :error, :ghash, :glist, :struct, :strv].include?(flattened_tag)
148
170
  end
149
171
 
150
172
  def needs_ruby_to_c_conversion_for_closures?
@@ -170,7 +192,7 @@ module GirFFI
170
192
  end
171
193
  end
172
194
 
173
- GOBJECT_VALUE_NAME = 'GObject::Value'.freeze
195
+ GOBJECT_VALUE_NAME = "GObject::Value"
174
196
 
175
197
  def gvalue?
176
198
  argument_class_name == GOBJECT_VALUE_NAME
@@ -220,4 +242,4 @@ module GirFFI
220
242
  end
221
243
  end
222
244
 
223
- GObjectIntrospection::ITypeInfo.send :include, GirFFI::InfoExt::ITypeInfo
245
+ GObjectIntrospection::ITypeInfo.include GirFFI::InfoExt::ITypeInfo
@@ -11,4 +11,4 @@ module GirFFI
11
11
  end
12
12
  end
13
13
 
14
- GObjectIntrospection::IUnresolvedInfo.send :include, GirFFI::InfoExt::IUnresolvedInfo
14
+ GObjectIntrospection::IUnresolvedInfo.include GirFFI::InfoExt::IUnresolvedInfo
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GirFFI
4
+ module InfoExt
5
+ # Extensions for GObjectIntrospection::IValueInfo needed by GirFFI
6
+ module IValueInfo
7
+ def constant_name
8
+ upcased_name = name.upcase
9
+ if /^[0-9]/.match?(upcased_name)
10
+ "VALUE_#{upcased_name}"
11
+ else
12
+ upcased_name
13
+ end
14
+ end
15
+
16
+ def to_callback_ffi_type
17
+ return :pointer if direction != :in
18
+
19
+ argument_type.to_callback_ffi_type
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ GObjectIntrospection::IValueInfo.include GirFFI::InfoExt::IValueInfo
@@ -16,7 +16,7 @@ module GirFFI
16
16
  end
17
17
 
18
18
  def invoker_name
19
- invoker && invoker.name
19
+ invoker&.name
20
20
  end
21
21
 
22
22
  def has_invoker?
@@ -26,4 +26,4 @@ module GirFFI
26
26
  end
27
27
  end
28
28
 
29
- GObjectIntrospection::IVFuncInfo.send :include, GirFFI::InfoExt::IVFuncInfo
29
+ GObjectIntrospection::IVFuncInfo.include GirFFI::InfoExt::IVFuncInfo
@@ -5,10 +5,10 @@ module GirFFI
5
5
  # Extension module provinding a #safe_name method suitable for types.
6
6
  module SafeConstantName
7
7
  def safe_name
8
- name.tr('-', '_').gsub(/^./) do |char|
8
+ name.tr("-", "_").sub(/^[_a-z]/) do |char|
9
9
  case char
10
- when '_'
11
- 'Private___'
10
+ when "_"
11
+ "Private___"
12
12
  else
13
13
  char.upcase
14
14
  end
@@ -18,8 +18,8 @@ module GirFFI
18
18
  end
19
19
  end
20
20
 
21
- GObjectIntrospection::ICallbackInfo.send :include, GirFFI::InfoExt::SafeConstantName
22
- GObjectIntrospection::IConstantInfo.send :include, GirFFI::InfoExt::SafeConstantName
23
- GObjectIntrospection::IRegisteredTypeInfo.send :include, GirFFI::InfoExt::SafeConstantName
24
- GObjectIntrospection::ISignalInfo.send :include, GirFFI::InfoExt::SafeConstantName
25
- GObjectIntrospection::IVFuncInfo.send :include, GirFFI::InfoExt::SafeConstantName
21
+ GObjectIntrospection::ICallbackInfo.include GirFFI::InfoExt::SafeConstantName
22
+ GObjectIntrospection::IConstantInfo.include GirFFI::InfoExt::SafeConstantName
23
+ GObjectIntrospection::IRegisteredTypeInfo.include GirFFI::InfoExt::SafeConstantName
24
+ GObjectIntrospection::ISignalInfo.include GirFFI::InfoExt::SafeConstantName
25
+ GObjectIntrospection::IVFuncInfo.include GirFFI::InfoExt::SafeConstantName
@@ -6,7 +6,7 @@ module GirFFI
6
6
  module SafeFunctionName
7
7
  def safe_name
8
8
  name = self.name
9
- return '_' if name.empty?
9
+ return "_" if name.empty?
10
10
 
11
11
  name
12
12
  end
@@ -14,4 +14,4 @@ module GirFFI
14
14
  end
15
15
  end
16
16
 
17
- GObjectIntrospection::IFunctionInfo.send :include, GirFFI::InfoExt::SafeFunctionName
17
+ GObjectIntrospection::IFunctionInfo.include GirFFI::InfoExt::SafeFunctionName
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/registered_type_base'
4
- require 'gir_ffi/method_setup'
5
- require 'gir_ffi/instance_method_setup'
3
+ require "gir_ffi/registered_type_base"
4
+ require "gir_ffi/method_setup"
5
+ require "gir_ffi/instance_method_setup"
6
6
 
7
7
  module GirFFI
8
8
  # Base module for modules representing GLib interfaces.
@@ -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
  # Library of libc functions.
@@ -9,7 +9,7 @@ module GirFFI
9
9
  end
10
10
 
11
11
  def method_stub
12
- <<-STUB.reset_indentation
12
+ <<~STUB
13
13
  def #{@info.method? ? '' : 'self.'}#{@info.safe_name} *args, &block
14
14
  setup_and_call "#{@info.name}", args, &block
15
15
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/method_setup'
3
+ require "gir_ffi/method_setup"
4
4
 
5
5
  module GirFFI
6
6
  # Base module for modules representing GLib namespaces.
@@ -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 all generated classes of type :object.
@@ -38,7 +38,7 @@ module GirFFI
38
38
  end
39
39
 
40
40
  def self.copy_from(val)
41
- val.ref if val
41
+ val&.ref
42
42
  end
43
43
 
44
44
  #
@@ -49,8 +49,7 @@ module GirFFI
49
49
  # @return [GObjectIntrospection::IPropertyInfo] The property's info
50
50
  #
51
51
  def self.find_property(name)
52
- gir_ffi_builder.find_property name or
53
- raise GirFFI::PropertyNotFoundError.new(name, self)
52
+ gir_ffi_builder.find_property name
54
53
  end
55
54
 
56
55
  #
@@ -21,7 +21,7 @@ module GirFFI
21
21
  end
22
22
 
23
23
  def name
24
- '_instance'
24
+ "_instance"
25
25
  end
26
26
  end
27
27
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GirFFI
4
- # Represents the type of the receiver of a signal or vfunc, conforming, as
5
- # needed, to the interface of GObjectIntrospection::ITypeInfo
4
+ # Represents the type of the receiver of a signal, vfunc, or method,
5
+ # conforming, as needed, to the interface of GObjectIntrospection::ITypeInfo
6
6
  class ReceiverTypeInfo
7
7
  include InfoExt::ITypeInfo
8
8
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/type_base'
3
+ require "gir_ffi/type_base"
4
4
 
5
5
  module GirFFI
6
6
  # Base module for generated registered GLib types (these are types that have a
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "gir_ffi/array_element_convertor"
4
+
3
5
  module GirFFI
4
6
  # Class representing an array with a determined size
5
7
  class SizedArray
@@ -17,8 +19,8 @@ module GirFFI
17
19
  end
18
20
 
19
21
  def index(idx)
20
- ptr = InOutPointer.new element_type, @pointer + idx * element_size
21
- ptr.to_ruby_value
22
+ convertor = ArrayElementConvertor.new element_type, @pointer + idx * element_size
23
+ convertor.to_ruby_value
22
24
  end
23
25
 
24
26
  def each
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/ownable'
3
+ require "gir_ffi/ownable"
4
4
 
5
5
  module GirFFI
6
6
  # Struct that can be owned.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/struct_like_base'
3
+ require "gir_ffi/struct_like_base"
4
4
 
5
5
  module GirFFI
6
6
  # Base class for generated classes representing GLib structs.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/boolean'
4
- require 'gir_ffi/sized_array'
3
+ require "gir_ffi/boolean"
4
+ require "gir_ffi/sized_array"
5
5
 
6
6
  module GirFFI
7
7
  # Maps GObject type tags and type specification to types FFI can handle.
@@ -58,26 +58,5 @@ module GirFFI
58
58
  map_basic_type(type)
59
59
  end
60
60
  end
61
-
62
- FLATTENED_TAG_TO_GTYPE_MAP = {
63
- [:array, true] => GObject::TYPE_ARRAY,
64
- [:c, true] => GObject::TYPE_POINTER,
65
- [:gboolean, false] => GObject::TYPE_BOOLEAN,
66
- [:ghash, true] => GObject::TYPE_HASH_TABLE,
67
- [:glist, true] => GObject::TYPE_POINTER,
68
- [:gint32, false] => GObject::TYPE_INT,
69
- [:gint64, false] => GObject::TYPE_INT64,
70
- [:guint64, false] => GObject::TYPE_UINT64,
71
- [:strv, true] => GObject::TYPE_STRV,
72
- [:utf8, true] => GObject::TYPE_STRING,
73
- [:void, true] => GObject::TYPE_POINTER,
74
- [:void, false] => GObject::TYPE_NONE
75
- }.freeze
76
-
77
- def self.type_info_to_gtype(type_info)
78
- return type_info.interface.gtype if type_info.tag == :interface
79
-
80
- FLATTENED_TAG_TO_GTYPE_MAP.fetch [type_info.flattened_tag, type_info.pointer?]
81
- end
82
61
  end
83
62
  end