gir_ffi 0.6.7 → 0.7.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 (136) hide show
  1. checksums.yaml +7 -0
  2. data/{History.txt → Changelog.md} +93 -61
  3. data/{DESIGN.rdoc → DESIGN.md} +7 -7
  4. data/README.md +5 -7
  5. data/TODO.md +90 -0
  6. data/lib/ffi-glib.rb +0 -1
  7. data/lib/ffi-glib/array.rb +13 -29
  8. data/lib/ffi-glib/array_methods.rb +13 -0
  9. data/lib/ffi-glib/container_class_methods.rb +6 -1
  10. data/lib/ffi-glib/hash_table.rb +3 -2
  11. data/lib/ffi-glib/list.rb +3 -17
  12. data/lib/ffi-glib/list_methods.rb +22 -3
  13. data/lib/ffi-glib/ptr_array.rb +19 -19
  14. data/lib/ffi-glib/s_list.rb +3 -17
  15. data/lib/ffi-gobject.rb +10 -17
  16. data/lib/ffi-gobject/object.rb +19 -9
  17. data/lib/ffi-gobject/object_class.rb +14 -0
  18. data/lib/ffi-gobject/ruby_closure.rb +4 -5
  19. data/lib/ffi-gobject/value.rb +7 -5
  20. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  21. data/lib/gir_ffi-base.rb +0 -2
  22. data/lib/gir_ffi-base/gobject.rb +1 -0
  23. data/lib/gir_ffi-base/gobject/lib.rb +1 -1
  24. data/lib/gir_ffi.rb +2 -0
  25. data/lib/gir_ffi/arg_helper.rb +18 -8
  26. data/lib/gir_ffi/builders/argument_builder.rb +62 -55
  27. data/lib/gir_ffi/builders/base_argument_builder.rb +52 -106
  28. data/lib/gir_ffi/builders/base_type_builder.rb +3 -3
  29. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +34 -0
  30. data/lib/gir_ffi/builders/callback_argument_builder.rb +73 -0
  31. data/lib/gir_ffi/builders/callback_builder.rb +19 -9
  32. data/lib/gir_ffi/builders/callback_return_value_builder.rb +54 -0
  33. data/lib/gir_ffi/builders/closure_convertor.rb +9 -0
  34. data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +9 -0
  35. data/lib/gir_ffi/builders/constructor_result_convertor.rb +9 -0
  36. data/lib/gir_ffi/builders/enum_builder.rb +16 -16
  37. data/lib/gir_ffi/builders/field_builder.rb +36 -15
  38. data/lib/gir_ffi/builders/function_builder.rb +32 -27
  39. data/lib/gir_ffi/builders/interface_builder.rb +14 -4
  40. data/lib/gir_ffi/builders/mapping_method_builder.rb +95 -43
  41. data/lib/gir_ffi/builders/module_builder.rb +22 -35
  42. data/lib/gir_ffi/builders/null_convertor.rb +9 -0
  43. data/lib/gir_ffi/builders/object_builder.rb +11 -14
  44. data/lib/gir_ffi/builders/property_builder.rb +107 -9
  45. data/lib/gir_ffi/builders/registered_type_builder.rb +2 -2
  46. data/lib/gir_ffi/builders/return_value_builder.rb +42 -33
  47. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +15 -0
  48. data/lib/gir_ffi/builders/signal_builder.rb +18 -58
  49. data/lib/gir_ffi/builders/struct_builder.rb +1 -2
  50. data/lib/gir_ffi/builders/type_builder.rb +1 -0
  51. data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -4
  52. data/lib/gir_ffi/builders/user_defined_builder.rb +151 -26
  53. data/lib/gir_ffi/builders/vfunc_builder.rb +57 -0
  54. data/lib/gir_ffi/builders/with_layout.rb +10 -8
  55. data/lib/gir_ffi/builders/with_methods.rb +1 -1
  56. data/lib/gir_ffi/callback_base.rb +42 -8
  57. data/lib/gir_ffi/class_base.rb +1 -2
  58. data/lib/gir_ffi/enum_base.rb +26 -4
  59. data/lib/gir_ffi/error_argument_info.rb +21 -0
  60. data/lib/gir_ffi/{setter_argument_info.rb → field_argument_info.rb} +2 -1
  61. data/lib/gir_ffi/g_type.rb +25 -0
  62. data/lib/gir_ffi/in_out_pointer.rb +3 -14
  63. data/lib/gir_ffi/in_pointer.rb +20 -21
  64. data/lib/gir_ffi/info_ext.rb +2 -0
  65. data/lib/gir_ffi/info_ext/i_callable_info.rb +0 -9
  66. data/lib/gir_ffi/info_ext/i_callback_info.rb +17 -0
  67. data/lib/gir_ffi/info_ext/i_function_info.rb +4 -0
  68. data/lib/gir_ffi/info_ext/i_property_info.rb +4 -0
  69. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -0
  70. data/lib/gir_ffi/info_ext/i_signal_info.rb +14 -16
  71. data/lib/gir_ffi/info_ext/i_type_info.rb +72 -34
  72. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +12 -0
  73. data/lib/gir_ffi/info_ext/safe_constant_name.rb +3 -2
  74. data/lib/gir_ffi/interface_base.rb +8 -3
  75. data/lib/gir_ffi/module_base.rb +3 -5
  76. data/lib/gir_ffi/object_base.rb +8 -0
  77. data/lib/gir_ffi/receiver_argument_info.rb +21 -0
  78. data/lib/gir_ffi/receiver_type_info.rb +27 -0
  79. data/lib/gir_ffi/return_value_info.rb +23 -0
  80. data/lib/gir_ffi/signal_base.rb +1 -1
  81. data/lib/{ffi-glib → gir_ffi}/sized_array.rb +10 -6
  82. data/lib/gir_ffi/struct_base.rb +10 -9
  83. data/lib/gir_ffi/type_base.rb +1 -0
  84. data/lib/gir_ffi/type_map.rb +3 -0
  85. data/lib/gir_ffi/unintrospectable_type_info.rb +4 -1
  86. data/lib/gir_ffi/union_base.rb +4 -21
  87. data/lib/gir_ffi/user_data_argument_info.rb +21 -0
  88. data/lib/gir_ffi/user_data_type_info.rb +17 -0
  89. data/lib/gir_ffi/user_defined_type_info.rb +18 -4
  90. data/lib/gir_ffi/version.rb +1 -1
  91. data/lib/gir_ffi/vfunc_base.rb +8 -0
  92. data/lib/gir_ffi/vfunc_implementation.rb +11 -0
  93. data/lib/gir_ffi/zero_terminated.rb +18 -24
  94. data/test/base_test_helper.rb +2 -3
  95. data/test/ffi-glib/array_test.rb +3 -3
  96. data/test/ffi-glib/ruby_closure_test.rb +3 -3
  97. data/test/ffi-gobject/value_test.rb +15 -1
  98. data/test/ffi-gobject_test.rb +2 -1
  99. data/test/gir_ffi/arg_helper_test.rb +21 -2
  100. data/test/gir_ffi/builders/argument_builder_test.rb +213 -287
  101. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  102. data/test/gir_ffi/builders/callback_builder_test.rb +26 -8
  103. data/test/gir_ffi/builders/field_builder_test.rb +18 -3
  104. data/test/gir_ffi/builders/function_builder_test.rb +30 -12
  105. data/test/gir_ffi/builders/interface_builder_test.rb +9 -0
  106. data/test/gir_ffi/builders/module_builder_test.rb +0 -39
  107. data/test/gir_ffi/builders/object_builder_test.rb +27 -27
  108. data/test/gir_ffi/builders/property_builder_test.rb +110 -0
  109. data/test/gir_ffi/builders/return_value_builder_test.rb +168 -200
  110. data/test/gir_ffi/builders/signal_builder_test.rb +58 -14
  111. data/test/gir_ffi/builders/struct_builder_test.rb +2 -41
  112. data/test/gir_ffi/builders/user_defined_builder_test.rb +88 -20
  113. data/test/gir_ffi/builders/vfunc_builder_test.rb +44 -0
  114. data/test/gir_ffi/g_type_test.rb +29 -0
  115. data/test/gir_ffi/in_pointer_test.rb +28 -9
  116. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -9
  117. data/test/gir_ffi/info_ext/i_callback_info_test.rb +19 -0
  118. data/test/gir_ffi/info_ext/i_function_info_test.rb +9 -0
  119. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -11
  120. data/test/gir_ffi/info_ext/i_type_info_test.rb +140 -16
  121. data/test/gir_ffi/interface_base_test.rb +9 -3
  122. data/test/gir_ffi/object_base_test.rb +1 -2
  123. data/test/{ffi-glib → gir_ffi}/sized_array_test.rb +28 -28
  124. data/test/gir_ffi/type_map_test.rb +1 -1
  125. data/test/gir_ffi/user_defined_type_info_test.rb +36 -4
  126. data/test/gir_ffi_test.rb +5 -5
  127. data/test/gir_ffi_test_helper.rb +4 -0
  128. data/test/integration/generated_gimarshallingtests_test.rb +163 -59
  129. data/test/integration/generated_gobject_test.rb +21 -8
  130. data/test/integration/generated_pango_test.rb +2 -2
  131. data/test/integration/generated_regress_test.rb +361 -101
  132. data/test/lib/autogen.sh +5 -1
  133. metadata +51 -35
  134. data/TODO.rdoc +0 -63
  135. data/lib/gir_ffi-base/gir_ffi/library.rb +0 -17
  136. data/lib/gir_ffi-base/gir_ffi/struct.rb +0 -27
@@ -0,0 +1,57 @@
1
+ require 'gir_ffi/return_value_info'
2
+ require 'gir_ffi/builders/base_type_builder'
3
+ require 'gir_ffi/builders/mapping_method_builder'
4
+ require 'gir_ffi/receiver_type_info'
5
+ require 'gir_ffi/receiver_argument_info'
6
+ require 'gir_ffi/vfunc_base'
7
+
8
+ module GirFFI
9
+ module Builders
10
+ # Implements the creation of a class representing the implementation of a
11
+ # vfunc. This class will be able to turn a proc into an FFI::Function that
12
+ # can serve as such an implementation in C.
13
+ class VFuncBuilder < BaseTypeBuilder
14
+ def instantiate_class
15
+ unless already_set_up
16
+ setup_constants
17
+ klass.class_eval mapping_method_definition
18
+ end
19
+ klass
20
+ end
21
+
22
+ def klass
23
+ @klass ||= get_or_define_class container_class, @classname, CallbackBase
24
+ end
25
+
26
+ def mapping_method_definition
27
+ arg_infos = info.args
28
+
29
+ receiver_info = ReceiverArgumentInfo.new(receiver_type_info)
30
+
31
+ MappingMethodBuilder.for_vfunc(receiver_info,
32
+ arg_infos,
33
+ info.return_type).method_definition
34
+ end
35
+
36
+ def receiver_type_info
37
+ ReceiverTypeInfo.new(container_info)
38
+ end
39
+
40
+ def container_class
41
+ @container_class ||= Builder.build_class(container_info)
42
+ end
43
+
44
+ def container_info
45
+ @container_info ||= info.container
46
+ end
47
+
48
+ def argument_types
49
+ @argument_types ||= info.argument_ffi_types.unshift(receiver_type_info.to_ffitype)
50
+ end
51
+
52
+ def return_type
53
+ @return_type ||= info.return_ffi_type
54
+ end
55
+ end
56
+ end
57
+ end
@@ -20,7 +20,7 @@ module GirFFI
20
20
 
21
21
  def setup_layout
22
22
  spec = layout_specification
23
- @structklass.class_eval { layout(*spec) }
23
+ struct_class.class_eval { layout(*spec) }
24
24
  end
25
25
 
26
26
  def dummy_layout_specification
@@ -35,21 +35,23 @@ module GirFFI
35
35
  fields.map { |finfo| finfo.layout_specification }.flatten(1)
36
36
  end
37
37
 
38
- def setup_accessors_for_field_info finfo
39
- FieldBuilder.new(finfo).build
40
- end
41
-
42
38
  def setup_field_accessors
43
39
  fields.each do |finfo|
44
- setup_accessors_for_field_info finfo
40
+ FieldBuilder.new(finfo).build
45
41
  end
46
42
  end
47
43
 
48
44
  def instantiate_class
49
- @klass = get_or_define_class namespace_module, @classname, superclass
50
- @structklass = get_or_define_class @klass, :Struct, layout_superclass
51
45
  setup_class unless already_set_up
52
46
  end
47
+
48
+ def klass
49
+ @klass ||= get_or_define_class namespace_module, @classname, superclass
50
+ end
51
+
52
+ def struct_class
53
+ @structklass ||= get_or_define_class klass, :Struct, layout_superclass
54
+ end
53
55
  end
54
56
  end
55
57
  end
@@ -36,7 +36,7 @@ module GirFFI
36
36
 
37
37
  def stub_methods
38
38
  info.get_methods.each do |minfo|
39
- @klass.class_eval MethodStubber.new(minfo).method_stub
39
+ klass.class_eval MethodStubber.new(minfo).method_stub
40
40
  end
41
41
  end
42
42
  end
@@ -1,31 +1,65 @@
1
1
  require 'gir_ffi/type_base'
2
2
 
3
3
  module GirFFI
4
- module CallbackBase
5
- CALLBACKS = []
4
+ # Base module for callbacks.
5
+ class CallbackBase < Proc
6
+ extend TypeBase
7
+ extend FFI::DataConverter
6
8
 
7
- def store_callback prc
8
- CALLBACKS << prc
9
+ def self.native_type
10
+ FFI::Type::POINTER
11
+ end
12
+
13
+ def self.from_native(value, _context)
14
+ return nil if !value || value.null?
15
+ FFI::Function.new gir_ffi_builder.return_type, gir_ffi_builder.argument_types, value
9
16
  end
10
17
 
18
+ def self.to_native(value, _context)
19
+ return nil unless value
20
+ return value if FFI::Function === value
21
+ value.to_native
22
+ end
23
+
24
+ CALLBACKS = []
25
+
11
26
  def self.store_callback prc
12
27
  CALLBACKS << prc
13
28
  end
14
29
 
15
30
  # Create Callback from a Proc. Makes sure arguments are properly wrapped,
16
31
  # and the callback is stored to prevent garbage collection.
17
- def from prc
32
+ def self.from prc
18
33
  wrap_in_callback_args_mapper(prc).tap do |cb|
19
34
  store_callback cb
20
35
  end
21
36
  end
22
37
 
23
- def wrap_in_callback_args_mapper prc
38
+ def self.wrap_in_callback_args_mapper prc
39
+ return nil unless prc
24
40
  return prc if FFI::Function === prc
25
- return nil if prc.nil?
26
- return Proc.new do |*args|
41
+ return self.new do |*args|
27
42
  call_with_argument_mapping(prc, *args)
28
43
  end
29
44
  end
45
+
46
+ def self.to_ffitype
47
+ self
48
+ end
49
+
50
+ def to_native
51
+ @to_native ||= begin
52
+ builder = self.class.gir_ffi_builder
53
+ FFI::Function.new builder.return_type, builder.argument_types, self
54
+ end
55
+ end
56
+
57
+ def self.copy_value_to_pointer value, pointer
58
+ pointer.put_pointer 0, to_native(value, nil)
59
+ end
60
+
61
+ def self.get_value_from_pointer pointer
62
+ from_native pointer.get_pointer(0), nil
63
+ end
30
64
  end
31
65
  end
@@ -7,9 +7,8 @@ module GirFFI
7
7
  # the generated Struct classes.
8
8
  class ClassBase
9
9
  extend TypeBase
10
-
11
- # TODO: Make separate base for :struct, :union, :object.
12
10
  extend Forwardable
11
+
13
12
  def_delegators :@struct, :to_ptr
14
13
 
15
14
  GIR_FFI_BUILDER = NullBuilder.new
@@ -1,9 +1,23 @@
1
1
  require 'gir_ffi/type_base'
2
2
 
3
3
  module GirFFI
4
+ # Base module for enums.
4
5
  module EnumBase
6
+ include FFI::DataConverter
5
7
  include TypeBase
6
- # TODO: Make this a DataConverter
8
+
9
+ def native_type
10
+ self::Enum.native_type
11
+ end
12
+
13
+ def to_native *args
14
+ self::Enum.to_native(*args)
15
+ end
16
+
17
+ def from_native *args
18
+ self::Enum.from_native(*args)
19
+ end
20
+
7
21
  def [](arg)
8
22
  self::Enum[arg]
9
23
  end
@@ -12,8 +26,16 @@ module GirFFI
12
26
  self[arg]
13
27
  end
14
28
 
15
- def to_native *args
16
- self::Enum.to_native(*args)
29
+ def from arg
30
+ self[arg]
31
+ end
32
+
33
+ def copy_value_to_pointer value, pointer
34
+ pointer.put_int32 0, to_native(value, nil)
35
+ end
36
+
37
+ def get_value_from_pointer pointer
38
+ from_native pointer.get_int32(0), nil
17
39
  end
18
40
 
19
41
  def setup_and_call method, *arguments, &block
@@ -27,7 +49,7 @@ module GirFFI
27
49
  end
28
50
 
29
51
  def to_ffitype
30
- self::Enum
52
+ self
31
53
  end
32
54
 
33
55
  def setup_method name
@@ -0,0 +1,21 @@
1
+ module GirFFI
2
+ # Represents an error argument with the same interface as IArgumentInfo
3
+ class ErrorArgumentInfo
4
+ def skip?
5
+ false
6
+ end
7
+
8
+ def direction
9
+ :error
10
+ end
11
+
12
+ def argument_type
13
+ nil
14
+ end
15
+
16
+ def name
17
+ nil
18
+ end
19
+ end
20
+ end
21
+
@@ -1,7 +1,8 @@
1
1
  module GirFFI
2
2
  # Class to represent argument info for the argument of a setter method.
3
3
  # Implements the necessary parts of IArgumentInfo's interface.
4
- class SetterArgumentInfo
4
+ # TODO: Rename and add direction argument or subclass
5
+ class FieldArgumentInfo
5
6
  attr_reader :name, :argument_type
6
7
 
7
8
  def initialize name, type
@@ -0,0 +1,25 @@
1
+ # Wrapper class providing extended functionality for a GType, which is normally
2
+ # just a kind of integer
3
+ class GirFFI::GType
4
+ def initialize gtype
5
+ @gtype = gtype
6
+ end
7
+
8
+ def to_i
9
+ @gtype
10
+ end
11
+
12
+ def class_size
13
+ type_query.class_size
14
+ end
15
+
16
+ def instance_size
17
+ type_query.instance_size
18
+ end
19
+
20
+ private
21
+
22
+ def type_query
23
+ @type_query ||= GObject.type_query @gtype
24
+ end
25
+ end
@@ -2,7 +2,7 @@ module GirFFI
2
2
  # The InOutPointer class handles conversion between ruby types and
3
3
  # pointers for arguments with direction :inout and :out.
4
4
  #
5
- # TODO: This has now become a more general extende pointer class and should be renamed.
5
+ # TODO: This has now become a more general extended pointer class and should be renamed.
6
6
  class InOutPointer < FFI::Pointer
7
7
  attr_reader :value_type
8
8
 
@@ -18,16 +18,10 @@ module GirFFI
18
18
  # TODO: Create type classes that extract values from pointers.
19
19
  def to_value
20
20
  case value_ffi_type
21
- when Class
21
+ when Module
22
22
  value_ffi_type.get_value_from_pointer(self)
23
- # FIXME: This is a hack, since :c is not really a FFI type. Make
24
- # SizedArray a type FFI understands instead.
25
- when :c
26
- self
27
23
  when Symbol
28
24
  self.send("get_#{value_ffi_type}", 0)
29
- when FFI::Enum
30
- value_ffi_type[self.get_int32(0)]
31
25
  else
32
26
  raise NotImplementedError
33
27
  end
@@ -50,15 +44,10 @@ module GirFFI
50
44
 
51
45
  def set_value value
52
46
  case value_ffi_type
53
- when Class
47
+ when Module
54
48
  value_ffi_type.copy_value_to_pointer(value, self)
55
- # FIXME: Make SizedArray an FFI DataConverter so it conflates with the code above.
56
- when :c
57
- GLib::SizedArray.copy_value_to_pointer(value, self)
58
49
  when Symbol
59
50
  self.send "put_#{value_ffi_type}", 0, value
60
- when FFI::Enum
61
- self.send "put_int32", 0, value_ffi_type.to_native(value, nil)
62
51
  else
63
52
  raise NotImplementedError, value_ffi_type
64
53
  end
@@ -21,7 +21,9 @@ module GirFFI
21
21
  when Module
22
22
  from_enum_array type, ary
23
23
  when Array
24
- from_interface_pointer_array ary
24
+ main_type, sub_type = *type
25
+ raise "Unexpected main type #{main_type}" if main_type != :pointer
26
+ from_pointer_array sub_type, ary
25
27
  else
26
28
  raise NotImplementedError, type
27
29
  end
@@ -34,21 +36,17 @@ module GirFFI
34
36
  from_utf8 val
35
37
  when :gint32, :guint32, :gint8
36
38
  self.new val
39
+ when Class, :void
40
+ val.to_ptr
37
41
  when Module
38
42
  self.new type[val]
39
- when :void
40
- from_object val
41
43
  else
42
44
  raise NotImplementedError, type
43
45
  end
44
46
  end
45
47
 
46
48
  class << self
47
- # FIXME: Hideous
48
- def from_object obj
49
- return nil if obj.nil?
50
- return obj.to_ptr if obj.respond_to? :to_ptr
51
-
49
+ def from_closure_data obj
52
50
  FFI::Pointer.new(obj.object_id).tap {|ptr|
53
51
  ArgHelper::OBJECT_STORE[ptr.address] = obj }
54
52
  end
@@ -63,8 +61,8 @@ module GirFFI
63
61
  from_basic_type_array :int, ary.map {|val| val ? 1 : 0}
64
62
  end
65
63
 
66
- def from_interface_pointer_array ary
67
- from_basic_type_array :pointer, ary.map {|ifc| ifc.to_ptr}
64
+ def from_pointer_array type, ary
65
+ from_basic_type_array :pointer, ary.map {|elem| from type, elem }
68
66
  end
69
67
 
70
68
  def from_gvalue_array type, ary
@@ -79,13 +77,15 @@ module GirFFI
79
77
  end
80
78
 
81
79
  def from_struct_array type, ary
82
- type_size = type::Struct.size
80
+ ffi_type = TypeMap.type_specification_to_ffitype type
81
+ type_size = FFI.type_size(ffi_type)
83
82
  length = ary.length
84
83
 
85
- ptr = AllocationHelper.safe_malloc length * type_size
84
+ ptr = AllocationHelper.safe_malloc type_size * (length + 1)
86
85
  ary.each_with_index do |item, idx|
87
86
  type.copy_value_to_pointer item, ptr, idx * type_size
88
87
  end
88
+ ptr.put_bytes length * type_size, "\0" * type_size, 0, type_size
89
89
  new ptr
90
90
  end
91
91
 
@@ -100,18 +100,17 @@ module GirFFI
100
100
  end
101
101
 
102
102
  def from_basic_type_array type, ary
103
- ffi_type = TypeMap.map_basic_type type
104
- length = ary.length
105
- size = FFI.type_size ffi_type
106
-
107
- block = AllocationHelper.safe_malloc size * (length + 1)
103
+ ffi_type = TypeMap.type_specification_to_ffitype type
104
+ ary = ary.dup << null_value(ffi_type)
105
+ type_size = FFI.type_size(ffi_type)
106
+ block = AllocationHelper.safe_malloc type_size * ary.length
108
107
  block.send "put_array_of_#{ffi_type}", 0, ary
109
- block.send("put_#{ffi_type}",
110
- length * size,
111
- (ffi_type == :pointer ? nil : 0))
112
-
113
108
  new block
114
109
  end
110
+
111
+ def null_value ffi_type
112
+ ffi_type == :pointer ? nil : 0
113
+ end
115
114
  end
116
115
  end
117
116
  end
@@ -1,10 +1,12 @@
1
1
  require 'gir_ffi/info_ext/i_arg_info'
2
2
  require 'gir_ffi/info_ext/i_callable_info'
3
+ require 'gir_ffi/info_ext/i_callback_info'
3
4
  require 'gir_ffi/info_ext/i_field_info'
4
5
  require 'gir_ffi/info_ext/i_function_info'
5
6
  require 'gir_ffi/info_ext/i_property_info'
6
7
  require 'gir_ffi/info_ext/i_registered_type_info'
7
8
  require 'gir_ffi/info_ext/i_signal_info'
8
9
  require 'gir_ffi/info_ext/i_type_info'
10
+ require 'gir_ffi/info_ext/i_vfunc_info'
9
11
  require 'gir_ffi/info_ext/safe_constant_name'
10
12
  require 'gir_ffi/info_ext/safe_function_name'