gir_ffi 0.15.9 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +31 -18
- data/README.md +1 -1
- data/lib/ffi-glib/bytes.rb +0 -12
- data/lib/ffi-glib/main_loop.rb +1 -1
- data/lib/ffi-glib/ptr_array.rb +24 -15
- data/lib/ffi-glib/variant.rb +4 -6
- data/lib/ffi-gobject/object.rb +1 -11
- data/lib/ffi-gobject/object_class.rb +2 -10
- data/lib/ffi-gobject/value.rb +26 -26
- data/lib/ffi-gobject.rb +3 -17
- data/lib/ffi-gobject_introspection/i_constant_info.rb +10 -10
- data/lib/ffi-gobject_introspection/lib.rb +11 -11
- data/lib/ffi-gobject_introspection.rb +19 -19
- data/lib/gir_ffi/builder.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder_collection.rb +5 -5
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +23 -23
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/object_builder.rb +10 -12
- data/lib/gir_ffi/builders/type_builder.rb +9 -9
- data/lib/gir_ffi/builders/user_defined_builder.rb +24 -26
- data/lib/gir_ffi/class_base.rb +1 -3
- data/lib/gir_ffi/core.rb +0 -5
- data/lib/gir_ffi/in_pointer.rb +6 -6
- data/lib/gir_ffi/info_ext/i_signal_info.rb +8 -6
- data/lib/gir_ffi/info_ext/i_type_info.rb +18 -24
- data/lib/gir_ffi/instance_method_setup.rb +3 -1
- data/lib/gir_ffi/object_base.rb +5 -5
- data/lib/gir_ffi/struct_like_base.rb +0 -1
- data/lib/gir_ffi/type_map.rb +30 -30
- data/lib/gir_ffi/unintrospectable_type_info.rb +2 -2
- data/lib/gir_ffi/user_defined_object_info.rb +0 -3
- data/lib/gir_ffi/user_defined_property_info.rb +33 -33
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/zero_terminated.rb +1 -1
- data/lib/gir_ffi-base/gobject.rb +1 -1
- metadata +18 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfd3130c297141938f61b59a4e4be4ec2e76832cf38341533f18a5598ac6cd30
|
4
|
+
data.tar.gz: 2e94de2c70d365baa1fc1fd506e5cadbaf5d3b9aaa36dbde69e7813f742ce357
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94de6fa54920e6c878d271f57c9c737aa5b6ca6025fe5d1d395e26e146208e8dafb9c43dc679984dcaa4216d373f658f25e8cdd676f96724cd7d8cbf7aae6012
|
7
|
+
data.tar.gz: d4f06ba95a49d8ad6476cda459dc93d3630533b9dc48f1fc48917c86d7124965700771a71084925f5382836352fe9b203536c0df686fb2a554530fb27e203cbb
|
data/Changelog.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.16.0 / 2022-05-21
|
4
|
+
|
5
|
+
* Support Ruby 3.1
|
6
|
+
* Rename `#object_class` to `#class_struct`
|
7
|
+
* Remove `GObject.object_class_from_instance`
|
8
|
+
* Limit public interface of `BaseMethodBuilder`
|
9
|
+
* Remove deprecated methods from `GObject::Object`
|
10
|
+
* Stop accepting blocks when defining a type
|
11
|
+
* Check parameter direction in signal argument conversion
|
12
|
+
* Drop support for JRuby
|
13
|
+
* Drop support for Ruby 2.6
|
14
|
+
|
3
15
|
## 0.15.9 / 2021-12-05
|
4
16
|
|
5
17
|
* Skip setting destroy notifier state if types don't make sense
|
@@ -144,8 +156,8 @@
|
|
144
156
|
changed.
|
145
157
|
* Make `Strv#each` thread-safe.
|
146
158
|
* Drop support for CRuby 2.0.
|
147
|
-
* Move `::type_init` and base `Strv` implementation into `GObjectIntrospection`,
|
148
|
-
it stand-alone.
|
159
|
+
* Move `::type_init` and base `Strv` implementation into `GObjectIntrospection`,
|
160
|
+
making it stand-alone.
|
149
161
|
* Move `GLib::Boolean` to `GirFFI::Boolean`.
|
150
162
|
* Guard against instantiating abstract classes using the default constructor.
|
151
163
|
* Handle user-defined properties containing dashes
|
@@ -166,7 +178,7 @@
|
|
166
178
|
actual effect even on CRuby.
|
167
179
|
- Immediately free string pointers whose ownership is transfered. Again, the
|
168
180
|
#autorelease technique doesn't work on JRuby.
|
169
|
-
- Fix handling of callee-allocated out parameters in vfuncs. The put_pointer
|
181
|
+
- Fix handling of callee-allocated out parameters in vfuncs. The `put_pointer`
|
170
182
|
method was wrongly called, and JRuby is more picky about what types that
|
171
183
|
method expects, exposing the bug.
|
172
184
|
|
@@ -185,7 +197,8 @@
|
|
185
197
|
|
186
198
|
## 0.9.5 / 2016-03-05
|
187
199
|
|
188
|
-
* Abort if modules were defined earlier, e.g., through the gems from the
|
200
|
+
* Abort if modules were defined earlier, e.g., through the gems from the
|
201
|
+
ruby-gnome family.
|
189
202
|
* Extend integration testing with GObjectIntrospection's test libraries.
|
190
203
|
* Find signals on user-defined types.
|
191
204
|
* Allow getting and setting of properties with a callback value.
|
@@ -500,7 +513,7 @@
|
|
500
513
|
## 0.4.2 / 2012-09-22
|
501
514
|
|
502
515
|
* Make objects and interfaces wrap poiners in the class that matches
|
503
|
-
their GType.
|
516
|
+
their GType.
|
504
517
|
|
505
518
|
## 0.4.1 / 2012-09-18
|
506
519
|
|
@@ -516,7 +529,7 @@ their GType.
|
|
516
529
|
## 0.3.2 / 2012-08-24
|
517
530
|
|
518
531
|
* Correctly set FFI return type when callbacks that return GObjects have
|
519
|
-
incomplete type specification.
|
532
|
+
incomplete type specification.
|
520
533
|
|
521
534
|
## 0.3.1 / 2012-05-13
|
522
535
|
|
@@ -544,15 +557,15 @@ incomplete type specification.
|
|
544
557
|
|
545
558
|
## 0.2.2 / 2011-12-07
|
546
559
|
|
547
|
-
* Fix issue #19: Check if a GLib::PtrArray.add method was generated
|
548
|
-
|
560
|
+
* Fix issue #19: Check if a GLib::PtrArray.add method was generated before
|
561
|
+
attempting to remove it.
|
549
562
|
* Fix two issues with pretty printing that made output for GLib have syntax
|
550
|
-
errors.
|
563
|
+
errors.
|
551
564
|
|
552
565
|
## 0.2.1 / 2011-11-20
|
553
566
|
|
554
|
-
* Fix handling of output parameters that are arrays of pointers to
|
555
|
-
|
567
|
+
* Fix handling of output parameters that are arrays of pointers to structures
|
568
|
+
(i.e., of type `Foo***`).
|
556
569
|
|
557
570
|
## 0.2.0 / 2011-11-19
|
558
571
|
|
@@ -562,9 +575,9 @@ structures (i.e., of type `Foo***`).
|
|
562
575
|
- Get rid of `#[]` and `#[]=`.
|
563
576
|
* Explicitely load `libgirepository` with ABI version 1.
|
564
577
|
* Improve implementation of GLib container classes (GList etc.):
|
565
|
-
- Real constructors.
|
566
|
-
- `#append` and friends are instance methods now.
|
567
|
-
- Conversion methods to cast Ruby containers to GLib containers.
|
578
|
+
- Real constructors.
|
579
|
+
- `#append` and friends are instance methods now.
|
580
|
+
- Conversion methods to cast Ruby containers to GLib containers.
|
568
581
|
* Start implementing pretty printing.
|
569
582
|
* Various refactorings.
|
570
583
|
|
@@ -577,10 +590,10 @@ structures (i.e., of type `Foo***`).
|
|
577
590
|
## 0.0.14 / 2011-10-28
|
578
591
|
|
579
592
|
* Support GObject Introspection version 1.30:
|
580
|
-
- Add support for layouts with fixed-length arrays.
|
581
|
-
- Handle type names starting with underscores.
|
582
|
-
- Call `g_signal_emitv` directly to avoid conflict in introspection info
|
583
|
-
|
593
|
+
- Add support for layouts with fixed-length arrays.
|
594
|
+
- Handle type names starting with underscores.
|
595
|
+
- Call `g_signal_emitv` directly to avoid conflict in introspection info
|
596
|
+
with earlier versions of GObject Introspection.
|
584
597
|
|
585
598
|
## 0.0.13 / 2011-09-09
|
586
599
|
|
data/README.md
CHANGED
@@ -51,7 +51,7 @@ examples can be found in `gir_ffi-gtk` and `gir_ffi-gst`.
|
|
51
51
|
|
52
52
|
## Requirements
|
53
53
|
|
54
|
-
GirFFI is supported on CRuby 2.6, 2.7
|
54
|
+
GirFFI is supported on CRuby 2.6, 2.7, 3.0 and 3.1.
|
55
55
|
|
56
56
|
You will also need gobject-introspection installed with some
|
57
57
|
introspection data.
|
data/lib/ffi-glib/bytes.rb
CHANGED
@@ -7,18 +7,6 @@ module GLib
|
|
7
7
|
class Bytes
|
8
8
|
include Enumerable
|
9
9
|
|
10
|
-
remove_method :get_data if method_defined? :get_data
|
11
|
-
|
12
|
-
# @override
|
13
|
-
# NOTE: Needed due to mis-identification of the element-type of the
|
14
|
-
# resulting sized array for the default binding.
|
15
|
-
def get_data
|
16
|
-
length_ptr = FFI::MemoryPointer.new :size_t
|
17
|
-
data_ptr = Lib.g_bytes_get_data self, length_ptr
|
18
|
-
length = length_ptr.get_size_t(0)
|
19
|
-
GirFFI::SizedArray.wrap(:guint8, length, data_ptr)
|
20
|
-
end
|
21
|
-
|
22
10
|
def each(&block)
|
23
11
|
data.each(&block)
|
24
12
|
end
|
data/lib/ffi-glib/main_loop.rb
CHANGED
@@ -40,7 +40,7 @@ module GLib
|
|
40
40
|
setup_instance_method! :run
|
41
41
|
|
42
42
|
def run_with_thread_enabler
|
43
|
-
ThreadEnabler.instance.setup_idle_handler
|
43
|
+
ThreadEnabler.instance.setup_idle_handler
|
44
44
|
RUNNING_LOOPS << self
|
45
45
|
result = run_without_thread_enabler
|
46
46
|
exception = EXCEPTIONS.shift
|
data/lib/ffi-glib/ptr_array.rb
CHANGED
@@ -50,21 +50,7 @@ module GLib
|
|
50
50
|
|
51
51
|
# Re-implementation of the g_ptrarray_index macro
|
52
52
|
def index(idx)
|
53
|
-
|
54
|
-
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
55
|
-
end
|
56
|
-
|
57
|
-
item_ptr = data_ptr + idx * element_size
|
58
|
-
|
59
|
-
convert_element_type = case element_type
|
60
|
-
when :utf8
|
61
|
-
:utf8
|
62
|
-
when GirFFI::ObjectBase
|
63
|
-
element_type
|
64
|
-
else
|
65
|
-
[:pointer, element_type]
|
66
|
-
end
|
67
|
-
|
53
|
+
item_ptr = item_pointer(idx)
|
68
54
|
convertor = GirFFI::ArrayElementConvertor.new convert_element_type, item_ptr
|
69
55
|
convertor.to_ruby_value
|
70
56
|
end
|
@@ -85,6 +71,29 @@ module GLib
|
|
85
71
|
|
86
72
|
private
|
87
73
|
|
74
|
+
def item_pointer(idx)
|
75
|
+
check_bounds(idx)
|
76
|
+
|
77
|
+
data_ptr + idx * element_size
|
78
|
+
end
|
79
|
+
|
80
|
+
def check_bounds(idx)
|
81
|
+
unless (0...length).cover? idx
|
82
|
+
raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def convert_element_type
|
87
|
+
case element_type
|
88
|
+
when :utf8
|
89
|
+
:utf8
|
90
|
+
when GirFFI::ObjectBase
|
91
|
+
element_type
|
92
|
+
else
|
93
|
+
[:pointer, element_type]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
88
97
|
def element_size
|
89
98
|
POINTER_SIZE
|
90
99
|
end
|
data/lib/ffi-glib/variant.rb
CHANGED
@@ -14,13 +14,11 @@ module GLib
|
|
14
14
|
alias get_string_without_override get_string
|
15
15
|
alias get_string get_string_with_override
|
16
16
|
|
17
|
-
# Initializing method used in constructors. For Variant
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# NOTE: This is very hard to test since it is not possible to get the
|
21
|
-
# variant's ref count directely. However, there is an error when running
|
22
|
-
# the tests on 32-bit systems.
|
17
|
+
# Initializing method used in constructors. For Variant the constructing
|
18
|
+
# functions all return floating references, so this is need to take full
|
19
|
+
# ownership.
|
23
20
|
#
|
21
|
+
# Also see the documentation for g_variant_ref_sink.
|
24
22
|
def store_pointer(ptr)
|
25
23
|
Lib.g_variant_ref_sink ptr
|
26
24
|
super
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -117,17 +117,12 @@ module GObject
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def property_param_spec(property_name)
|
120
|
-
|
120
|
+
class_struct.find_property property_name or
|
121
121
|
raise GirFFI::PropertyNotFoundError.new(property_name, self.class)
|
122
122
|
end
|
123
123
|
|
124
124
|
# Overrides for GObject, GObject's generic base class.
|
125
125
|
module Overrides
|
126
|
-
# @deprecated
|
127
|
-
def get_property_extended(property_name)
|
128
|
-
get_property(property_name)
|
129
|
-
end
|
130
|
-
|
131
126
|
def get_property(property_name)
|
132
127
|
gvalue = gvalue_for_property property_name
|
133
128
|
super property_name, gvalue
|
@@ -139,11 +134,6 @@ module GObject
|
|
139
134
|
value
|
140
135
|
end
|
141
136
|
|
142
|
-
# @deprecated
|
143
|
-
def set_property_extended(property_name, value)
|
144
|
-
set_property property_name, value
|
145
|
-
end
|
146
|
-
|
147
137
|
def set_property(property_name, value)
|
148
138
|
type_info = get_property_type property_name
|
149
139
|
value = property_value_pre_conversion(value, type_info) if type_info
|
@@ -1,18 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
GObject::Object.
|
3
|
+
GObject::Object.class_struct
|
4
4
|
|
5
5
|
module GObject
|
6
|
-
# Overrides for GObjectClass,
|
6
|
+
# Overrides for GObjectClass, the class struct for GObject::Object
|
7
7
|
class ObjectClass
|
8
|
-
def set_property=(callback)
|
9
|
-
struct[:set_property] = GObject::ObjectSetPropertyFunc.from callback
|
10
|
-
end
|
11
|
-
|
12
|
-
def get_property=(callback)
|
13
|
-
struct[:get_property] = GObject::ObjectGetPropertyFunc.from callback
|
14
|
-
end
|
15
|
-
|
16
8
|
def gtype
|
17
9
|
to_ptr.get_gtype 0
|
18
10
|
end
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -8,29 +8,29 @@ module GObject
|
|
8
8
|
setup_instance_method! :init
|
9
9
|
|
10
10
|
METHOD_MAP = {
|
11
|
-
TYPE_INVALID
|
11
|
+
TYPE_INVALID => [:get_none, :set_none],
|
12
12
|
# TYPE_NONE is skipped
|
13
|
-
TYPE_INTERFACE => [:get_object,
|
14
|
-
TYPE_CHAR
|
15
|
-
TYPE_UCHAR
|
16
|
-
TYPE_BOOLEAN
|
17
|
-
TYPE_INT
|
18
|
-
TYPE_UINT
|
19
|
-
TYPE_LONG
|
20
|
-
TYPE_ULONG
|
21
|
-
TYPE_INT64
|
22
|
-
TYPE_UINT64
|
23
|
-
TYPE_ENUM
|
24
|
-
TYPE_FLAGS
|
25
|
-
TYPE_FLOAT
|
26
|
-
TYPE_DOUBLE
|
27
|
-
TYPE_STRING
|
28
|
-
TYPE_POINTER
|
29
|
-
TYPE_BOXED
|
30
|
-
TYPE_PARAM
|
31
|
-
TYPE_OBJECT
|
32
|
-
TYPE_GTYPE
|
33
|
-
TYPE_VARIANT
|
13
|
+
TYPE_INTERFACE => [:get_object, :set_instance_enhanced],
|
14
|
+
TYPE_CHAR => [:get_schar, :set_schar],
|
15
|
+
TYPE_UCHAR => [:get_uchar, :set_uchar],
|
16
|
+
TYPE_BOOLEAN => [:get_boolean, :set_boolean],
|
17
|
+
TYPE_INT => [:get_int, :set_int],
|
18
|
+
TYPE_UINT => [:get_uint, :set_uint],
|
19
|
+
TYPE_LONG => [:get_long, :set_long],
|
20
|
+
TYPE_ULONG => [:get_ulong, :set_ulong],
|
21
|
+
TYPE_INT64 => [:get_int64, :set_int64],
|
22
|
+
TYPE_UINT64 => [:get_uint64, :set_uint64],
|
23
|
+
TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced],
|
24
|
+
TYPE_FLAGS => [:get_flags_enhanced, :set_flags_enhanced],
|
25
|
+
TYPE_FLOAT => [:get_float, :set_float],
|
26
|
+
TYPE_DOUBLE => [:get_double, :set_double],
|
27
|
+
TYPE_STRING => [:get_string, :set_string],
|
28
|
+
TYPE_POINTER => [:get_pointer, :set_pointer],
|
29
|
+
TYPE_BOXED => [:get_boxed, :set_boxed],
|
30
|
+
TYPE_PARAM => [:get_param, :set_param],
|
31
|
+
TYPE_OBJECT => [:get_object, :set_instance_enhanced],
|
32
|
+
TYPE_GTYPE => [:get_gtype, :set_gtype],
|
33
|
+
TYPE_VARIANT => [:get_variant, :set_variant]
|
34
34
|
}.freeze
|
35
35
|
|
36
36
|
# TODO: Give more generic name
|
@@ -68,11 +68,11 @@ module GObject
|
|
68
68
|
end
|
69
69
|
|
70
70
|
CLASS_TO_GTYPE_MAP = {
|
71
|
-
NilClass
|
72
|
-
TrueClass
|
71
|
+
NilClass => TYPE_INVALID,
|
72
|
+
TrueClass => TYPE_BOOLEAN,
|
73
73
|
FalseClass => TYPE_BOOLEAN,
|
74
|
-
Integer
|
75
|
-
String
|
74
|
+
Integer => TYPE_INT,
|
75
|
+
String => TYPE_STRING
|
76
76
|
}.freeze
|
77
77
|
|
78
78
|
# Overrides for existing Value methods
|
data/lib/ffi-gobject.rb
CHANGED
@@ -31,17 +31,6 @@ module GObject
|
|
31
31
|
type_name type_from_instance instance
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.object_class_from_instance(instance)
|
35
|
-
object_class_from_instance_pointer instance.to_ptr
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.object_class_from_instance_pointer(inst_ptr)
|
39
|
-
return nil if inst_ptr.null?
|
40
|
-
|
41
|
-
klsptr = inst_ptr.get_pointer 0
|
42
|
-
ObjectClass.wrap klsptr
|
43
|
-
end
|
44
|
-
|
45
34
|
def self.signal_lookup_from_instance(signal, object)
|
46
35
|
signal_lookup signal, type_from_instance(object)
|
47
36
|
end
|
@@ -55,11 +44,7 @@ module GObject
|
|
55
44
|
argument_gvalues = sig_info.arguments_to_gvalues object, args
|
56
45
|
return_gvalue = sig_info.gvalue_for_return_value
|
57
46
|
|
58
|
-
|
59
|
-
# NOTE: Depending on the version of GObjectIntrospection, the result will
|
60
|
-
# be stored in result or return_gvalue. This was changed between versions
|
61
|
-
# 1.44 and 1.46.
|
62
|
-
result || return_gvalue.get_value
|
47
|
+
signal_emitv argument_gvalues, signal_id, detail_quark, return_gvalue
|
63
48
|
end
|
64
49
|
|
65
50
|
def self.signal_connect(object, detailed_signal, data = nil, after = false, &block)
|
@@ -85,7 +70,8 @@ module GObject
|
|
85
70
|
load_class :ClosureMarshal
|
86
71
|
load_class :ParamFlags
|
87
72
|
|
88
|
-
#
|
73
|
+
# Attach some needed functions to the GObject Lib, which was set up in
|
74
|
+
# `gir_ffi-base/gobject/lib.rb`.
|
89
75
|
Lib.class_eval do
|
90
76
|
attach_function :g_object_ref_sink, [:pointer], :pointer
|
91
77
|
attach_function :g_object_ref, [:pointer], :pointer
|
@@ -5,16 +5,16 @@ module GObjectIntrospection
|
|
5
5
|
class IConstantInfo < IBaseInfo
|
6
6
|
TYPE_TAG_TO_UNION_MEMBER = {
|
7
7
|
gboolean: :v_boolean,
|
8
|
-
gint8:
|
9
|
-
gint16:
|
10
|
-
gint32:
|
11
|
-
gint64:
|
12
|
-
guint8:
|
13
|
-
guint16:
|
14
|
-
guint32:
|
15
|
-
guint64:
|
16
|
-
gdouble:
|
17
|
-
utf8:
|
8
|
+
gint8: :v_int8,
|
9
|
+
gint16: :v_int16,
|
10
|
+
gint32: :v_int32,
|
11
|
+
gint64: :v_int64,
|
12
|
+
guint8: :v_uint8,
|
13
|
+
guint16: :v_uint16,
|
14
|
+
guint32: :v_uint32,
|
15
|
+
guint64: :v_uint64,
|
16
|
+
gdouble: :v_double,
|
17
|
+
utf8: :v_string
|
18
18
|
}.freeze
|
19
19
|
|
20
20
|
def value
|
@@ -63,12 +63,12 @@ module GObjectIntrospection
|
|
63
63
|
|
64
64
|
# IFunctionInfo
|
65
65
|
bit_mask :IFunctionInfoFlags,
|
66
|
-
is_method:
|
66
|
+
is_method: (1 << 0),
|
67
67
|
is_constructor: (1 << 1),
|
68
|
-
is_getter:
|
69
|
-
is_setter:
|
70
|
-
wraps_vfunc:
|
71
|
-
throws:
|
68
|
+
is_getter: (1 << 2),
|
69
|
+
is_setter: (1 << 3),
|
70
|
+
wraps_vfunc: (1 << 4),
|
71
|
+
throws: (1 << 5)
|
72
72
|
|
73
73
|
attach_function :g_function_info_get_symbol, [:pointer], :string
|
74
74
|
attach_function :g_function_info_get_flags, [:pointer], :IFunctionInfoFlags
|
@@ -231,10 +231,10 @@ module GObjectIntrospection
|
|
231
231
|
|
232
232
|
# IVFuncInfo
|
233
233
|
bit_mask :IVFuncInfoFlags,
|
234
|
-
must_chain_up:
|
235
|
-
must_override:
|
234
|
+
must_chain_up: (1 << 0),
|
235
|
+
must_override: (1 << 1),
|
236
236
|
must_not_override: (1 << 2),
|
237
|
-
throws:
|
237
|
+
throws: (1 << 3)
|
238
238
|
|
239
239
|
attach_function :g_vfunc_info_get_flags, [:pointer], :IVFuncInfoFlags
|
240
240
|
attach_function :g_vfunc_info_get_invoker, [:pointer], :pointer
|
@@ -294,9 +294,9 @@ module GObjectIntrospection
|
|
294
294
|
|
295
295
|
# NOTE: This type has more values, but these are the ones used
|
296
296
|
bit_mask :ParamFlags,
|
297
|
-
readable:
|
298
|
-
writable:
|
299
|
-
construct:
|
297
|
+
readable: (1 << 0),
|
298
|
+
writable: (1 << 1),
|
299
|
+
construct: (1 << 2),
|
300
300
|
construct_only: (1 << 3)
|
301
301
|
|
302
302
|
attach_function :g_property_info_get_flags, [:pointer], :ParamFlags
|
@@ -25,27 +25,27 @@ require "ffi-gobject_introspection/i_unresolved_info"
|
|
25
25
|
module GObjectIntrospection
|
26
26
|
# Map info type to class. Default is IBaseInfo.
|
27
27
|
TYPEMAP = {
|
28
|
-
invalid:
|
29
|
-
function:
|
30
|
-
callback:
|
31
|
-
struct:
|
28
|
+
invalid: IBaseInfo,
|
29
|
+
function: IFunctionInfo,
|
30
|
+
callback: ICallbackInfo,
|
31
|
+
struct: IStructInfo,
|
32
32
|
# TODO: There's no GIBoxedInfo, so what does :boxed mean?
|
33
|
-
boxed:
|
34
|
-
enum:
|
35
|
-
flags:
|
36
|
-
object:
|
37
|
-
interface:
|
38
|
-
constant:
|
33
|
+
boxed: IBaseInfo,
|
34
|
+
enum: IEnumInfo,
|
35
|
+
flags: IFlagsInfo,
|
36
|
+
object: IObjectInfo,
|
37
|
+
interface: IInterfaceInfo,
|
38
|
+
constant: IConstantInfo,
|
39
39
|
invalid_was_error_domain: IBaseInfo,
|
40
|
-
union:
|
41
|
-
value:
|
42
|
-
signal:
|
43
|
-
vfunc:
|
44
|
-
property:
|
45
|
-
field:
|
46
|
-
arg:
|
47
|
-
type:
|
48
|
-
unresolved:
|
40
|
+
union: IUnionInfo,
|
41
|
+
value: IValueInfo,
|
42
|
+
signal: ISignalInfo,
|
43
|
+
vfunc: IVFuncInfo,
|
44
|
+
property: IPropertyInfo,
|
45
|
+
field: IFieldInfo,
|
46
|
+
arg: IArgInfo,
|
47
|
+
type: ITypeInfo,
|
48
|
+
unresolved: IUnresolvedInfo
|
49
49
|
}.freeze
|
50
50
|
end
|
51
51
|
|
data/lib/gir_ffi/builder.rb
CHANGED
@@ -28,11 +28,11 @@ module GirFFI
|
|
28
28
|
|
29
29
|
def capture_variable_names
|
30
30
|
@capture_variable_names ||=
|
31
|
-
all_builders.
|
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.
|
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.
|
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.
|
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.
|
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
|
-
|
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
|
51
|
-
|
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:
|
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
|