gir_ffi 0.7.10 → 0.8.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 (150) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +6 -0
  3. data/Gemfile +3 -1
  4. data/README.md +5 -2
  5. data/lib/ffi-glib.rb +1 -0
  6. data/lib/ffi-glib/array.rb +6 -6
  7. data/lib/ffi-glib/array_methods.rb +1 -1
  8. data/lib/ffi-glib/byte_array.rb +1 -1
  9. data/lib/ffi-glib/bytes.rb +3 -3
  10. data/lib/ffi-glib/container_class_methods.rb +2 -2
  11. data/lib/ffi-glib/error.rb +2 -2
  12. data/lib/ffi-glib/hash_table.rb +9 -9
  13. data/lib/ffi-glib/iconv.rb +1 -1
  14. data/lib/ffi-glib/list.rb +2 -2
  15. data/lib/ffi-glib/list_methods.rb +8 -7
  16. data/lib/ffi-glib/main_loop.rb +1 -1
  17. data/lib/ffi-glib/ptr_array.rb +7 -7
  18. data/lib/ffi-glib/s_list.rb +2 -2
  19. data/lib/ffi-glib/strv.rb +3 -3
  20. data/lib/ffi-glib/variant.rb +9 -2
  21. data/lib/ffi-gobject.rb +10 -10
  22. data/lib/ffi-gobject/closure.rb +1 -1
  23. data/lib/ffi-gobject/initially_unowned.rb +4 -3
  24. data/lib/ffi-gobject/object.rb +19 -19
  25. data/lib/ffi-gobject/object_class.rb +2 -2
  26. data/lib/ffi-gobject/ruby_closure.rb +5 -4
  27. data/lib/ffi-gobject/value.rb +15 -20
  28. data/lib/ffi-gobject_introspection/g_error.rb +1 -1
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +6 -6
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_enum_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +8 -8
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +9 -9
  34. data/lib/ffi-gobject_introspection/i_repository.rb +13 -13
  35. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -2
  36. data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
  37. data/lib/ffi-gobject_introspection/i_union_info.rb +3 -3
  38. data/lib/ffi-gobject_introspection/lib.rb +4 -4
  39. data/lib/gir_ffi-base/glib/boolean.rb +4 -4
  40. data/lib/gir_ffi-base/glib/strv.rb +2 -2
  41. data/lib/gir_ffi/allocation_helper.rb +1 -1
  42. data/lib/gir_ffi/arg_helper.rb +8 -8
  43. data/lib/gir_ffi/boxed_base.rb +5 -9
  44. data/lib/gir_ffi/builder.rb +4 -4
  45. data/lib/gir_ffi/builder_helper.rb +3 -3
  46. data/lib/gir_ffi/builders/argument_builder_collection.rb +1 -1
  47. data/lib/gir_ffi/builders/base_argument_builder.rb +3 -3
  48. data/lib/gir_ffi/builders/base_method_builder.rb +71 -0
  49. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  50. data/lib/gir_ffi/builders/boxed_builder.rb +3 -2
  51. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +1 -1
  52. data/lib/gir_ffi/builders/closure_convertor.rb +1 -1
  53. data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +1 -1
  54. data/lib/gir_ffi/builders/constructor_builder.rb +52 -0
  55. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  56. data/lib/gir_ffi/builders/field_builder.rb +3 -2
  57. data/lib/gir_ffi/builders/function_builder.rb +9 -50
  58. data/lib/gir_ffi/builders/initializer_builder.rb +32 -0
  59. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +16 -0
  60. data/lib/gir_ffi/builders/mapping_method_builder.rb +7 -5
  61. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -3
  62. data/lib/gir_ffi/builders/method_template.rb +1 -1
  63. data/lib/gir_ffi/builders/module_builder.rb +8 -7
  64. data/lib/gir_ffi/builders/null_convertor.rb +1 -1
  65. data/lib/gir_ffi/builders/null_return_value_builder.rb +21 -0
  66. data/lib/gir_ffi/builders/object_builder.rb +3 -3
  67. data/lib/gir_ffi/builders/property_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/registered_type_builder.rb +31 -15
  69. data/lib/gir_ffi/builders/return_value_builder.rb +1 -14
  70. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +2 -2
  71. data/lib/gir_ffi/builders/signal_closure_builder.rb +1 -1
  72. data/lib/gir_ffi/builders/type_builder.rb +2 -2
  73. data/lib/gir_ffi/builders/unintrospectable_builder.rb +1 -1
  74. data/lib/gir_ffi/builders/user_defined_builder.rb +11 -11
  75. data/lib/gir_ffi/builders/vfunc_builder.rb +1 -1
  76. data/lib/gir_ffi/callback_base.rb +8 -13
  77. data/lib/gir_ffi/class_base.rb +41 -45
  78. data/lib/gir_ffi/core.rb +2 -2
  79. data/lib/gir_ffi/enum_base.rb +9 -14
  80. data/lib/gir_ffi/field_argument_info.rb +1 -1
  81. data/lib/gir_ffi/g_type.rb +1 -1
  82. data/lib/gir_ffi/glib_error.rb +1 -1
  83. data/lib/gir_ffi/in_out_pointer.rb +4 -4
  84. data/lib/gir_ffi/in_pointer.rb +12 -12
  85. data/lib/gir_ffi/info_ext/i_arg_info.rb +0 -10
  86. data/lib/gir_ffi/info_ext/i_callback_info.rb +0 -5
  87. data/lib/gir_ffi/info_ext/i_property_info.rb +1 -1
  88. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -6
  89. data/lib/gir_ffi/info_ext/i_signal_info.rb +2 -2
  90. data/lib/gir_ffi/info_ext/i_type_info.rb +2 -17
  91. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +0 -5
  92. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  93. data/lib/gir_ffi/interface_base.rb +2 -7
  94. data/lib/gir_ffi/method_stubber.rb +1 -1
  95. data/lib/gir_ffi/module_base.rb +4 -7
  96. data/lib/gir_ffi/object_base.rb +4 -9
  97. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  98. data/lib/gir_ffi/receiver_type_info.rb +1 -1
  99. data/lib/gir_ffi/registered_type_base.rb +0 -5
  100. data/lib/gir_ffi/return_value_info.rb +1 -1
  101. data/lib/gir_ffi/sized_array.rb +10 -10
  102. data/lib/gir_ffi/type_map.rb +3 -3
  103. data/lib/gir_ffi/unintrospectable_type_info.rb +3 -1
  104. data/lib/gir_ffi/user_data_argument_info.rb +1 -1
  105. data/lib/gir_ffi/user_defined_property_info.rb +1 -1
  106. data/lib/gir_ffi/user_defined_type_info.rb +4 -4
  107. data/lib/gir_ffi/version.rb +1 -1
  108. data/lib/gir_ffi/vfunc_implementation.rb +1 -1
  109. data/lib/gir_ffi/zero_terminated.rb +6 -6
  110. data/test/base_test_helper.rb +13 -13
  111. data/test/ffi-gobject/object_test.rb +22 -1
  112. data/test/ffi-gobject/value_test.rb +24 -24
  113. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +4 -4
  114. data/test/ffi-gobject_introspection/i_type_info_test.rb +2 -2
  115. data/test/ffi-gobject_test.rb +2 -2
  116. data/test/gir_ffi/builders/argument_builder_test.rb +60 -60
  117. data/test/gir_ffi/builders/callback_argument_builder_test.rb +8 -8
  118. data/test/gir_ffi/builders/callback_builder_test.rb +4 -4
  119. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +8 -8
  120. data/test/gir_ffi/builders/constructor_builder_test.rb +34 -0
  121. data/test/gir_ffi/builders/function_builder_test.rb +8 -24
  122. data/test/gir_ffi/builders/initializer_builder_test.rb +36 -0
  123. data/test/gir_ffi/builders/interface_builder_test.rb +2 -2
  124. data/test/gir_ffi/builders/object_builder_test.rb +6 -18
  125. data/test/gir_ffi/builders/property_builder_test.rb +2 -2
  126. data/test/gir_ffi/builders/return_value_builder_test.rb +54 -79
  127. data/test/gir_ffi/builders/signal_closure_builder_test.rb +14 -14
  128. data/test/gir_ffi/builders/user_defined_builder_test.rb +8 -8
  129. data/test/gir_ffi/builders/vfunc_builder_test.rb +22 -22
  130. data/test/gir_ffi/class_base_test.rb +9 -7
  131. data/test/gir_ffi/in_pointer_test.rb +1 -1
  132. data/test/gir_ffi/info_ext/i_callable_info_test.rb +2 -2
  133. data/test/gir_ffi/info_ext/i_callback_info_test.rb +2 -2
  134. data/test/gir_ffi/info_ext/i_field_info_test.rb +2 -2
  135. data/test/gir_ffi/info_ext/i_function_info_test.rb +2 -2
  136. data/test/gir_ffi/info_ext/i_signal_info_test.rb +2 -2
  137. data/test/gir_ffi/info_ext/i_type_info_test.rb +18 -18
  138. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +2 -2
  139. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +2 -2
  140. data/test/gir_ffi/info_ext/safe_function_name_test.rb +2 -2
  141. data/test/gir_ffi/method_stubber_test.rb +6 -6
  142. data/test/gir_ffi/user_defined_type_info_test.rb +3 -3
  143. data/test/gir_ffi_test_helper.rb +12 -12
  144. data/test/integration/derived_classes_test.rb +7 -3
  145. data/test/integration/generated_gimarshallingtests_test.rb +10 -10
  146. data/test/integration/generated_regress_test.rb +11 -20
  147. data/test/introspection_test_helper.rb +1 -1
  148. data/test/minitest/stats_plugin.rb +3 -3
  149. metadata +9 -3
  150. data/lib/gir_ffi/builders/constructor_result_convertor.rb +0 -14
@@ -20,12 +20,12 @@ module GirFFI
20
20
  end
21
21
  end
22
22
 
23
- def find_signal signal_name
23
+ def find_signal(signal_name)
24
24
  seek_in_ancestor_infos { |info| info.find_signal signal_name } or
25
25
  raise "Signal #{signal_name} not found"
26
26
  end
27
27
 
28
- def find_property property_name
28
+ def find_property(property_name)
29
29
  seek_in_ancestor_infos { |info| info.find_property property_name } or
30
30
  raise "Property #{property_name} not found"
31
31
  end
@@ -99,7 +99,7 @@ module GirFFI
99
99
  end
100
100
  end
101
101
 
102
- def define_vfunc_invoker vfunc_name, invoker_name
102
+ def define_vfunc_invoker(vfunc_name, invoker_name)
103
103
  return if vfunc_name == invoker_name
104
104
  klass.class_eval "
105
105
  def #{vfunc_name} *args, &block
@@ -2,7 +2,7 @@ module GirFFI
2
2
  module Builders
3
3
  # Creates property getter and setter code for a given IPropertyInfo.
4
4
  class PropertyBuilder
5
- def initialize property_info
5
+ def initialize(property_info)
6
6
  @info = property_info
7
7
  end
8
8
 
@@ -1,6 +1,8 @@
1
1
  require 'gir_ffi/builders/base_type_builder'
2
2
  require 'gir_ffi/method_stubber'
3
- require 'gir_ffi/class_base'
3
+ require 'gir_ffi/builders/function_builder'
4
+ require 'gir_ffi/builders/constructor_builder'
5
+ require 'gir_ffi/builders/initializer_builder'
4
6
 
5
7
  module GirFFI
6
8
  module Builders
@@ -8,14 +10,16 @@ module GirFFI
8
10
  # of IRegisteredTypeInfo. These are types whose C representation is
9
11
  # complex, i.e., a struct or a union.
10
12
  class RegisteredTypeBuilder < BaseTypeBuilder
11
- def setup_method method
12
- go = info.find_method method
13
- attach_and_define_method method, go, meta_class
13
+ def setup_method(method)
14
+ method_info = info.find_method method
15
+ return unless method_info
16
+ attach_and_define_method method_info, meta_class
14
17
  end
15
18
 
16
- def setup_instance_method method
17
- go = info.find_instance_method method
18
- attach_and_define_method method, go, build_class
19
+ def setup_instance_method(method)
20
+ method_info = info.find_instance_method method
21
+ return unless method_info
22
+ attach_and_define_method method_info, build_class
19
23
  end
20
24
 
21
25
  def target_gtype
@@ -28,17 +32,29 @@ module GirFFI
28
32
  (class << build_class; self; end)
29
33
  end
30
34
 
31
- def function_definition go
32
- FunctionBuilder.new(go).generate
35
+ def attach_and_define_method(method_info, modul)
36
+ method = method_info.safe_name
37
+ attach_method method_info
38
+ remove_old_method method, modul
39
+ define_method method_info
40
+ method
41
+ end
42
+
43
+ def define_method(method_info)
44
+ if method_info.constructor?
45
+ build_class.class_eval InitializerBuilder.new(method_info).method_definition
46
+ build_class.class_eval ConstructorBuilder.new(method_info).method_definition
47
+ else
48
+ build_class.class_eval FunctionBuilder.new(method_info).method_definition
49
+ end
33
50
  end
34
51
 
35
- def attach_and_define_method method, go, modul
36
- return unless go
37
- method = go.safe_name
38
- Builder.attach_ffi_function lib, go
52
+ def remove_old_method(method, modul)
39
53
  modul.class_eval { remove_method method if method_defined? method }
40
- build_class.class_eval function_definition(go)
41
- method
54
+ end
55
+
56
+ def attach_method(method_info)
57
+ Builder.attach_ffi_function lib, method_info
42
58
  end
43
59
 
44
60
  def stub_methods
@@ -1,17 +1,11 @@
1
1
  require 'gir_ffi/builders/base_argument_builder'
2
2
  require 'gir_ffi/builders/c_to_ruby_convertor'
3
3
  require 'gir_ffi/builders/closure_convertor'
4
- require 'gir_ffi/builders/constructor_result_convertor'
5
4
 
6
5
  module GirFFI
7
6
  module Builders
8
7
  # Implements building post-processing statements for return values.
9
8
  class ReturnValueBuilder < BaseArgumentBuilder
10
- def initialize var_gen, arginfo, constructor_result = false
11
- super var_gen, arginfo
12
- @constructor_result = constructor_result
13
- end
14
-
15
9
  def relevant?
16
10
  !void_return_value? && !arginfo.skip?
17
11
  end
@@ -42,20 +36,13 @@ module GirFFI
42
36
 
43
37
  private
44
38
 
45
- def constructor_result?
46
- @constructor_result
47
- end
48
-
49
39
  def has_post_conversion?
50
- closure? || constructor_result? ||
51
- type_info.needs_c_to_ruby_conversion_for_functions?
40
+ closure? || type_info.needs_c_to_ruby_conversion_for_functions?
52
41
  end
53
42
 
54
43
  def post_convertor
55
44
  @post_convertor ||= if closure?
56
45
  ClosureConvertor.new(capture_variable_name)
57
- elsif constructor_result?
58
- ConstructorResultConvertor.new(capture_variable_name)
59
46
  else
60
47
  CToRubyConvertor.new(type_info,
61
48
  capture_variable_name,
@@ -3,7 +3,7 @@ module GirFFI
3
3
  # Builder that generates code to convert values from Ruby to C. Used by
4
4
  # argument builders.
5
5
  class RubyToCConvertor
6
- def initialize type_info, argument_name
6
+ def initialize(type_info, argument_name)
7
7
  @type_info = type_info
8
8
  @argument_name = argument_name
9
9
  end
@@ -13,7 +13,7 @@ module GirFFI
13
13
  "#{@type_info.argument_class_name}.from(#{args})"
14
14
  end
15
15
 
16
- def conversion_arguments name
16
+ def conversion_arguments(name)
17
17
  @type_info.extra_conversion_arguments.map(&:inspect).push(name).join(', ')
18
18
  end
19
19
  end
@@ -11,7 +11,7 @@ module GirFFI
11
11
  klass.class_eval marshaller_definition
12
12
  end
13
13
 
14
- def setup_method _method
14
+ def setup_method(_method)
15
15
  nil
16
16
  end
17
17
 
@@ -28,12 +28,12 @@ module GirFFI
28
28
  unintrospectable: UnintrospectableBuilder
29
29
  }
30
30
 
31
- def self.build info
31
+ def self.build(info)
32
32
  builder_for(info).build_class
33
33
  end
34
34
 
35
35
  # TODO: Pull up to include :function and :module
36
- def self.builder_for info
36
+ def self.builder_for(info)
37
37
  TYPE_MAP[info.info_type].new(info)
38
38
  end
39
39
  end
@@ -16,7 +16,7 @@ module GirFFI
16
16
  setup_interfaces
17
17
  end
18
18
 
19
- def setup_instance_method _method
19
+ def setup_instance_method(_method)
20
20
  false
21
21
  end
22
22
 
@@ -5,7 +5,7 @@ module GirFFI
5
5
  module Builders
6
6
  # Implements the creation of GObject subclasses from Ruby.
7
7
  class UserDefinedBuilder < ObjectBuilder
8
- def initialize info
8
+ def initialize(info)
9
9
  @info = info
10
10
  end
11
11
 
@@ -62,7 +62,7 @@ module GirFFI
62
62
  end
63
63
  end
64
64
 
65
- def gobject_interface_info interface
65
+ def gobject_interface_info(interface)
66
66
  GObject::InterfaceInfo.new.tap do |interface_info|
67
67
  interface_info.interface_init = interface_init_proc(interface)
68
68
  end
@@ -75,7 +75,7 @@ module GirFFI
75
75
  end
76
76
  end
77
77
 
78
- def interface_init_proc interface
78
+ def interface_init_proc(interface)
79
79
  proc do |interface_ptr, _data|
80
80
  setup_interface_vfuncs interface, interface_ptr
81
81
  end
@@ -93,7 +93,7 @@ module GirFFI
93
93
  parent_gtype.class_size + interface_gtypes.map(&:class_size).inject(0, :+)
94
94
  end
95
95
 
96
- def setup_properties object_class_ptr
96
+ def setup_properties(object_class_ptr)
97
97
  object_class = GObject::ObjectClass.wrap object_class_ptr
98
98
 
99
99
  object_class.get_property = property_getter
@@ -116,7 +116,7 @@ module GirFFI
116
116
  end
117
117
  end
118
118
 
119
- def setup_vfuncs object_class_ptr
119
+ def setup_vfuncs(object_class_ptr)
120
120
  super_class_struct =
121
121
  superclass.gir_ffi_builder.object_class_struct::Struct.new(object_class_ptr)
122
122
 
@@ -125,7 +125,7 @@ module GirFFI
125
125
  end
126
126
  end
127
127
 
128
- def setup_interface_vfuncs interface, interface_ptr
128
+ def setup_interface_vfuncs(interface, interface_ptr)
129
129
  interface_builder = interface.gir_ffi_builder
130
130
 
131
131
  interface_struct = interface_builder.interface_struct::Struct.new(interface_ptr)
@@ -136,7 +136,7 @@ module GirFFI
136
136
  end
137
137
  end
138
138
 
139
- def setup_vfunc super_class_struct, impl
139
+ def setup_vfunc(super_class_struct, impl)
140
140
  vfunc_name = impl.name
141
141
  vfunc_info = parent_info.find_vfunc vfunc_name.to_s
142
142
 
@@ -145,7 +145,7 @@ module GirFFI
145
145
  end
146
146
  end
147
147
 
148
- def setup_interface_vfunc interface_info, interface_struct, impl
148
+ def setup_interface_vfunc(interface_info, interface_struct, impl)
149
149
  vfunc_name = impl.name
150
150
  vfunc_info = interface_info.find_vfunc vfunc_name.to_s
151
151
 
@@ -154,7 +154,7 @@ module GirFFI
154
154
  end
155
155
  end
156
156
 
157
- def install_vfunc container_struct, vfunc_name, vfunc_info, implementation
157
+ def install_vfunc(container_struct, vfunc_name, vfunc_info, implementation)
158
158
  vfunc = VFuncBuilder.new(vfunc_info).build_class
159
159
  container_struct[vfunc_name] = vfunc.from implementation
160
160
  end
@@ -180,7 +180,7 @@ module GirFFI
180
180
  end
181
181
  end
182
182
 
183
- def setup_accessors_for_param_info pinfo
183
+ def setup_accessors_for_param_info(pinfo)
184
184
  field_name = pinfo.name
185
185
  code = <<-CODE
186
186
  def #{field_name}
@@ -194,7 +194,7 @@ module GirFFI
194
194
  klass.class_eval code
195
195
  end
196
196
 
197
- def method_introspection_data _method
197
+ def method_introspection_data(_method)
198
198
  nil
199
199
  end
200
200
 
@@ -49,7 +49,7 @@ module GirFFI
49
49
 
50
50
  def argument_ffi_types
51
51
  @argument_ffi_types ||= info.argument_ffi_types.
52
- unshift(receiver_type_info.to_callback_ffitype)
52
+ unshift(receiver_type_info.to_callback_ffi_type)
53
53
  end
54
54
 
55
55
  def return_ffi_type
@@ -12,13 +12,13 @@ module GirFFI
12
12
  FFI::Type::POINTER
13
13
  end
14
14
 
15
- def self.from_native value, _context
15
+ def self.from_native(value, _context)
16
16
  return nil if !value || value.null?
17
17
  FFI::Function.new(gir_ffi_builder.return_ffi_type,
18
18
  gir_ffi_builder.argument_ffi_types, value)
19
19
  end
20
20
 
21
- def self.to_native value, _context
21
+ def self.to_native(value, _context)
22
22
  case value
23
23
  when CallbackBase
24
24
  value.to_native
@@ -27,25 +27,25 @@ module GirFFI
27
27
  end
28
28
  end
29
29
 
30
- def self.wrap ptr
30
+ def self.wrap(ptr)
31
31
  from_native ptr, nil
32
32
  end
33
33
 
34
34
  CALLBACKS = []
35
35
 
36
- def self.store_callback prc
36
+ def self.store_callback(prc)
37
37
  CALLBACKS << prc
38
38
  end
39
39
 
40
40
  # Create Callback from a Proc. Makes sure arguments are properly wrapped,
41
41
  # and the callback is stored to prevent garbage collection.
42
- def self.from prc
42
+ def self.from(prc)
43
43
  wrap_in_callback_args_mapper(prc).tap do |cb|
44
44
  store_callback cb
45
45
  end
46
46
  end
47
47
 
48
- def self.wrap_in_callback_args_mapper prc
48
+ def self.wrap_in_callback_args_mapper(prc)
49
49
  return unless prc
50
50
 
51
51
  new do |*args|
@@ -53,11 +53,6 @@ module GirFFI
53
53
  end
54
54
  end
55
55
 
56
- # @deprecated Use .to_ffi_type instead. Will be removed in 0.8.0.
57
- def self.to_ffitype
58
- self
59
- end
60
-
61
56
  def self.to_ffi_type
62
57
  self
63
58
  end
@@ -70,11 +65,11 @@ module GirFFI
70
65
  end
71
66
  end
72
67
 
73
- def self.copy_value_to_pointer value, pointer
68
+ def self.copy_value_to_pointer(value, pointer)
74
69
  pointer.put_pointer 0, to_native(value, nil)
75
70
  end
76
71
 
77
- def self.get_value_from_pointer pointer
72
+ def self.get_value_from_pointer(pointer)
78
73
  from_native pointer.get_pointer(0), nil
79
74
  end
80
75
  end
@@ -11,7 +11,7 @@ module GirFFI
11
11
  attr_reader :struct
12
12
  def_delegators :@struct, :to_ptr
13
13
 
14
- def setup_and_call method, arguments, &block
14
+ def setup_and_call(method, arguments, &block)
15
15
  method_name = self.class.try_in_ancestors(:setup_instance_method, method.to_s)
16
16
 
17
17
  unless method_name
@@ -23,11 +23,11 @@ module GirFFI
23
23
 
24
24
  # NOTE: JRuby should fix FFI::MemoryPointer#== to return true for
25
25
  # equivalent FFI::Pointer. For now, user to_ptr.address
26
- def == other
26
+ def ==(other)
27
27
  other.class == self.class && to_ptr.address == other.to_ptr.address
28
28
  end
29
29
 
30
- def self.setup_and_call method, arguments, &block
30
+ def self.setup_and_call(method, arguments, &block)
31
31
  method_name = try_in_ancestors(:setup_method, method.to_s)
32
32
 
33
33
  unless method_name
@@ -37,7 +37,7 @@ module GirFFI
37
37
  send method_name, *arguments, &block
38
38
  end
39
39
 
40
- def self.try_in_ancestors method, *arguments
40
+ def self.try_in_ancestors(method, *arguments)
41
41
  ancestors.each do |klass|
42
42
  if klass.respond_to?(method)
43
43
  result = klass.send(method, *arguments)
@@ -50,60 +50,56 @@ module GirFFI
50
50
  self::Struct
51
51
  end
52
52
 
53
- class << self
54
- # @deprecated Use .to_ffi_type instead. Will be removed in 0.8.0.
55
- def to_ffitype
56
- to_ffi_type
57
- end
58
-
59
- def setup_method name
60
- gir_ffi_builder.setup_method name
61
- end
53
+ def self.setup_method(name)
54
+ gir_ffi_builder.setup_method name
55
+ end
62
56
 
63
- def setup_instance_method name
64
- gir_ffi_builder.setup_instance_method name
65
- end
57
+ def self.setup_instance_method(name)
58
+ gir_ffi_builder.setup_instance_method name
59
+ end
66
60
 
67
- alias_method :_real_new, :new
61
+ class << self
68
62
  undef new
63
+ end
69
64
 
70
- # Wrap the passed pointer in an instance of the current class, or a
71
- # descendant type if applicable.
72
- def wrap ptr
73
- direct_wrap ptr
74
- end
65
+ # Wrap the passed pointer in an instance of the current class, or a
66
+ # descendant type if applicable.
67
+ def self.wrap(ptr)
68
+ direct_wrap ptr
69
+ end
75
70
 
76
- # Wrap the passed pointer in an instance of the current class. Will not
77
- # do any casting to subtypes.
78
- def direct_wrap ptr
79
- return nil if !ptr || ptr.null?
80
- obj = _real_new
81
- obj.instance_variable_set :@struct, self::Struct.new(ptr)
82
- obj
83
- end
71
+ # Wrap the passed pointer in an instance of the current class. Will not
72
+ # do any casting to subtypes or additional processing.
73
+ def self.direct_wrap(ptr)
74
+ return nil if !ptr || ptr.null?
75
+ obj = allocate
76
+ obj.__send__ :assign_pointer, ptr
77
+ obj
78
+ end
84
79
 
85
- # Pass-through casting method. This may become a type checking
86
- # method. It is overridden by GValue to implement wrapping of plain
87
- # Ruby objects.
88
- def from val
89
- val
90
- end
80
+ # Pass-through casting method. This may become a type checking
81
+ # method. It is overridden by GValue to implement wrapping of plain
82
+ # Ruby objects.
83
+ def self.from(val)
84
+ val
91
85
  end
92
86
 
93
- #
94
- # Wraps a pointer retrieved from a constructor method. Here, it is simply
95
- # defined as a wrapper around direct_wrap, but, e.g., InitiallyUnowned
96
- # overrides it to sink the floating object.
87
+ private
88
+
89
+ # Stores a pointer created by a constructor function. Derived classes may
90
+ # perform additional processing. For example, InitiallyUnowned overrides it
91
+ # to sink the floating object.
97
92
  #
98
93
  # This method assumes the pointer will always be of the type corresponding
99
94
  # to the current class, and never of a subtype.
100
95
  #
101
96
  # @param ptr Pointer to the object's C structure
102
- #
103
- # @return An object of the current class wrapping the pointer
104
- #
105
- def self.constructor_wrap ptr
106
- direct_wrap ptr
97
+ def store_pointer(ptr)
98
+ assign_pointer ptr
99
+ end
100
+
101
+ def assign_pointer(ptr)
102
+ @struct = self.class::Struct.new(ptr)
107
103
  end
108
104
  end
109
105
  end