gir_ffi 0.15.9 → 0.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +42 -18
  3. data/README.md +20 -14
  4. data/lib/ffi-glib/array.rb +1 -1
  5. data/lib/ffi-glib/bytes.rb +0 -12
  6. data/lib/ffi-glib/main_loop.rb +3 -3
  7. data/lib/ffi-glib/ptr_array.rb +24 -15
  8. data/lib/ffi-glib/variant.rb +6 -8
  9. data/lib/ffi-gobject/object.rb +5 -15
  10. data/lib/ffi-gobject/object_class.rb +2 -10
  11. data/lib/ffi-gobject/value.rb +27 -27
  12. data/lib/ffi-gobject.rb +3 -17
  13. data/lib/ffi-gobject_introspection/i_constant_info.rb +10 -10
  14. data/lib/ffi-gobject_introspection/i_registered_type_info.rb +1 -1
  15. data/lib/ffi-gobject_introspection/lib.rb +11 -11
  16. data/lib/ffi-gobject_introspection.rb +19 -19
  17. data/lib/gir_ffi/builder.rb +1 -1
  18. data/lib/gir_ffi/builders/argument_builder_collection.rb +5 -5
  19. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  20. data/lib/gir_ffi/builders/base_method_builder.rb +23 -23
  21. data/lib/gir_ffi/builders/constructor_builder.rb +1 -1
  22. data/lib/gir_ffi/builders/function_builder.rb +1 -1
  23. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  24. data/lib/gir_ffi/builders/marshalling_method_builder.rb +3 -3
  25. data/lib/gir_ffi/builders/method_template.rb +2 -2
  26. data/lib/gir_ffi/builders/object_builder.rb +10 -12
  27. data/lib/gir_ffi/builders/pointer_value_convertor.rb +1 -1
  28. data/lib/gir_ffi/builders/type_builder.rb +9 -9
  29. data/lib/gir_ffi/builders/user_defined_builder.rb +24 -26
  30. data/lib/gir_ffi/class_base.rb +1 -3
  31. data/lib/gir_ffi/core.rb +0 -5
  32. data/lib/gir_ffi/ffi_ext/pointer.rb +22 -12
  33. data/lib/gir_ffi/in_pointer.rb +6 -6
  34. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -1
  35. data/lib/gir_ffi/info_ext/i_signal_info.rb +8 -6
  36. data/lib/gir_ffi/info_ext/i_type_info.rb +18 -24
  37. data/lib/gir_ffi/instance_method_setup.rb +3 -1
  38. data/lib/gir_ffi/method_stubber.rb +1 -1
  39. data/lib/gir_ffi/object_base.rb +5 -5
  40. data/lib/gir_ffi/struct_like_base.rb +0 -1
  41. data/lib/gir_ffi/type_map.rb +30 -30
  42. data/lib/gir_ffi/unintrospectable_type_info.rb +2 -2
  43. data/lib/gir_ffi/user_defined_object_info.rb +0 -3
  44. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  45. data/lib/gir_ffi/version.rb +1 -1
  46. data/lib/gir_ffi/zero_terminated.rb +1 -1
  47. data/lib/gir_ffi-base/gobject.rb +1 -1
  48. metadata +30 -18
@@ -28,11 +28,11 @@ module GirFFI
28
28
 
29
29
  def capture_variable_names
30
30
  @capture_variable_names ||=
31
- all_builders.map(&:capture_variable_name).compact
31
+ all_builders.filter_map(&:capture_variable_name)
32
32
  end
33
33
 
34
34
  def call_argument_names
35
- @call_argument_names ||= argument_builders.map(&:call_argument_name).compact
35
+ @call_argument_names ||= argument_builders.filter_map(&:call_argument_name)
36
36
  end
37
37
 
38
38
  def method_argument_names
@@ -50,7 +50,7 @@ module GirFFI
50
50
  end
51
51
 
52
52
  def return_value_names
53
- @return_value_names ||= all_builders.map(&:return_value_name).compact
53
+ @return_value_names ||= all_builders.filter_map(&:return_value_name)
54
54
  end
55
55
 
56
56
  def has_return_values?
@@ -149,7 +149,7 @@ module GirFFI
149
149
 
150
150
  def base_argument_names(arguments)
151
151
  required_found = false
152
- arguments.reverse.map do |it|
152
+ arguments.reverse.filter_map do |it|
153
153
  name = it.method_argument_name
154
154
  if it.allow_none? && !required_found
155
155
  "#{name} = nil"
@@ -157,7 +157,7 @@ module GirFFI
157
157
  required_found = true
158
158
  name
159
159
  end
160
- end.compact.reverse
160
+ end.reverse
161
161
  end
162
162
  end
163
163
  end
@@ -6,13 +6,13 @@ module GirFFI
6
6
  # classes are used by FunctionBuilder to create the code that
7
7
  # processes each argument before and after the actual function call.
8
8
  class BaseArgumentBuilder
9
- KEYWORDS = %w(
9
+ KEYWORDS = %w[
10
10
  alias and begin break case class def do
11
11
  else elsif end ensure false for if in
12
12
  module next nil not or redo rescue retry
13
13
  return self super then true undef unless
14
14
  until when while yield
15
- ).freeze
15
+ ].freeze
16
16
 
17
17
  attr_reader :arginfo, :related_callback_builder
18
18
 
@@ -21,14 +21,30 @@ module GirFFI
21
21
  @receiver_info = receiver_info
22
22
  end
23
23
 
24
- def variable_generator
25
- @variable_generator ||= VariableNameGenerator.new
26
- end
27
-
28
24
  def method_definition
29
25
  template.method_definition
30
26
  end
31
27
 
28
+ # Methods used by MethodTemplate
29
+
30
+ def invocation
31
+ "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(", ")}".strip
32
+ end
33
+
34
+ def method_arguments
35
+ argument_builder_collection.method_argument_names
36
+ end
37
+
38
+ def preparation
39
+ []
40
+ end
41
+
42
+ private
43
+
44
+ def variable_generator
45
+ @variable_generator ||= VariableNameGenerator.new
46
+ end
47
+
32
48
  def template
33
49
  @template ||= MethodTemplate.new(self, argument_builder_collection)
34
50
  end
@@ -47,8 +63,8 @@ module GirFFI
47
63
  end
48
64
 
49
65
  def return_value_builder
50
- @return_value_builder = @return_value_builder_class.new(variable_generator,
51
- return_value_info)
66
+ @return_value_builder ||= @return_value_builder_class.new(variable_generator,
67
+ return_value_info)
52
68
  end
53
69
 
54
70
  def receiver_builder
@@ -59,7 +75,7 @@ module GirFFI
59
75
  @argument_builder_collection ||=
60
76
  ArgumentBuilderCollection.new(return_value_builder, argument_builders,
61
77
  error_argument_builder: error_argument,
62
- receiver_builder: receiver_builder)
78
+ receiver_builder: receiver_builder)
63
79
  end
64
80
 
65
81
  def error_argument
@@ -71,22 +87,6 @@ module GirFFI
71
87
  end
72
88
  end
73
89
 
74
- # Methods used by MethodTemplate
75
-
76
- def invocation
77
- "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(', ')}".strip
78
- end
79
-
80
- def method_arguments
81
- argument_builder_collection.method_argument_names
82
- end
83
-
84
- def preparation
85
- []
86
- end
87
-
88
- private
89
-
90
90
  def lib_name
91
91
  "#{@info.safe_namespace}::Lib"
92
92
  end
@@ -45,7 +45,7 @@ module GirFFI
45
45
  end
46
46
 
47
47
  def invocation
48
- "obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(', ')}"
48
+ "obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(", ")}"
49
49
  end
50
50
 
51
51
  def result
@@ -18,7 +18,7 @@ module GirFFI
18
18
 
19
19
  def result
20
20
  if argument_builder_collection.has_return_values?
21
- ["return #{argument_builder_collection.return_value_names.join(', ')}"]
21
+ ["return #{argument_builder_collection.return_value_names.join(", ")}"]
22
22
  else
23
23
  []
24
24
  end
@@ -23,7 +23,7 @@ module GirFFI
23
23
 
24
24
  def initialize(receiver_info, info, builder_class)
25
25
  super(info, CallbackReturnValueBuilder,
26
- receiver_info: receiver_info,
26
+ receiver_info: receiver_info,
27
27
  argument_builder_class: builder_class)
28
28
  end
29
29
 
@@ -21,7 +21,7 @@ module GirFFI
21
21
 
22
22
  def initialize(receiver_info, info)
23
23
  super(info, ClosureReturnValueBuilder,
24
- receiver_info: receiver_info,
24
+ receiver_info: receiver_info,
25
25
  argument_builder_class: ClosureArgumentBuilder)
26
26
  end
27
27
 
@@ -32,14 +32,14 @@ module GirFFI
32
32
  end
33
33
 
34
34
  def method_arguments
35
- %w(closure return_value param_values _invocation_hint _marshal_data)
35
+ %w[closure return_value param_values _invocation_hint _marshal_data]
36
36
  end
37
37
 
38
38
  def preparation
39
39
  if param_names.size == 1
40
40
  ["#{param_names.first} = param_values.first.get_value_plain"]
41
41
  else
42
- ["#{param_names.join(', ')} = param_values.map(&:get_value_plain)"]
42
+ ["#{param_names.join(", ")} = param_values.map(&:get_value_plain)"]
43
43
  end
44
44
  end
45
45
 
@@ -19,7 +19,7 @@ module GirFFI
19
19
 
20
20
  def method_definition
21
21
  code = +"def #{qualified_method_name}"
22
- code << "(#{method_arguments.join(', ')})" if method_arguments.any?
22
+ code << "(#{method_arguments.join(", ")})" if method_arguments.any?
23
23
  method_lines.each { |line| code << "\n #{line}" }
24
24
  code << "\nend\n"
25
25
  end
@@ -27,7 +27,7 @@ module GirFFI
27
27
  private
28
28
 
29
29
  def qualified_method_name
30
- "#{@builder.singleton_method? ? 'self.' : ''}#{@builder.method_name}"
30
+ "#{@builder.singleton_method? ? "self." : ""}#{@builder.method_name}"
31
31
  end
32
32
 
33
33
  def method_arguments
@@ -18,7 +18,7 @@ module GirFFI
18
18
  ObjectBase
19
19
  end
20
20
 
21
- def object_class_struct
21
+ def class_struct_class
22
22
  GObject::TypeClass
23
23
  end
24
24
 
@@ -35,12 +35,12 @@ module GirFFI
35
35
  seek_in_ancestor_infos { |info| info.find_property property_name }
36
36
  end
37
37
 
38
- def object_class_struct
39
- @object_class_struct ||=
38
+ def class_struct_class
39
+ @class_struct_class ||=
40
40
  begin
41
- parent_struct = parent_builder.object_class_struct
42
- if object_class_struct_info
43
- StructBuilder.new(object_class_struct_info,
41
+ parent_struct = parent_builder.class_struct_class
42
+ if class_struct_info
43
+ StructBuilder.new(class_struct_info,
44
44
  superclass: parent_struct).build_class
45
45
  else
46
46
  parent_struct
@@ -58,12 +58,6 @@ module GirFFI
58
58
  end
59
59
  end
60
60
 
61
- protected
62
-
63
- def object_class_struct_info
64
- @object_class_struct_info ||= info.class_struct
65
- end
66
-
67
61
  private
68
62
 
69
63
  def setup_class
@@ -76,6 +70,10 @@ module GirFFI
76
70
  setup_initializer
77
71
  end
78
72
 
73
+ def class_struct_info
74
+ @class_struct_info ||= info.class_struct
75
+ end
76
+
79
77
  # FIXME: Private method only used in subclass
80
78
  def layout_superclass
81
79
  GirFFI::Struct
@@ -23,7 +23,7 @@ module GirFFI
23
23
  when Module
24
24
  args = [value_exp, ptr_exp]
25
25
  args << offset unless offset == 0
26
- "#{ffi_type_spec}.copy_value_to_pointer(#{args.join(', ')})"
26
+ "#{ffi_type_spec}.copy_value_to_pointer(#{args.join(", ")})"
27
27
  when Symbol
28
28
  "#{ptr_exp}.put_#{ffi_type_spec} #{offset}, #{value_exp}"
29
29
  end
@@ -21,16 +21,16 @@ module GirFFI
21
21
  CACHE = {}
22
22
 
23
23
  TYPE_MAP = {
24
- callback: CallbackBuilder,
25
- constant: ConstantBuilder,
26
- enum: EnumBuilder,
27
- flags: FlagsBuilder,
28
- interface: InterfaceBuilder,
29
- object: ObjectBuilder,
30
- struct: StructBuilder,
31
- union: UnionBuilder,
24
+ callback: CallbackBuilder,
25
+ constant: ConstantBuilder,
26
+ enum: EnumBuilder,
27
+ flags: FlagsBuilder,
28
+ interface: InterfaceBuilder,
29
+ object: ObjectBuilder,
30
+ struct: StructBuilder,
31
+ union: UnionBuilder,
32
32
  unintrospectable_boxed: UnintrospectableBoxedBuilder,
33
- unintrospectable: UnintrospectableBuilder
33
+ unintrospectable: UnintrospectableBuilder
34
34
  }.freeze
35
35
 
36
36
  def self.build(info)
@@ -78,17 +78,17 @@ module GirFFI
78
78
  end
79
79
 
80
80
  def class_init_proc
81
- proc do |type_class_or_ptr, _data|
82
- object_class_ptr = type_class_or_ptr.to_ptr
83
- setup_properties object_class_ptr
84
- setup_vfuncs object_class_ptr
81
+ proc do |type_class, _data|
82
+ class_struct_ptr = type_class.to_ptr
83
+ setup_properties class_struct_ptr
84
+ setup_vfuncs class_struct_ptr
85
85
  end
86
86
  end
87
87
 
88
88
  def interface_init_proc(interface)
89
- proc do |interface_or_ptr, _data|
90
- interface_ptr = interface_or_ptr.to_ptr
91
- setup_interface_vfuncs interface, interface_ptr
89
+ proc do |type_interface, _data|
90
+ interface_struct_ptr = type_interface.to_ptr
91
+ setup_interface_vfuncs interface, interface_struct_ptr
92
92
  end
93
93
  end
94
94
 
@@ -108,42 +108,44 @@ module GirFFI
108
108
  parent_gtype.class_size + interface_gtypes.sum(&:class_size)
109
109
  end
110
110
 
111
- def setup_properties(object_class_ptr)
112
- object_class = GObject::ObjectClass.wrap object_class_ptr
111
+ def setup_properties(class_struct_ptr)
112
+ class_struct = GObject::ObjectClass.wrap class_struct_ptr
113
113
 
114
- object_class.get_property = property_getter
115
- object_class.set_property = property_setter
114
+ class_struct.struct[:get_property] = property_getter_func
115
+ class_struct.struct[:set_property] = property_setter_func
116
116
 
117
117
  property_fields.each_with_index do |property, index|
118
- object_class.install_property index + 1, property.param_spec
118
+ class_struct.install_property index + 1, property.param_spec
119
119
  end
120
120
  end
121
121
 
122
- def property_getter
123
- proc do |object, _property_id, value, pspec|
122
+ def property_getter_func
123
+ getter = proc do |object, _property_id, value, pspec|
124
124
  value.set_value object.send(pspec.accessor_name)
125
125
  end
126
+ GObject::ObjectGetPropertyFunc.from getter
126
127
  end
127
128
 
128
- def property_setter
129
- proc do |object, _property_id, value, pspec|
129
+ def property_setter_func
130
+ setter = proc do |object, _property_id, value, pspec|
130
131
  object.send("#{pspec.accessor_name}=", value.get_value)
131
132
  end
133
+ GObject::ObjectSetPropertyFunc.from setter
132
134
  end
133
135
 
134
- def setup_vfuncs(object_class_ptr)
136
+ def setup_vfuncs(class_struct_ptr)
135
137
  super_class_struct =
136
- superclass.gir_ffi_builder.object_class_struct::Struct.new(object_class_ptr)
138
+ superclass.gir_ffi_builder.class_struct_class.wrap(class_struct_ptr)
137
139
 
138
140
  info.vfunc_implementations.each do |impl|
139
141
  setup_vfunc parent_info, super_class_struct, impl
140
142
  end
141
143
  end
142
144
 
143
- def setup_interface_vfuncs(interface, interface_ptr)
145
+ def setup_interface_vfuncs(interface, interface_struct_ptr)
144
146
  interface_builder = interface.gir_ffi_builder
145
147
 
146
- interface_struct = interface_builder.interface_struct::Struct.new(interface_ptr)
148
+ interface_struct = interface_builder.interface_struct.wrap(interface_struct_ptr)
147
149
  interface_info = interface_builder.info
148
150
 
149
151
  info.vfunc_implementations.each do |impl|
@@ -156,12 +158,8 @@ module GirFFI
156
158
  vfunc_info = ancestor_info.find_vfunc vfunc_name.to_s
157
159
  return unless vfunc_info
158
160
 
159
- install_vfunc ancestor_struct, vfunc_name, vfunc_info, impl.implementation
160
- end
161
-
162
- def install_vfunc(container_struct, vfunc_name, vfunc_info, implementation)
163
- vfunc = VFuncBuilder.new(vfunc_info).build_class
164
- container_struct[vfunc_name] = vfunc.from implementation
161
+ vfunc_class = VFuncBuilder.new(vfunc_info).build_class
162
+ ancestor_struct.struct[vfunc_name] = vfunc_class.from(impl.implementation)
165
163
  end
166
164
 
167
165
  def properties
@@ -29,10 +29,8 @@ module GirFFI
29
29
  send method_name, *arguments, &block
30
30
  end
31
31
 
32
- # NOTE: JRuby should fix FFI::MemoryPointer#== to return true for
33
- # equivalent FFI::Pointer. For now, user to_ptr.address
34
32
  def ==(other)
35
- other.class == self.class && to_ptr.address == other.to_ptr.address
33
+ other.class == self.class && to_ptr == other.to_ptr
36
34
  end
37
35
 
38
36
  def self.setup_and_call(method, arguments, &block)
data/lib/gir_ffi/core.rb CHANGED
@@ -40,11 +40,6 @@ module GirFFI
40
40
  raise ArgumentError, "#{klass} is not a user-defined class"
41
41
  end
42
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
48
43
  Builders::UserDefinedBuilder.new(info).build_class
49
44
 
50
45
  klass.gtype
@@ -4,6 +4,25 @@ module GirFFI
4
4
  module FFIExt
5
5
  # Extensions to FFI::Pointer
6
6
  module Pointer
7
+ def self.prepended(base)
8
+ base.class_eval do
9
+ size_t_getter =
10
+ case (size = FFI.type_size(:size_t))
11
+ when 4
12
+ :get_uint32
13
+ when 8
14
+ :get_uint64
15
+ else
16
+ raise NotImplementedError,
17
+ "Don't know how to handle size_t types of size #{size}"
18
+ end
19
+
20
+ alias_method :get_size_t, size_t_getter
21
+
22
+ alias_method :get_gtype, :get_size_t
23
+ end
24
+ end
25
+
7
26
  def to_ptr
8
27
  self
9
28
  end
@@ -23,16 +42,7 @@ module GirFFI
23
42
  end
24
43
  end
25
44
 
26
- FFI::Pointer.prepend GirFFI::FFIExt::Pointer
27
-
28
- FFI::Pointer.class_eval do
29
- size_t_getter = case FFI.type_size(:size_t)
30
- when 4
31
- :get_uint32
32
- when 8
33
- :get_uint64
34
- end
35
-
36
- alias_method :get_size_t, size_t_getter
37
- alias_method :get_gtype, :get_size_t
45
+ # @api private
46
+ class FFI::Pointer # rubocop:disable Style/ClassAndModuleChildren
47
+ prepend GirFFI::FFIExt::Pointer
38
48
  end
@@ -75,13 +75,13 @@ module GirFFI
75
75
  end
76
76
 
77
77
  def from_module_type_array(type, ary)
78
- if type == GObject::Value
79
- from_gvalue_array type, ary
80
- elsif type < GirFFI::ClassBase ||
81
- type.singleton_class < GirFFI::InterfaceBase
82
- from_struct_array type, ary
83
- elsif type.singleton_class < GirFFI::EnumBase
78
+ return from_gvalue_array(type, ary) if type == GObject::Value
79
+
80
+ case type
81
+ when GirFFI::EnumLikeBase
84
82
  from_enum_array type, ary
83
+ when GirFFI::RegisteredTypeBase
84
+ from_struct_array type, ary
85
85
  else
86
86
  raise NotImplementedError, type
87
87
  end
@@ -20,7 +20,7 @@ module GirFFI
20
20
 
21
21
  def find_instance_method(method)
22
22
  info = find_method method
23
- return info if info&.method?
23
+ info if info&.method?
24
24
  end
25
25
 
26
26
  def find_method(_method)
@@ -17,8 +17,14 @@ module GirFFI
17
17
  end
18
18
 
19
19
  def arguments_to_gvalues(instance, arguments)
20
- arg_g_values = argument_types.zip(arguments).map do |type, arg|
21
- type.make_g_value.tap { |it| it.set_value arg }
20
+ arg_g_values = args.zip(arguments).map do |arg_info, arg|
21
+ case arg_info.direction
22
+ when :in
23
+ type = arg_info.argument_type
24
+ type.make_g_value.tap { |it| it.set_value arg }
25
+ else
26
+ raise NotImplementedError
27
+ end
22
28
  end
23
29
 
24
30
  arg_g_values.unshift GObject::Value.wrap_instance(instance)
@@ -27,10 +33,6 @@ module GirFFI
27
33
  def gvalue_for_return_value
28
34
  return_type.make_g_value
29
35
  end
30
-
31
- def argument_types
32
- @argument_types ||= args.map(&:argument_type)
33
- end
34
36
  end
35
37
  end
36
38
  end
@@ -8,17 +8,17 @@ module GirFFI
8
8
  module ITypeInfo
9
9
  FLATTENED_TAG_TO_GTYPE_MAP = {
10
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
11
+ gint32: GObject::TYPE_INT,
12
+ gint64: GObject::TYPE_INT64,
13
+ guint64: GObject::TYPE_UINT64,
14
+ void: GObject::TYPE_NONE
15
15
  }.freeze
16
16
 
17
17
  FLATTENED_TAG_POINTER_TO_GTYPE_MAP = {
18
18
  array: GObject::TYPE_ARRAY,
19
19
  ghash: GObject::TYPE_HASH_TABLE,
20
- strv: GObject::TYPE_STRV,
21
- utf8: GObject::TYPE_STRING
20
+ strv: GObject::TYPE_STRV,
21
+ utf8: GObject::TYPE_STRING
22
22
  }.freeze
23
23
 
24
24
  def gtype
@@ -85,17 +85,17 @@ module GirFFI
85
85
  end
86
86
 
87
87
  TAG_TO_WRAPPER_CLASS_MAP = {
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
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
99
  zero_terminated: "GirFFI::ZeroTerminated"
100
100
  }.freeze
101
101
 
@@ -214,13 +214,7 @@ module GirFFI
214
214
  end
215
215
 
216
216
  def subtype_ffi_type(index)
217
- subtype = param_type(index).to_ffi_type
218
- if subtype == :pointer
219
- # NOTE: Don't use pointer directly to appease JRuby.
220
- :"uint#{FFI.type_size(:pointer) * 8}"
221
- else
222
- subtype
223
- end
217
+ param_type(index).to_ffi_type
224
218
  end
225
219
 
226
220
  def flattened_array_type
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GirFFI
4
- # Methods for setting up instance methods
4
+ # Methods for setting up instance methods.
5
+ #
6
+ # Depends on .gir_ffi_builder being defined in the extending class.
5
7
  module InstanceMethodSetup
6
8
  def setup_instance_method(name)
7
9
  gir_ffi_builder.setup_instance_method name
@@ -10,7 +10,7 @@ module GirFFI
10
10
 
11
11
  def method_stub
12
12
  <<~STUB
13
- def #{@info.method? ? '' : 'self.'}#{@info.safe_name} *args, &block
13
+ def #{@info.method? ? "" : "self."}#{@info.safe_name} *args, &block
14
14
  setup_and_call "#{@info.name}", args, &block
15
15
  end
16
16
  STUB
@@ -7,8 +7,8 @@ module GirFFI
7
7
  class ObjectBase < ClassBase
8
8
  extend FFI::DataConverter
9
9
 
10
- def object_class
11
- self.class.object_class
10
+ def class_struct
11
+ self.class.class_struct
12
12
  end
13
13
 
14
14
  def self.native_type
@@ -64,11 +64,11 @@ module GirFFI
64
64
  raise GirFFI::SignalNotFoundError.new(name, self)
65
65
  end
66
66
 
67
- def self.object_class
68
- @object_class ||=
67
+ def self.class_struct
68
+ @class_struct ||=
69
69
  begin
70
70
  ptr = GObject::Lib.g_type_class_ref(gtype)
71
- gir_ffi_builder.object_class_struct.wrap ptr
71
+ gir_ffi_builder.class_struct_class.wrap ptr
72
72
  end
73
73
  end
74
74
 
@@ -22,7 +22,6 @@ module GirFFI
22
22
  self
23
23
  end
24
24
 
25
- # NOTE: Needed for JRuby's FFI
26
25
  def to_native(value, _context)
27
26
  value.struct
28
27
  end