gir_ffi 0.14.1 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builders/object_builder'
4
- require 'gir_ffi/g_type'
3
+ require "gir_ffi/builders/object_builder"
4
+ require "gir_ffi/g_type"
5
5
 
6
6
  module GirFFI
7
7
  module Builders
@@ -12,6 +12,7 @@ module GirFFI
12
12
  end
13
13
 
14
14
  def setup_class
15
+ check_ancestry
15
16
  setup_layout
16
17
  register_type
17
18
  setup_constants
@@ -26,6 +27,12 @@ module GirFFI
26
27
 
27
28
  private
28
29
 
30
+ def check_ancestry
31
+ unless klass < GirFFI::ObjectBase
32
+ raise ArgumentError, "#{klass} is not a GObject class"
33
+ end
34
+ end
35
+
29
36
  def register_type
30
37
  @gtype = GObject.type_register_static(parent_gtype.to_i,
31
38
  info.g_name,
@@ -98,7 +105,7 @@ module GirFFI
98
105
  end
99
106
 
100
107
  def class_size
101
- parent_gtype.class_size + interface_gtypes.map(&:class_size).inject(0, :+)
108
+ parent_gtype.class_size + interface_gtypes.map(&:class_size).sum
102
109
  end
103
110
 
104
111
  def setup_properties(object_class_ptr)
@@ -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
@@ -9,7 +9,7 @@ module GirFFI
9
9
  class VFuncArgumentBuilder < CallbackArgumentBuilder
10
10
  def pre_conversion
11
11
  if ingoing_ref_needed?
12
- super + ["#{pre_converted_name}.ref"]
12
+ super + ["#{pre_converted_name}&.ref"]
13
13
  else
14
14
  super
15
15
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/return_value_info'
4
- require 'gir_ffi/builders/base_type_builder'
5
- require 'gir_ffi/builders/mapping_method_builder'
6
- require 'gir_ffi/receiver_type_info'
7
- require 'gir_ffi/receiver_argument_info'
8
- require 'gir_ffi/callback_base'
3
+ require "gir_ffi/return_value_info"
4
+ require "gir_ffi/builders/base_type_builder"
5
+ require "gir_ffi/builders/mapping_method_builder"
6
+ require "gir_ffi/receiver_type_info"
7
+ require "gir_ffi/receiver_argument_info"
8
+ require "gir_ffi/callback_base"
9
9
 
10
10
  module GirFFI
11
11
  module Builders
@@ -42,8 +42,8 @@ module GirFFI
42
42
  end
43
43
 
44
44
  def argument_ffi_types
45
- @argument_ffi_types ||= info.argument_ffi_types.
46
- unshift(receiver_type_info.to_callback_ffi_type)
45
+ @argument_ffi_types ||= info.argument_ffi_types
46
+ .unshift(receiver_type_info.to_callback_ffi_type)
47
47
  end
48
48
 
49
49
  def return_ffi_type
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/builders/field_builder'
3
+ require "gir_ffi/builders/field_builder"
4
4
 
5
5
  module GirFFI
6
6
  module Builders
@@ -35,7 +35,7 @@ module GirFFI
35
35
  end
36
36
 
37
37
  def base_layout_specification
38
- fields.map(&:layout_specification).flatten(1)
38
+ fields.flat_map(&:layout_specification)
39
39
  end
40
40
 
41
41
  def klass
@@ -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 callbacks and vfuncs.
@@ -35,14 +35,14 @@ module GirFFI
35
35
  from_native ptr, nil
36
36
  end
37
37
 
38
- CALLBACKS = {}
38
+ CALLBACKS = Set.new
39
39
 
40
40
  def self.store_callback(prc)
41
- CALLBACKS[prc.object_id] = prc
41
+ CALLBACKS.add prc
42
42
  end
43
43
 
44
44
  def self.drop_callback(prc)
45
- CALLBACKS.delete prc.object_id
45
+ CALLBACKS.delete prc
46
46
  end
47
47
 
48
48
  # Create Callback from a Proc. Makes sure arguments are properly wrapped,
@@ -57,11 +57,9 @@ module GirFFI
57
57
  return unless prc
58
58
 
59
59
  new do |*args|
60
- begin
61
- call_with_argument_mapping(prc, *args)
62
- rescue StandardError => e
63
- GLib::MainLoop.handle_exception e
64
- end
60
+ call_with_argument_mapping(prc, *args)
61
+ rescue StandardError => e
62
+ GLib::MainLoop.handle_exception e
65
63
  end
66
64
  end
67
65
 
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'gir_ffi/registered_type_base'
5
- require 'gir_ffi/builders/null_class_builder'
6
- require 'gir_ffi/method_setup'
7
- require 'gir_ffi/instance_method_setup'
3
+ require "forwardable"
4
+ require "gir_ffi/registered_type_base"
5
+ require "gir_ffi/builders/null_class_builder"
6
+ require "gir_ffi/method_setup"
7
+ require "gir_ffi/instance_method_setup"
8
8
 
9
9
  module GirFFI
10
10
  # Base class for all generated classes and structs. Contains code for dealing
@@ -18,6 +18,7 @@ module GirFFI
18
18
  GIR_FFI_BUILDER = Builders::NullClassBuilder.new
19
19
 
20
20
  attr_reader :struct
21
+
21
22
  def_delegators :@struct, :to_ptr
22
23
 
23
24
  def setup_and_call(method, arguments, &block)
@@ -1,25 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
4
- require 'ffi/bit_masks'
5
-
6
- require 'ffi-gobject_introspection'
7
-
8
- require 'gir_ffi-base'
9
-
10
- require 'gir_ffi/ffi_ext'
11
- require 'gir_ffi/class_base'
12
- require 'gir_ffi/type_map'
13
- require 'gir_ffi/info_ext'
14
- require 'gir_ffi/in_pointer'
15
- require 'gir_ffi/in_out_pointer'
16
- require 'gir_ffi/sized_array'
17
- require 'gir_ffi/zero_terminated'
18
- require 'gir_ffi/arg_helper'
19
- require 'gir_ffi/builder'
20
- require 'gir_ffi/user_defined_object_info'
21
- require 'gir_ffi/builders/user_defined_builder'
22
- require 'gir_ffi/version'
3
+ require "ffi"
4
+ require "ffi/bit_masks"
5
+
6
+ require "ffi-gobject_introspection"
7
+
8
+ require "gir_ffi-base"
9
+
10
+ require "gir_ffi/ffi_ext"
11
+ require "gir_ffi/class_base"
12
+ require "gir_ffi/type_map"
13
+ require "gir_ffi/info_ext"
14
+ require "gir_ffi/in_pointer"
15
+ require "gir_ffi/sized_array"
16
+ require "gir_ffi/zero_terminated"
17
+ require "gir_ffi/arg_helper"
18
+ require "gir_ffi/builder"
19
+ require "gir_ffi/user_defined_object_info"
20
+ require "gir_ffi/builders/user_defined_builder"
21
+ require "gir_ffi/version"
23
22
 
24
23
  module GirFFI
25
24
  # Core GirFFI interface.
@@ -29,8 +28,23 @@ module GirFFI
29
28
  Builder.build_module namespace, version
30
29
  end
31
30
 
32
- def define_type(klass, &block)
33
- info = UserDefinedObjectInfo.new(klass, &block)
31
+ def define_type(klass)
32
+ unless klass < GirFFI::ObjectBase
33
+ raise ArgumentError, "#{klass} is not a GObject class"
34
+ end
35
+
36
+ klass.prepare_user_defined_class
37
+ info = klass.gir_info
38
+
39
+ unless info.is_a? UserDefinedObjectInfo
40
+ raise ArgumentError, "#{klass} is not a user-defined class"
41
+ end
42
+
43
+ if block_given?
44
+ warn "Using define_type with a block is deprecated." \
45
+ " Call the relevant functions inside the class definition instead."
46
+ yield info
47
+ end
34
48
  Builders::UserDefinedBuilder.new(info).build_class
35
49
 
36
50
  klass.gtype
@@ -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,
@@ -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"
@@ -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,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.
@@ -4,8 +4,7 @@ module GirFFI
4
4
  # Exception class to be raised whenever an error is signaled through
5
5
  # GLib::Error.
6
6
  class GLibError < RuntimeError
7
- attr_reader :domain_quark
8
- attr_reader :code
7
+ attr_reader :domain_quark, :code
9
8
 
10
9
  def initialize(g_error)
11
10
  @domain_quark = g_error.domain
@@ -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,12 +53,22 @@ 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
57
67
  from_utf8_array ary
58
68
  when :gboolean
59
69
  from_boolean_array ary
70
+ when :guint8
71
+ from_char_array ary
60
72
  else
61
73
  from_basic_type_array type, ary
62
74
  end
@@ -82,6 +94,11 @@ module GirFFI
82
94
  from_basic_type_array :int, ary.map { |val| val ? 1 : 0 }
83
95
  end
84
96
 
97
+ def from_char_array(ary)
98
+ ary = ary.bytes if ary.is_a? String
99
+ from_basic_type_array :int8, ary
100
+ end
101
+
85
102
  def from_pointer_array(type, ary)
86
103
  from_basic_type_array :pointer, ary.map { |elem| from type, elem }
87
104
  end
@@ -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"
@@ -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