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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/enum_like_base'
3
+ require "gir_ffi/enum_like_base"
4
4
 
5
5
  module GirFFI
6
6
  # Base module for enums.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/registered_type_base'
4
- require 'gir_ffi/method_setup'
3
+ require "gir_ffi/registered_type_base"
4
+ require "gir_ffi/method_setup"
5
5
 
6
6
  module GirFFI
7
7
  # Base module for enums and flags.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/error_type_info'
3
+ require "gir_ffi/error_type_info"
4
4
 
5
5
  module GirFFI
6
6
  # Represents an error argument with the same interface as IArgInfo
@@ -14,7 +14,7 @@ module GirFFI
14
14
  end
15
15
 
16
16
  def name
17
- '_error'
17
+ "_error"
18
18
  end
19
19
  end
20
20
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/info_ext/i_type_info'
3
+ require "gir_ffi/info_ext/i_type_info"
4
4
 
5
5
  module GirFFI
6
6
  # Represents the type of an error argument for callbacks and functions,
@@ -17,7 +17,7 @@ module GirFFI
17
17
  end
18
18
 
19
19
  def to_utf8
20
- null? ? nil : read_string.force_encoding('utf-8')
20
+ null? ? nil : read_string.force_encoding("utf-8")
21
21
  end
22
22
  end
23
23
  end
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/ffi_ext/pointer'
3
+ require "gir_ffi/ffi_ext/pointer"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/enum_like_base'
3
+ require "gir_ffi/enum_like_base"
4
4
 
5
5
  module GirFFI
6
6
  # Base module for flags.
@@ -29,6 +29,8 @@ module GirFFI
29
29
  case type
30
30
  when :utf8, :filename
31
31
  from_utf8 val
32
+ when :gfloat, :gdouble, :gint64, :guint64
33
+ from_basic_type type, val
32
34
  when :gint32, :guint32, :gint8, :GType
33
35
  FFI::Pointer.new val
34
36
  when GirFFI::EnumLikeBase
@@ -51,6 +53,14 @@ module GirFFI
51
53
  class << self
52
54
  private
53
55
 
56
+ def from_basic_type(type, value)
57
+ ffi_type = TypeMap.type_specification_to_ffi_type type
58
+ FFI::MemoryPointer.new(ffi_type).tap do |block|
59
+ block.autorelease = false
60
+ block.send "put_#{ffi_type}", 0, value
61
+ end
62
+ end
63
+
54
64
  def from_simple_type_array(type, ary)
55
65
  case type
56
66
  when :utf8, :filename
@@ -13,6 +13,6 @@ module GirFFI
13
13
  end
14
14
  end
15
15
 
16
- GObjectIntrospection::ICallbackInfo.send :include, GirFFI::InfoExt::FullTypeName
17
- GObjectIntrospection::IConstantInfo.send :include, GirFFI::InfoExt::FullTypeName
18
- GObjectIntrospection::IRegisteredTypeInfo.send :include, GirFFI::InfoExt::FullTypeName
16
+ GObjectIntrospection::ICallbackInfo.include GirFFI::InfoExt::FullTypeName
17
+ GObjectIntrospection::IConstantInfo.include GirFFI::InfoExt::FullTypeName
18
+ GObjectIntrospection::IRegisteredTypeInfo.include GirFFI::InfoExt::FullTypeName
@@ -19,4 +19,4 @@ module GirFFI
19
19
  end
20
20
  end
21
21
 
22
- GObjectIntrospection::IArgInfo.send :include, GirFFI::InfoExt::IArgInfo
22
+ GObjectIntrospection::IArgInfo.include GirFFI::InfoExt::IArgInfo
@@ -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
@@ -6,7 +6,7 @@ module GirFFI
6
6
  module IValueInfo
7
7
  def constant_name
8
8
  upcased_name = name.upcase
9
- if upcased_name =~ /^[0-9]/
9
+ if /^[0-9]/.match?(upcased_name)
10
10
  "VALUE_#{upcased_name}"
11
11
  else
12
12
  upcased_name
@@ -22,4 +22,4 @@ module GirFFI
22
22
  end
23
23
  end
24
24
 
25
- GObjectIntrospection::IValueInfo.send :include, GirFFI::InfoExt::IValueInfo
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,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/info_ext/full_type_name'
4
- require 'gir_ffi/info_ext/i_arg_info'
5
- require 'gir_ffi/info_ext/i_callable_info'
6
- require 'gir_ffi/info_ext/i_callback_info'
7
- require 'gir_ffi/info_ext/i_field_info'
8
- require 'gir_ffi/info_ext/i_function_info'
9
- require 'gir_ffi/info_ext/i_property_info'
10
- require 'gir_ffi/info_ext/i_registered_type_info'
11
- require 'gir_ffi/info_ext/i_signal_info'
12
- require 'gir_ffi/info_ext/i_type_info'
13
- require 'gir_ffi/info_ext/i_unresolved_info'
14
- require 'gir_ffi/info_ext/i_value_info'
15
- require 'gir_ffi/info_ext/i_vfunc_info'
16
- require 'gir_ffi/info_ext/safe_constant_name'
17
- require 'gir_ffi/info_ext/safe_function_name'
3
+ require "gir_ffi/info_ext/full_type_name"
4
+ require "gir_ffi/info_ext/i_arg_info"
5
+ require "gir_ffi/info_ext/i_callable_info"
6
+ require "gir_ffi/info_ext/i_callback_info"
7
+ require "gir_ffi/info_ext/i_field_info"
8
+ require "gir_ffi/info_ext/i_function_info"
9
+ require "gir_ffi/info_ext/i_property_info"
10
+ require "gir_ffi/info_ext/i_registered_type_info"
11
+ require "gir_ffi/info_ext/i_signal_info"
12
+ require "gir_ffi/info_ext/i_type_info"
13
+ require "gir_ffi/info_ext/i_unresolved_info"
14
+ require "gir_ffi/info_ext/i_value_info"
15
+ require "gir_ffi/info_ext/i_vfunc_info"
16
+ require "gir_ffi/info_ext/safe_constant_name"
17
+ require "gir_ffi/info_ext/safe_function_name"