gir_ffi 0.15.4 → 0.15.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cd304c670b5b7b26e9bbaa939f2b5162ef3f92f7c0bd78d8e524b1586cbdb3b
4
- data.tar.gz: ccf4916ed552cf23752fb6270a61cfffdea53269b7d4bdb0bb408f3e3de7ae59
3
+ metadata.gz: d1bab3fa290a2ef0cb49ee4bb2b24f29f6ef5ae0bf4bbdd83ed92bc28b9aa8e0
4
+ data.tar.gz: c87ddb7f7f41a033319dafd849db129a72afb2cd6fba5e2ffc64715e1cc1e446
5
5
  SHA512:
6
- metadata.gz: 59fa0cf7451808b87a1ff028c0b8309d7c46c2acbbc894c535db4e1b3f30be7d6ee9649472a6932dd1fea0747bda6f56ceb3c753c48370750966c06da509f5bf
7
- data.tar.gz: e2bd4de38d2db08b17e20c1bc42556530b4b14312400d5b9e15dc201eaf1494606bfe56c7fcdf78d632d164f6b553e897f488d533d70ab6d35042e069e5c5f61
6
+ metadata.gz: 7ff032878aa00fea1c6096f8b09509e6cbee0c492f864c1c258e4c1b1932f0052e2efda13517e2e381f367f91713ed0e56f42bcc302abe2de04103607beac8dd
7
+ data.tar.gz: 4f90c766aee3e8953a8f017e94284db5be4cc0cf93991795ee2e77aa66c700995ec9f3feeb336169f02b618468675a2744f5159a790819c5248422a85baa789f
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.5 / 2020-11-13
4
+
5
+ * Make building and finding metaclasses via Builder.build_class work again
6
+
3
7
  ## 0.15.4 / 2020-11-01
4
8
 
5
9
  * Support disguised object class structs
@@ -11,9 +11,7 @@ module GLib
11
11
  nil
12
12
  when FFI::Pointer
13
13
  ptr
14
- when self
15
- ptr.to_ptr
16
- when GirFFI::BoxedBase
14
+ when self, GirFFI::BoxedBase
17
15
  ptr.to_ptr
18
16
  end
19
17
 
@@ -86,7 +86,7 @@ module GObject
86
86
  load_class :ParamFlags
87
87
 
88
88
  # NOTE: This Lib module is set up in `gir_ffi-base/gobject/lib.rb`.
89
- module Lib
89
+ Lib.class_eval do
90
90
  attach_function :g_object_ref_sink, [:pointer], :pointer
91
91
  attach_function :g_object_ref, [:pointer], :pointer
92
92
  attach_function :g_object_unref, [:pointer], :pointer
@@ -7,7 +7,25 @@ GObject.load_class :Object
7
7
  module GObject
8
8
  # Overrides for GObject, GObject's generic base class.
9
9
  class Object
10
- if !GLib.check_version(2, 54, 0)
10
+ if GLib.check_version(2, 54, 0)
11
+ setup_method! "new"
12
+
13
+ # Before GLib 2.54.0, use g_object_newv, which takes an array of GParameter.
14
+ def initialize_with_automatic_gtype(properties = {})
15
+ gparameters = properties.map do |name, value|
16
+ name = name.to_s
17
+ property_param_spec(name)
18
+ GObject::Parameter.new.tap do |gparam|
19
+ gparam.name = name
20
+ gparam.value = value
21
+ end
22
+ end
23
+ initialize_without_automatic_gtype(self.class.gtype, gparameters)
24
+ end
25
+
26
+ alias initialize_without_automatic_gtype initialize
27
+ alias initialize initialize_with_automatic_gtype
28
+ else
11
29
  GObject::Lib.attach_function(:g_object_new_with_properties,
12
30
  [:size_t, :uint32, :pointer, :pointer],
13
31
  :pointer)
@@ -43,24 +61,6 @@ module GObject
43
61
  obj.__send__ :initialize, *args, &block
44
62
  obj
45
63
  end
46
- else
47
- setup_method! "new"
48
-
49
- # Before GLib 2.54.0, use g_object_newv, which takes an array of GParameter.
50
- def initialize_with_automatic_gtype(properties = {})
51
- gparameters = properties.map do |name, value|
52
- name = name.to_s
53
- property_param_spec(name)
54
- GObject::Parameter.new.tap do |gparam|
55
- gparam.name = name
56
- gparam.value = value
57
- end
58
- end
59
- initialize_without_automatic_gtype(self.class.gtype, gparameters)
60
- end
61
-
62
- alias initialize_without_automatic_gtype initialize
63
- alias initialize initialize_with_automatic_gtype
64
64
  end
65
65
 
66
66
  alias base_initialize initialize
@@ -110,10 +110,10 @@ module GObjectIntrospection
110
110
  def container
111
111
  @container ||= begin
112
112
  ptr = Lib.g_base_info_get_container self
113
- return if ptr.null?
114
-
115
- Lib.g_base_info_ref ptr
116
- IRepository.wrap_ibaseinfo_pointer ptr
113
+ unless ptr.null?
114
+ Lib.g_base_info_ref ptr
115
+ IRepository.wrap_ibaseinfo_pointer ptr
116
+ end
117
117
  end
118
118
  end
119
119
 
@@ -23,9 +23,8 @@ module GirFFI
23
23
  fund = GObject.type_fundamental gtype
24
24
  if fund == GObject::TYPE_BOXED
25
25
  UnintrospectableBoxedInfo.new gtype
26
- elsif fund == GObject::TYPE_OBJECT
27
- UnintrospectableTypeInfo.new gtype
28
- elsif fund >= GObject::TYPE_RESERVED_USER_FIRST
26
+ elsif fund == GObject::TYPE_OBJECT ||
27
+ fund >= GObject::TYPE_RESERVED_USER_FIRST
29
28
  UnintrospectableTypeInfo.new gtype
30
29
  else
31
30
  raise "Unable to handle type #{GObject.type_name gtype}"
@@ -39,7 +39,7 @@ module GirFFI
39
39
  def receiver_call_argument
40
40
  container_type_info = ReceiverTypeInfo.new(container_info)
41
41
  if @info.instance_ownership_transfer == :everything &&
42
- container_type_info.flattened_tag == :object
42
+ container_type_info.flattened_tag == :object
43
43
  "self.ref"
44
44
  else
45
45
  "self"
@@ -9,8 +9,8 @@ module GirFFI
9
9
  class InterfaceBuilder < RegisteredTypeBuilder
10
10
  def interface_struct
11
11
  @interface_struct ||=
12
- ClassStructBuilder.new(iface_struct_info,
13
- GObject::TypeInterface).build_class
12
+ StructBuilder.new(iface_struct_info,
13
+ superclass: GObject::TypeInterface).build_class
14
14
  end
15
15
 
16
16
  private
@@ -43,7 +43,7 @@ module GirFFI
43
43
  def find_namespaced_class_info(classname)
44
44
  name = classname.to_s
45
45
  info = gir.find_by_name(@namespace, name) ||
46
- gir.find_by_name(@namespace, name.sub(/^./, &:downcase))
46
+ gir.find_by_name(@namespace, name.sub(/^./, &:downcase))
47
47
  unless info
48
48
  raise NameError,
49
49
  "Class #{classname} not found in namespace #{@namespace}"
@@ -3,7 +3,6 @@
3
3
  require "gir_ffi/builders/registered_type_builder"
4
4
  require "gir_ffi/builders/with_layout"
5
5
  require "gir_ffi/builders/property_builder"
6
- require "gir_ffi/builders/class_struct_builder"
7
6
  require "gir_ffi/object_base"
8
7
  require "gir_ffi/struct"
9
8
 
@@ -38,11 +37,14 @@ module GirFFI
38
37
 
39
38
  def object_class_struct
40
39
  @object_class_struct ||=
41
- if object_class_struct_info
42
- ClassStructBuilder.new(object_class_struct_info,
43
- parent_builder.object_class_struct).build_class
44
- else
45
- parent_builder.object_class_struct
40
+ begin
41
+ parent_struct = parent_builder.object_class_struct
42
+ if object_class_struct_info
43
+ StructBuilder.new(object_class_struct_info,
44
+ superclass: parent_struct).build_class
45
+ else
46
+ parent_struct
47
+ end
46
48
  end
47
49
  end
48
50
 
@@ -10,23 +10,48 @@ module GirFFI
10
10
  class StructBuilder < RegisteredTypeBuilder
11
11
  include StructLike
12
12
 
13
- def layout_superclass
14
- GirFFI::Struct
13
+ def initialize(info, superclass: nil)
14
+ @superclass = superclass
15
+ super info
15
16
  end
16
17
 
17
18
  def superclass
18
- raise "Use ClassStructBuilder to build #{info.full_type_name}" if info.gtype_struct?
19
- return BoxedBase if GObject.type_fundamental(info.gtype) == GObject::TYPE_BOXED
19
+ @superclass ||= if info.gtype_struct?
20
+ gtype_struct_parent
21
+ elsif GObject.type_fundamental(info.gtype) == GObject::TYPE_BOXED
22
+ BoxedBase
23
+ else
24
+ StructBase
25
+ end
26
+ end
20
27
 
21
- StructBase
28
+ private
29
+
30
+ def layout_superclass
31
+ GirFFI::Struct
22
32
  end
23
33
 
24
34
  def klass
25
35
  @klass ||= get_or_define_class(namespace_module, @classname) { superclass }
26
36
  end
27
37
 
38
+ def parent_info
39
+ @parent_info ||= parent_field_type&.interface
40
+ end
41
+
28
42
  def parent_field_type
29
- fields.first.field_type
43
+ fields.first&.field_type
44
+ end
45
+
46
+ def gtype_struct_parent
47
+ full_name = info.full_type_name
48
+ if full_name == "GObject::InitiallyUnownedClass"
49
+ GObject::ObjectClass
50
+ else
51
+ raise "Unable to calculate parent class for #{full_name}" unless parent_info
52
+
53
+ Builder.build_class parent_info
54
+ end
30
55
  end
31
56
  end
32
57
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Current GirFFI version
4
4
  module GirFFI
5
- VERSION = "0.15.4"
5
+ VERSION = "0.15.5"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gir_ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.4
4
+ version: 0.15.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matijs van Zuijlen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-01 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.1.0
131
+ version: 1.3.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.1.0
138
+ version: 1.3.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop-minitest
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -286,7 +286,6 @@ files:
286
286
  - lib/gir_ffi/builders/callback_argument_builder.rb
287
287
  - lib/gir_ffi/builders/callback_builder.rb
288
288
  - lib/gir_ffi/builders/callback_return_value_builder.rb
289
- - lib/gir_ffi/builders/class_struct_builder.rb
290
289
  - lib/gir_ffi/builders/closure_argument_builder.rb
291
290
  - lib/gir_ffi/builders/closure_convertor.rb
292
291
  - lib/gir_ffi/builders/closure_return_value_builder.rb
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi/builders/struct_builder"
4
-
5
- module GirFFI
6
- module Builders
7
- # Implements the creation of a class representing a Struct.
8
- class ClassStructBuilder < RegisteredTypeBuilder
9
- include StructLike
10
-
11
- attr_reader :superclass
12
-
13
- def initialize(info, super_class_struct)
14
- @superclass = super_class_struct
15
- super info
16
- raise "Info does not represent gtype_struct" unless info.gtype_struct?
17
- end
18
-
19
- def layout_superclass
20
- GirFFI::Struct
21
- end
22
- end
23
- end
24
- end