gir_ffi 0.14.1 → 0.15.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 (263) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +21 -0
  3. data/Gemfile +6 -4
  4. data/README.md +4 -4
  5. data/Rakefile +5 -5
  6. data/lib/ffi-glib/array.rb +14 -4
  7. data/lib/ffi-glib/byte_array.rb +7 -2
  8. data/lib/ffi-glib/container_class_methods.rb +1 -1
  9. data/lib/ffi-glib/error.rb +1 -1
  10. data/lib/ffi-glib/hash_table.rb +3 -3
  11. data/lib/ffi-glib/list.rb +1 -1
  12. data/lib/ffi-glib/list_methods.rb +1 -1
  13. data/lib/ffi-glib/main_loop.rb +3 -3
  14. data/lib/ffi-glib/ptr_array.rb +30 -8
  15. data/lib/ffi-glib/s_list.rb +1 -1
  16. data/lib/ffi-glib/variant.rb +1 -1
  17. data/lib/ffi-glib.rb +16 -16
  18. data/lib/ffi-gobject/object.rb +23 -32
  19. data/lib/ffi-gobject/param_spec.rb +1 -1
  20. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  21. data/lib/ffi-gobject/value.rb +37 -28
  22. data/lib/ffi-gobject.rb +13 -13
  23. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  24. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  25. data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
  26. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  27. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  29. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  30. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  32. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  33. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  34. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  35. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  36. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  37. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  38. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  39. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  40. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  41. data/lib/ffi-gobject_introspection.rb +20 -20
  42. data/lib/gir_ffi/allocation_helper.rb +1 -1
  43. data/lib/gir_ffi/arg_helper.rb +4 -4
  44. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
  45. data/lib/gir_ffi/boolean.rb +1 -1
  46. data/lib/gir_ffi/boxed_base.rb +1 -1
  47. data/lib/gir_ffi/builder.rb +18 -10
  48. data/lib/gir_ffi/builders/argument_builder.rb +17 -17
  49. data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
  50. data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
  51. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  52. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  53. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  54. data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
  55. data/lib/gir_ffi/builders/callback_builder.rb +3 -3
  56. data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
  57. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  58. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  59. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  60. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  61. data/lib/gir_ffi/builders/enum_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/field_builder.rb +16 -15
  63. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  64. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  65. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  66. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  67. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  68. data/lib/gir_ffi/builders/interface_builder.rb +2 -2
  69. data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
  70. data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
  71. data/lib/gir_ffi/builders/method_template.rb +1 -1
  72. data/lib/gir_ffi/builders/module_builder.rb +4 -6
  73. data/lib/gir_ffi/builders/object_builder.rb +6 -6
  74. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  75. data/lib/gir_ffi/builders/property_builder.rb +13 -12
  76. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  77. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  78. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  79. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  80. data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
  81. data/lib/gir_ffi/builders/struct_builder.rb +4 -4
  82. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  83. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  84. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  85. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  86. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  87. data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
  88. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/vfunc_builder.rb +6 -6
  90. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  91. data/lib/gir_ffi/callback_base.rb +1 -1
  92. data/lib/gir_ffi/class_base.rb +5 -5
  93. data/lib/gir_ffi/core.rb +19 -20
  94. data/lib/gir_ffi/enum_base.rb +1 -1
  95. data/lib/gir_ffi/enum_like_base.rb +2 -2
  96. data/lib/gir_ffi/error_argument_info.rb +2 -2
  97. data/lib/gir_ffi/error_type_info.rb +1 -1
  98. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  99. data/lib/gir_ffi/ffi_ext.rb +1 -1
  100. data/lib/gir_ffi/flags_base.rb +1 -1
  101. data/lib/gir_ffi/in_pointer.rb +10 -0
  102. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  103. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  104. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  105. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  106. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  107. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  108. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  109. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  110. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  111. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  112. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  113. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  114. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  115. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  116. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  117. data/lib/gir_ffi/info_ext.rb +15 -15
  118. data/lib/gir_ffi/interface_base.rb +3 -3
  119. data/lib/gir_ffi/lib_c.rb +1 -1
  120. data/lib/gir_ffi/method_stubber.rb +1 -1
  121. data/lib/gir_ffi/module_base.rb +1 -1
  122. data/lib/gir_ffi/object_base.rb +3 -4
  123. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  124. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  125. data/lib/gir_ffi/registered_type_base.rb +1 -1
  126. data/lib/gir_ffi/sized_array.rb +4 -2
  127. data/lib/gir_ffi/struct.rb +1 -1
  128. data/lib/gir_ffi/struct_base.rb +1 -1
  129. data/lib/gir_ffi/type_map.rb +2 -23
  130. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  131. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  132. data/lib/gir_ffi/union.rb +1 -1
  133. data/lib/gir_ffi/union_base.rb +1 -1
  134. data/lib/gir_ffi/user_defined_object_info.rb +6 -2
  135. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  136. data/lib/gir_ffi/version.rb +1 -1
  137. data/lib/gir_ffi-base/gobject/lib.rb +3 -2
  138. data/lib/gir_ffi-base/gobject.rb +26 -25
  139. data/lib/gir_ffi-base.rb +1 -1
  140. data/lib/gir_ffi.rb +3 -3
  141. data/tasks/test.rake +3 -2
  142. data/test/base_test_helper.rb +16 -9
  143. data/test/ffi-glib/array_test.rb +71 -56
  144. data/test/ffi-glib/byte_array_test.rb +13 -7
  145. data/test/ffi-glib/bytes_test.rb +24 -19
  146. data/test/ffi-glib/closure_test.rb +11 -11
  147. data/test/ffi-glib/destroy_notify_test.rb +6 -6
  148. data/test/ffi-glib/hash_table_test.rb +27 -27
  149. data/test/ffi-glib/list_test.rb +22 -22
  150. data/test/ffi-glib/main_loop_test.rb +12 -12
  151. data/test/ffi-glib/ptr_array_test.rb +39 -39
  152. data/test/ffi-glib/ruby_closure_test.rb +10 -10
  153. data/test/ffi-glib/s_list_test.rb +20 -20
  154. data/test/ffi-glib/strv_test.rb +19 -19
  155. data/test/ffi-glib/variant_test.rb +5 -5
  156. data/test/ffi-gobject/gobject_test.rb +48 -44
  157. data/test/ffi-gobject/object_class_test.rb +8 -8
  158. data/test/ffi-gobject/object_test.rb +49 -67
  159. data/test/ffi-gobject/param_spec_test.rb +12 -12
  160. data/test/ffi-gobject/value_test.rb +145 -125
  161. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +8 -8
  162. data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
  163. data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
  164. data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
  165. data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
  166. data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
  167. data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
  168. data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
  169. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
  170. data/test/ffi-gobject_introspection/i_repository_test.rb +31 -31
  171. data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
  172. data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
  173. data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
  174. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
  175. data/test/ffi-gobject_introspection/lib_test.rb +3 -3
  176. data/test/ffi-gobject_introspection/strv_test.rb +9 -9
  177. data/test/ffi-gobject_test.rb +44 -44
  178. data/test/gir_ffi/allocation_helper_test.rb +13 -13
  179. data/test/gir_ffi/arg_helper_test.rb +63 -64
  180. data/test/gir_ffi/boolean_test.rb +20 -20
  181. data/test/gir_ffi/boxed_base_test.rb +18 -18
  182. data/test/gir_ffi/builder_test.rb +115 -93
  183. data/test/gir_ffi/builders/argument_builder_test.rb +280 -286
  184. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  185. data/test/gir_ffi/builders/callback_argument_builder_test.rb +53 -56
  186. data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
  187. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +36 -40
  188. data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
  189. data/test/gir_ffi/builders/constructor_builder_test.rb +10 -10
  190. data/test/gir_ffi/builders/enum_builder_test.rb +10 -10
  191. data/test/gir_ffi/builders/field_builder_test.rb +42 -42
  192. data/test/gir_ffi/builders/function_builder_test.rb +236 -224
  193. data/test/gir_ffi/builders/initializer_builder_test.rb +14 -14
  194. data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
  195. data/test/gir_ffi/builders/module_builder_test.rb +18 -18
  196. data/test/gir_ffi/builders/object_builder_test.rb +38 -38
  197. data/test/gir_ffi/builders/property_builder_test.rb +91 -94
  198. data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
  199. data/test/gir_ffi/builders/return_value_builder_test.rb +215 -222
  200. data/test/gir_ffi/builders/signal_closure_builder_test.rb +122 -113
  201. data/test/gir_ffi/builders/struct_builder_test.rb +32 -32
  202. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
  203. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +23 -23
  204. data/test/gir_ffi/builders/union_builder_test.rb +12 -15
  205. data/test/gir_ffi/builders/user_defined_builder_test.rb +147 -147
  206. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +40 -40
  207. data/test/gir_ffi/builders/vfunc_builder_test.rb +145 -157
  208. data/test/gir_ffi/callback_base_test.rb +9 -9
  209. data/test/gir_ffi/class_base_test.rb +49 -51
  210. data/test/gir_ffi/core_test.rb +32 -32
  211. data/test/gir_ffi/enum_base_test.rb +19 -19
  212. data/test/gir_ffi/error_type_info_test.rb +23 -23
  213. data/test/gir_ffi/ffi_ext/pointer_test.rb +5 -5
  214. data/test/gir_ffi/g_type_test.rb +11 -11
  215. data/test/gir_ffi/in_pointer_test.rb +70 -50
  216. data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
  217. data/test/gir_ffi/info_ext/i_callback_info_test.rb +4 -4
  218. data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
  219. data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
  220. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
  221. data/test/gir_ffi/info_ext/i_type_info_test.rb +229 -215
  222. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
  223. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
  224. data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
  225. data/test/gir_ffi/interface_base_test.rb +8 -8
  226. data/test/gir_ffi/method_stubber_test.rb +19 -19
  227. data/test/gir_ffi/object_base_test.rb +19 -19
  228. data/test/gir_ffi/object_store_test.rb +13 -13
  229. data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
  230. data/test/gir_ffi/sized_array_test.rb +68 -68
  231. data/test/gir_ffi/struct_base_test.rb +8 -8
  232. data/test/gir_ffi/struct_like_base_test.rb +64 -64
  233. data/test/gir_ffi/type_map_test.rb +6 -6
  234. data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
  235. data/test/gir_ffi/union_base_test.rb +8 -8
  236. data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
  237. data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
  238. data/test/gir_ffi/variable_name_generator_test.rb +8 -8
  239. data/test/gir_ffi/version_test.rb +4 -4
  240. data/test/gir_ffi/zero_terminated_test.rb +34 -34
  241. data/test/gir_ffi_test_helper.rb +3 -3
  242. data/test/integration/callback_exceptions_test.rb +17 -21
  243. data/test/integration/derived_classes_test.rb +13 -13
  244. data/test/integration/generated_everything_test.rb +224 -224
  245. data/test/integration/generated_gimarshallingtests_test.rb +1118 -1017
  246. data/test/integration/generated_gio_test.rb +36 -36
  247. data/test/integration/generated_glib_test.rb +4 -6
  248. data/test/integration/generated_gobject_test.rb +43 -35
  249. data/test/integration/generated_gst_test.rb +16 -16
  250. data/test/integration/generated_gtk_source_test.rb +22 -17
  251. data/test/integration/generated_gtop_test.rb +8 -15
  252. data/test/integration/generated_pango_ft2_test.rb +2 -2
  253. data/test/integration/generated_pango_test.rb +4 -4
  254. data/test/integration/generated_regress_test.rb +1809 -1621
  255. data/test/integration/generated_secret_test.rb +8 -11
  256. data/test/integration/generated_utility_test.rb +81 -81
  257. data/test/integration/generated_warnlib_test.rb +13 -19
  258. data/test/integration/method_lookup_test.rb +6 -6
  259. data/test/introspection_test_helper.rb +48 -7
  260. data/test/minitest/stats_plugin.rb +1 -1
  261. metadata +11 -28
  262. data/lib/ffi-glib/array_methods.rb +0 -16
  263. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -21,7 +21,8 @@ module GObjectIntrospection
21
21
  end
22
22
 
23
23
  def get_method(index)
24
- IFunctionInfo.wrap Lib.g_struct_info_get_method(self, index)
24
+ @method_cache ||= []
25
+ @method_cache[index] ||= IFunctionInfo.wrap Lib.g_struct_info_get_method(self, index)
25
26
  end
26
27
 
27
28
  ##
@@ -5,24 +5,30 @@ module GObjectIntrospection
5
5
  # Represents type information, direction, transfer etc.
6
6
  class ITypeInfo < IBaseInfo
7
7
  def pointer?
8
- Lib.g_type_info_is_pointer self
8
+ return @pointer_eh if defined? @pointer_eh
9
+
10
+ @pointer_eh = Lib.g_type_info_is_pointer self
9
11
  end
10
12
 
11
13
  def tag
12
- Lib.g_type_info_get_tag self
14
+ @tag ||= Lib.g_type_info_get_tag self
13
15
  end
14
16
 
15
17
  def param_type(index)
16
- ITypeInfo.wrap Lib.g_type_info_get_param_type(self, index)
18
+ @param_type_cache ||= []
19
+ @param_type_cache[index] ||=
20
+ ITypeInfo.wrap Lib.g_type_info_get_param_type(self, index)
17
21
  end
18
22
 
19
23
  def interface
20
- ptr = Lib.g_type_info_get_interface self
21
- IRepository.wrap_ibaseinfo_pointer ptr
24
+ @interface ||= begin
25
+ ptr = Lib.g_type_info_get_interface self
26
+ IRepository.wrap_ibaseinfo_pointer ptr
27
+ end
22
28
  end
23
29
 
24
30
  def array_length
25
- Lib.g_type_info_get_array_length self
31
+ @array_length ||= Lib.g_type_info_get_array_length self
26
32
  end
27
33
 
28
34
  def array_fixed_size
@@ -38,7 +44,7 @@ module GObjectIntrospection
38
44
  end
39
45
 
40
46
  def name
41
- raise 'Should not call this for ITypeInfo'
47
+ raise "Should not call this for ITypeInfo"
42
48
  end
43
49
  end
44
50
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-gobject_introspection/i_base_info'
3
+ require "ffi-gobject_introspection/i_base_info"
4
4
 
5
5
  module GObjectIntrospection
6
6
  # Wraps a GIBaseInfo struct in the case where the info type is :unresolved.
@@ -13,7 +13,7 @@ module GObjectIntrospection
13
13
  end
14
14
 
15
15
  def invoker
16
- IFunctionInfo.wrap Lib.g_vfunc_info_get_invoker self
16
+ @invoker ||= IFunctionInfo.wrap Lib.g_vfunc_info_get_invoker self
17
17
  end
18
18
  end
19
19
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
4
- require 'ffi/bit_masks'
3
+ require "ffi"
4
+ require "ffi/bit_masks"
5
5
 
6
6
  module GObjectIntrospection
7
7
  # Module for attaching functions from the girepository library
8
8
  module Lib
9
9
  extend FFI::Library
10
10
  extend FFI::BitMasks
11
- ffi_lib 'girepository-1.0'
11
+ ffi_lib "girepository-1.0"
12
12
 
13
13
  # IRepository
14
14
  enum :IRepositoryLoadFlags, [:LAZY, (1 << 0)]
@@ -116,24 +116,35 @@ module GObjectIntrospection
116
116
  attach_function :g_arg_info_get_destroy, [:pointer], :int
117
117
  attach_function :g_arg_info_get_type, [:pointer], :pointer
118
118
 
119
- # The values of ITypeTag were changed in an incompatible way between
120
- # gobject-introspection version 0.9.0 and 0.9.1. Therefore, we need to
121
- # retrieve the correct values before declaring the ITypeTag enum.
122
- attach_function :tmp_type_tag_to_string, :g_type_tag_to_string, [:int], :string
123
- type_tag_map = (0..31).map do |id|
124
- sym = tmp_type_tag_to_string(id).to_sym
125
- if sym == :unknown
126
- nil
127
- else
128
- [sym, id]
129
- end
130
- end.compact.flatten
131
- enum :ITypeTag, type_tag_map
132
-
133
- # Now, attach g_type_tag_to_string again under its own name with an
134
- # improved signature.
119
+ # ITypeTag
120
+ enum :ITypeTag, [
121
+ :void,
122
+ :gboolean,
123
+ :gint8,
124
+ :guint8,
125
+ :gint16,
126
+ :guint16,
127
+ :gint32,
128
+ :guint32,
129
+ :gint64,
130
+ :guint64,
131
+ :gfloat,
132
+ :gdouble,
133
+ :GType,
134
+ :utf8,
135
+ :filename,
136
+ :array,
137
+ :interface,
138
+ :glist,
139
+ :gslist,
140
+ :ghash,
141
+ :error,
142
+ :gunichar
143
+ ]
144
+
135
145
  attach_function :g_type_tag_to_string, [:ITypeTag], :string
136
146
 
147
+ # ITypeInfo
137
148
  enum :IArrayType, [
138
149
  :c,
139
150
  :array,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
3
+ require "ffi"
4
4
 
5
5
  module GObjectIntrospection
6
6
  # Represents a null-terminated array of strings.
@@ -1,26 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-gobject_introspection/gobject_type_init'
3
+ require "ffi-gobject_introspection/gobject_type_init"
4
4
  GObjectIntrospection::GObjectTypeInit.type_init
5
5
 
6
- require 'ffi-gobject_introspection/i_base_info'
7
- require 'ffi-gobject_introspection/i_callable_info'
8
- require 'ffi-gobject_introspection/i_callback_info'
9
- require 'ffi-gobject_introspection/i_function_info'
10
- require 'ffi-gobject_introspection/i_constant_info'
11
- require 'ffi-gobject_introspection/i_field_info'
12
- require 'ffi-gobject_introspection/i_registered_type_info'
13
- require 'ffi-gobject_introspection/i_interface_info'
14
- require 'ffi-gobject_introspection/i_property_info'
15
- require 'ffi-gobject_introspection/i_vfunc_info'
16
- require 'ffi-gobject_introspection/i_signal_info'
17
- require 'ffi-gobject_introspection/i_object_info'
18
- require 'ffi-gobject_introspection/i_struct_info'
19
- require 'ffi-gobject_introspection/i_value_info'
20
- require 'ffi-gobject_introspection/i_union_info'
21
- require 'ffi-gobject_introspection/i_enum_info'
22
- require 'ffi-gobject_introspection/i_flags_info'
23
- require 'ffi-gobject_introspection/i_unresolved_info'
6
+ require "ffi-gobject_introspection/i_base_info"
7
+ require "ffi-gobject_introspection/i_callable_info"
8
+ require "ffi-gobject_introspection/i_callback_info"
9
+ require "ffi-gobject_introspection/i_function_info"
10
+ require "ffi-gobject_introspection/i_constant_info"
11
+ require "ffi-gobject_introspection/i_field_info"
12
+ require "ffi-gobject_introspection/i_registered_type_info"
13
+ require "ffi-gobject_introspection/i_interface_info"
14
+ require "ffi-gobject_introspection/i_property_info"
15
+ require "ffi-gobject_introspection/i_vfunc_info"
16
+ require "ffi-gobject_introspection/i_signal_info"
17
+ require "ffi-gobject_introspection/i_object_info"
18
+ require "ffi-gobject_introspection/i_struct_info"
19
+ require "ffi-gobject_introspection/i_value_info"
20
+ require "ffi-gobject_introspection/i_union_info"
21
+ require "ffi-gobject_introspection/i_enum_info"
22
+ require "ffi-gobject_introspection/i_flags_info"
23
+ require "ffi-gobject_introspection/i_unresolved_info"
24
24
 
25
25
  module GObjectIntrospection
26
26
  # Map info type to class. Default is IBaseInfo.
@@ -49,4 +49,4 @@ module GObjectIntrospection
49
49
  }.freeze
50
50
  end
51
51
 
52
- require 'ffi-gobject_introspection/i_repository'
52
+ require "ffi-gobject_introspection/i_repository"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/lib_c'
3
+ require "gir_ffi/lib_c"
4
4
 
5
5
  module GirFFI
6
6
  # Helper module for alloction-related functionality.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/allocation_helper'
4
- require 'gir_ffi/builder'
5
- require 'gir_ffi/glib_error'
6
- require 'gir_ffi/object_store'
3
+ require "gir_ffi/allocation_helper"
4
+ require "gir_ffi/builder"
5
+ require "gir_ffi/glib_error"
6
+ require "gir_ffi/object_store"
7
7
 
8
8
  module GirFFI
9
9
  # Helper module containing methods used during argument conversion in
@@ -1,29 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GirFFI
4
- # The InOutPointer class handles conversion between ruby types and
5
- # pointers for arguments with direction :inout and :out.
6
- #
7
- class InOutPointer < FFI::Pointer
4
+ # The ArrayElementConvertor class handles conversion from C array elements to
5
+ # ruby values
6
+ class ArrayElementConvertor
8
7
  attr_reader :value_type
8
+ attr_reader :pointer
9
9
 
10
10
  def initialize(type, ptr)
11
11
  @value_type = type
12
- super ptr
12
+ @pointer = ptr
13
13
  end
14
14
 
15
- def to_value
16
- case value_ffi_type
17
- when Module
18
- value_ffi_type.get_value_from_pointer(self, 0)
19
- when Symbol
20
- send("get_#{value_ffi_type}", 0)
21
- else
22
- raise NotImplementedError
23
- end
24
- end
25
-
26
- # Convert more fully to a ruby value than #to_value
27
15
  def to_ruby_value
28
16
  bare_value = to_value
29
17
  case value_type
@@ -38,14 +26,19 @@ module GirFFI
38
26
  end
39
27
  end
40
28
 
41
- def self.allocate_new(type)
42
- ffi_type = TypeMap.type_specification_to_ffi_type type
43
- ptr = FFI::MemoryPointer.new(ffi_type)
44
- new type, ptr
45
- end
46
-
47
29
  private
48
30
 
31
+ def to_value
32
+ case value_ffi_type
33
+ when Module
34
+ value_ffi_type.get_value_from_pointer(pointer, 0)
35
+ when Symbol
36
+ pointer.send("get_#{value_ffi_type}", 0)
37
+ else
38
+ raise NotImplementedError
39
+ end
40
+ end
41
+
49
42
  def value_ffi_type
50
43
  @value_ffi_type ||= TypeMap.type_specification_to_ffi_type value_type
51
44
  end
@@ -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,
@@ -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
@@ -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