google-protobuf 3.25.0.rc.2 → 4.26.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/ext/google/protobuf_c/convert.c +7 -4
  3. data/ext/google/protobuf_c/defs.c +172 -24
  4. data/ext/google/protobuf_c/extconf.rb +1 -1
  5. data/ext/google/protobuf_c/glue.c +37 -2
  6. data/ext/google/protobuf_c/map.c +21 -8
  7. data/ext/google/protobuf_c/map.h +3 -0
  8. data/ext/google/protobuf_c/message.c +73 -71
  9. data/ext/google/protobuf_c/message.h +7 -0
  10. data/ext/google/protobuf_c/protobuf.c +19 -6
  11. data/ext/google/protobuf_c/repeated_field.c +14 -4
  12. data/ext/google/protobuf_c/repeated_field.h +3 -0
  13. data/ext/google/protobuf_c/ruby-upb.c +11788 -10795
  14. data/ext/google/protobuf_c/ruby-upb.h +5164 -4242
  15. data/ext/google/protobuf_c/shared_convert.c +5 -3
  16. data/ext/google/protobuf_c/shared_convert.h +2 -2
  17. data/ext/google/protobuf_c/shared_message.c +8 -6
  18. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.c +467 -0
  19. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +9 -8
  20. data/lib/google/protobuf/any_pb.rb +1 -22
  21. data/lib/google/protobuf/api_pb.rb +1 -24
  22. data/lib/google/protobuf/descriptor_pb.rb +2 -23
  23. data/lib/google/protobuf/duration_pb.rb +1 -22
  24. data/lib/google/protobuf/empty_pb.rb +1 -22
  25. data/lib/google/protobuf/ffi/descriptor.rb +11 -1
  26. data/lib/google/protobuf/ffi/descriptor_pool.rb +14 -9
  27. data/lib/google/protobuf/ffi/enum_descriptor.rb +11 -1
  28. data/lib/google/protobuf/ffi/ffi.rb +3 -1
  29. data/lib/google/protobuf/ffi/field_descriptor.rb +34 -15
  30. data/lib/google/protobuf/ffi/file_descriptor.rb +11 -12
  31. data/lib/google/protobuf/ffi/internal/convert.rb +7 -23
  32. data/lib/google/protobuf/ffi/map.rb +13 -0
  33. data/lib/google/protobuf/ffi/message.rb +20 -2
  34. data/lib/google/protobuf/ffi/object_cache.rb +3 -3
  35. data/lib/google/protobuf/ffi/oneof_descriptor.rb +18 -11
  36. data/lib/google/protobuf/ffi/repeated_field.rb +15 -133
  37. data/lib/google/protobuf/field_mask_pb.rb +1 -22
  38. data/lib/google/protobuf/internal/object_cache.rb +99 -0
  39. data/lib/google/protobuf/plugin_pb.rb +2 -24
  40. data/lib/google/protobuf/repeated_field.rb +1 -2
  41. data/lib/google/protobuf/source_context_pb.rb +1 -22
  42. data/lib/google/protobuf/struct_pb.rb +1 -22
  43. data/lib/google/protobuf/timestamp_pb.rb +1 -22
  44. data/lib/google/protobuf/type_pb.rb +1 -24
  45. data/lib/google/protobuf/wrappers_pb.rb +1 -22
  46. data/lib/google/protobuf.rb +1 -1
  47. data/lib/google/protobuf_ffi.rb +1 -2
  48. data/lib/google/protobuf_native.rb +0 -1
  49. data/lib/google/tasks/ffi.rake +43 -37
  50. metadata +10 -13
  51. data/ext/google/protobuf_c/third_party/utf8_range/naive.c +0 -92
  52. data/ext/google/protobuf_c/third_party/utf8_range/range2-neon.c +0 -157
  53. data/ext/google/protobuf_c/third_party/utf8_range/range2-sse.c +0 -170
  54. data/lib/google/protobuf/descriptor_dsl.rb +0 -465
  55. data/lib/google/protobuf/object_cache.rb +0 -97
@@ -5,8 +5,6 @@
5
5
  # license that can be found in the LICENSE file or at
6
6
  # https://developers.google.com/open-source/licenses/bsd
7
7
 
8
- require 'forwardable'
9
-
10
8
  #
11
9
  # This class makes RepeatedField act (almost-) like a Ruby Array.
12
10
  # It has convenience methods that extend the core C or Java based
@@ -15,7 +13,7 @@ require 'forwardable'
15
13
  # This is a best-effort to mirror Array behavior. Two comments:
16
14
  # 1) patches always welcome :)
17
15
  # 2) if performance is an issue, feel free to rewrite the method
18
- # in jruby and C. The source code has plenty of examples
16
+ # in C. The source code has plenty of examples
19
17
  #
20
18
  # KNOWN ISSUES
21
19
  # - #[]= doesn't allow less used approaches such as `arr[1, 2] = 'fizz'`
@@ -35,19 +33,6 @@ module Google
35
33
  end
36
34
 
37
35
  class RepeatedField
38
- extend Forwardable
39
- # NOTE: using delegators rather than method_missing to make the
40
- # relationship explicit instead of implicit
41
- def_delegators :to_ary,
42
- :&, :*, :-, :'<=>',
43
- :assoc, :bsearch, :bsearch_index, :combination, :compact, :count,
44
- :cycle, :dig, :drop, :drop_while, :eql?, :fetch, :find_index, :flatten,
45
- :include?, :index, :inspect, :join,
46
- :pack, :permutation, :product, :pretty_print, :pretty_print_cycle,
47
- :rassoc, :repeated_combination, :repeated_permutation, :reverse,
48
- :rindex, :rotate, :sample, :shuffle, :shelljoin,
49
- :to_s, :transpose, :uniq, :|
50
-
51
36
  include Enumerable
52
37
 
53
38
  ##
@@ -189,6 +174,18 @@ module Google
189
174
  end
190
175
  alias size :length
191
176
 
177
+ def freeze
178
+ return self if frozen?
179
+ super
180
+ @arena.pin self
181
+ if type == :message
182
+ each do |element|
183
+ element.freeze
184
+ end
185
+ end
186
+ self
187
+ end
188
+
192
189
  def dup
193
190
  instance = self.class.allocate
194
191
  instance.send(:initialize, type, descriptor: descriptor, arena: arena)
@@ -262,123 +259,6 @@ module Google
262
259
  push(*other.to_a)
263
260
  end
264
261
 
265
- def first(n=nil)
266
- if n.nil?
267
- return self[0]
268
- elsif n < 0
269
- raise ArgumentError, "negative array size"
270
- else
271
- return self[0...n]
272
- end
273
- end
274
-
275
-
276
- def last(n=nil)
277
- if n.nil?
278
- return self[-1]
279
- elsif n < 0
280
- raise ArgumentError, "negative array size"
281
- else
282
- start = [self.size-n, 0].max
283
- return self[start...self.size]
284
- end
285
- end
286
-
287
-
288
- def pop(n=nil)
289
- if n
290
- results = []
291
- n.times{ results << pop_one }
292
- return results
293
- else
294
- return pop_one
295
- end
296
- end
297
-
298
-
299
- def empty?
300
- self.size == 0
301
- end
302
-
303
- # array aliases into enumerable
304
- alias_method :each_index, :each_with_index
305
- alias_method :slice, :[]
306
- alias_method :values_at, :select
307
- alias_method :map, :collect
308
-
309
-
310
- class << self
311
- def define_array_wrapper_method(method_name)
312
- define_method(method_name) do |*args, &block|
313
- arr = self.to_a
314
- result = arr.send(method_name, *args)
315
- self.replace(arr)
316
- return result if result
317
- return block ? block.call : result
318
- end
319
- end
320
- private :define_array_wrapper_method
321
-
322
-
323
- def define_array_wrapper_with_result_method(method_name)
324
- define_method(method_name) do |*args, &block|
325
- # result can be an Enumerator, Array, or nil
326
- # Enumerator can sometimes be returned if a block is an optional argument and it is not passed in
327
- # nil usually specifies that no change was made
328
- result = self.to_a.send(method_name, *args, &block)
329
- if result
330
- new_arr = result.to_a
331
- self.replace(new_arr)
332
- if result.is_a?(Enumerator)
333
- # generate a fresh enum; rewinding the exiting one, in Ruby 2.2, will
334
- # reset the enum with the same length, but all the #next calls will
335
- # return nil
336
- result = new_arr.to_enum
337
- # generate a wrapper enum so any changes which occur by a chained
338
- # enum can be captured
339
- ie = ProxyingEnumerator.new(self, result)
340
- result = ie.to_enum
341
- end
342
- end
343
- result
344
- end
345
- end
346
- private :define_array_wrapper_with_result_method
347
- end
348
-
349
-
350
- %w(delete delete_at shift slice! unshift).each do |method_name|
351
- define_array_wrapper_method(method_name)
352
- end
353
-
354
-
355
- %w(collect! compact! delete_if fill flatten! insert reverse!
356
- rotate! select! shuffle! sort! sort_by! uniq!).each do |method_name|
357
- define_array_wrapper_with_result_method(method_name)
358
- end
359
- alias_method :keep_if, :select!
360
- alias_method :map!, :collect!
361
- alias_method :reject!, :delete_if
362
-
363
-
364
- # propagates changes made by user of enumerator back to the original repeated field.
365
- # This only applies in cases where the calling function which created the enumerator,
366
- # such as #sort!, modifies itself rather than a new array, such as #sort
367
- class ProxyingEnumerator < Struct.new(:repeated_field, :external_enumerator)
368
- def each(*args, &block)
369
- results = []
370
- external_enumerator.each_with_index do |val, i|
371
- result = yield(val)
372
- results << result
373
- #nil means no change occurred from yield; usually occurs when #to_a is called
374
- if result
375
- repeated_field[i] = result if result != val
376
- end
377
- end
378
- results
379
- end
380
- end
381
-
382
262
  private
383
263
  include Google::Protobuf::Internal::Convert
384
264
 
@@ -501,3 +381,5 @@ module Google
501
381
  end
502
382
  end
503
383
  end
384
+
385
+ require 'google/protobuf/repeated_field'
@@ -8,28 +8,7 @@ require 'google/protobuf'
8
8
  descriptor_data = "\n google/protobuf/field_mask.proto\x12\x0fgoogle.protobuf\"\x1a\n\tFieldMask\x12\r\n\x05paths\x18\x01 \x03(\tB\x85\x01\n\x13\x63om.google.protobufB\x0e\x46ieldMaskProtoP\x01Z2google.golang.org/protobuf/types/known/fieldmaskpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
9
 
10
10
  pool = Google::Protobuf::DescriptorPool.generated_pool
11
-
12
- begin
13
- pool.add_serialized_file(descriptor_data)
14
- rescue TypeError
15
- # Compatibility code: will be removed in the next major version.
16
- require 'google/protobuf/descriptor_pb'
17
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
- parsed.clear_dependency
19
- serialized = parsed.class.encode(parsed)
20
- file = pool.add_serialized_file(serialized)
21
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
- imports = [
23
- ]
24
- imports.each do |type_name, expected_filename|
25
- import_file = pool.lookup(type_name).file_descriptor
26
- if import_file.name != expected_filename
27
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
28
- end
29
- end
30
- warn "Each proto file must use a consistent fully-qualified name."
31
- warn "This will become an error in the next major version."
32
- end
11
+ pool.add_serialized_file(descriptor_data)
33
12
 
34
13
  module Google
35
14
  module Protobuf
@@ -0,0 +1,99 @@
1
+ # Protocol Buffers - Google's data interchange format
2
+ # Copyright 2023 Google Inc. All rights reserved.
3
+ #
4
+ # Use of this source code is governed by a BSD-style
5
+ # license that can be found in the LICENSE file or at
6
+ # https://developers.google.com/open-source/licenses/bsd
7
+
8
+ module Google
9
+ module Protobuf
10
+ module Internal
11
+ # A pointer -> Ruby Object cache that keeps references to Ruby wrapper
12
+ # objects. This allows us to look up any Ruby wrapper object by the address
13
+ # of the object it is wrapping. That way we can avoid ever creating two
14
+ # different wrapper objects for the same C object, which saves memory and
15
+ # preserves object identity.
16
+ #
17
+ # We use WeakMap for the cache. If sizeof(long) > sizeof(VALUE), we also
18
+ # need a secondary Hash to store WeakMap keys, because our pointer keys may
19
+ # need to be stored as Bignum instead of Fixnum. Since WeakMap is weak for
20
+ # both keys and values, a Bignum key will cause the WeakMap entry to be
21
+ # collected immediately unless there is another reference to the Bignum.
22
+ # This happens on 64-bit Windows, on which pointers are 64 bits but longs
23
+ # are 32 bits. In this case, we enable the secondary Hash to hold the keys
24
+ # and prevent them from being collected.
25
+ class ObjectCache
26
+ def initialize
27
+ @map = ObjectSpace::WeakMap.new
28
+ @mutex = Mutex.new
29
+ end
30
+
31
+ def get(key)
32
+ @map[key]
33
+ end
34
+
35
+ def try_add(key, value)
36
+ @map[key] || @mutex.synchronize do
37
+ @map[key] ||= value
38
+ end
39
+ end
40
+ end
41
+
42
+ class LegacyObjectCache
43
+ def initialize
44
+ @secondary_map = {}
45
+ @map = ObjectSpace::WeakMap.new
46
+ @mutex = Mutex.new
47
+ end
48
+
49
+ def get(key)
50
+ value = if secondary_key = @secondary_map[key]
51
+ @map[secondary_key]
52
+ else
53
+ @mutex.synchronize do
54
+ @map[(@secondary_map[key] ||= Object.new)]
55
+ end
56
+ end
57
+
58
+ # GC if we could remove at least 2000 entries or 20% of the table size
59
+ # (whichever is greater). Since the cost of the GC pass is O(N), we
60
+ # want to make sure that we condition this on overall table size, to
61
+ # avoid O(N^2) CPU costs.
62
+ cutoff = (@secondary_map.size * 0.2).ceil
63
+ cutoff = 2_000 if cutoff < 2_000
64
+ if (@secondary_map.size - @map.size) > cutoff
65
+ purge
66
+ end
67
+
68
+ value
69
+ end
70
+
71
+ def try_add(key, value)
72
+ if secondary_key = @secondary_map[key]
73
+ if old_value = @map[secondary_key]
74
+ return old_value
75
+ end
76
+ end
77
+
78
+ @mutex.synchronize do
79
+ secondary_key ||= (@secondary_map[key] ||= Object.new)
80
+ @map[secondary_key] ||= value
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ def purge
87
+ @mutex.synchronize do
88
+ @secondary_map.each do |key, secondary_key|
89
+ unless @map.key?(secondary_key)
90
+ @secondary_map.delete(key)
91
+ end
92
+ end
93
+ end
94
+ nil
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -7,32 +7,10 @@ require 'google/protobuf'
7
7
  require 'google/protobuf/descriptor_pb'
8
8
 
9
9
 
10
- descriptor_data = "\n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"F\n\x07Version\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0e\n\x06suffix\x18\x04 \x01(\t\"\x81\x02\n\x14\x43odeGeneratorRequest\x12\x18\n\x10\x66ile_to_generate\x18\x01 \x03(\t\x12\x11\n\tparameter\x18\x02 \x01(\t\x12\x38\n\nproto_file\x18\x0f \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12\x45\n\x17source_file_descriptors\x18\x11 \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12;\n\x10\x63ompiler_version\x18\x03 \x01(\x0b\x32!.google.protobuf.compiler.Version\"\xe0\x02\n\x15\x43odeGeneratorResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x1a\n\x12supported_features\x18\x02 \x01(\x04\x12\x42\n\x04\x66ile\x18\x0f \x03(\x0b\x32\x34.google.protobuf.compiler.CodeGeneratorResponse.File\x1a\x7f\n\x04\x46ile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0finsertion_point\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x0f \x01(\t\x12?\n\x13generated_code_info\x18\x10 \x01(\x0b\x32\".google.protobuf.GeneratedCodeInfo\"W\n\x07\x46\x65\x61ture\x12\x10\n\x0c\x46\x45\x41TURE_NONE\x10\x00\x12\x1b\n\x17\x46\x45\x41TURE_PROTO3_OPTIONAL\x10\x01\x12\x1d\n\x19\x46\x45\x41TURE_SUPPORTS_EDITIONS\x10\x02\x42r\n\x1c\x63om.google.protobuf.compilerB\x0cPluginProtosZ)google.golang.org/protobuf/types/pluginpb\xaa\x02\x18Google.Protobuf.Compiler"
10
+ descriptor_data = "\n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"F\n\x07Version\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0e\n\x06suffix\x18\x04 \x01(\t\"\x81\x02\n\x14\x43odeGeneratorRequest\x12\x18\n\x10\x66ile_to_generate\x18\x01 \x03(\t\x12\x11\n\tparameter\x18\x02 \x01(\t\x12\x38\n\nproto_file\x18\x0f \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12\x45\n\x17source_file_descriptors\x18\x11 \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12;\n\x10\x63ompiler_version\x18\x03 \x01(\x0b\x32!.google.protobuf.compiler.Version\"\x92\x03\n\x15\x43odeGeneratorResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x1a\n\x12supported_features\x18\x02 \x01(\x04\x12\x17\n\x0fminimum_edition\x18\x03 \x01(\x05\x12\x17\n\x0fmaximum_edition\x18\x04 \x01(\x05\x12\x42\n\x04\x66ile\x18\x0f \x03(\x0b\x32\x34.google.protobuf.compiler.CodeGeneratorResponse.File\x1a\x7f\n\x04\x46ile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0finsertion_point\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x0f \x01(\t\x12?\n\x13generated_code_info\x18\x10 \x01(\x0b\x32\".google.protobuf.GeneratedCodeInfo\"W\n\x07\x46\x65\x61ture\x12\x10\n\x0c\x46\x45\x41TURE_NONE\x10\x00\x12\x1b\n\x17\x46\x45\x41TURE_PROTO3_OPTIONAL\x10\x01\x12\x1d\n\x19\x46\x45\x41TURE_SUPPORTS_EDITIONS\x10\x02\x42r\n\x1c\x63om.google.protobuf.compilerB\x0cPluginProtosZ)google.golang.org/protobuf/types/pluginpb\xaa\x02\x18Google.Protobuf.Compiler"
11
11
 
12
12
  pool = Google::Protobuf::DescriptorPool.generated_pool
13
-
14
- begin
15
- pool.add_serialized_file(descriptor_data)
16
- rescue TypeError
17
- # Compatibility code: will be removed in the next major version.
18
- require 'google/protobuf/descriptor_pb'
19
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
20
- parsed.clear_dependency
21
- serialized = parsed.class.encode(parsed)
22
- file = pool.add_serialized_file(serialized)
23
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
24
- imports = [
25
- ["google.protobuf.FileDescriptorProto", "google/protobuf/descriptor.proto"],
26
- ]
27
- imports.each do |type_name, expected_filename|
28
- import_file = pool.lookup(type_name).file_descriptor
29
- if import_file.name != expected_filename
30
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
31
- end
32
- end
33
- warn "Each proto file must use a consistent fully-qualified name."
34
- warn "This will become an error in the next major version."
35
- end
13
+ pool.add_serialized_file(descriptor_data)
36
14
 
37
15
  module Google
38
16
  module Protobuf
@@ -94,7 +94,6 @@ module Google
94
94
  end
95
95
 
96
96
  # array aliases into enumerable
97
- alias_method :each_index, :each_with_index
98
97
  alias_method :slice, :[]
99
98
  alias_method :values_at, :select
100
99
  alias_method :map, :collect
@@ -145,7 +144,7 @@ module Google
145
144
  end
146
145
 
147
146
 
148
- %w(collect! compact! delete_if fill flatten! insert reverse!
147
+ %w(collect! compact! delete_if each_index fill flatten! insert reverse!
149
148
  rotate! select! shuffle! sort! sort_by! uniq!).each do |method_name|
150
149
  define_array_wrapper_with_result_method(method_name)
151
150
  end
@@ -8,28 +8,7 @@ require 'google/protobuf'
8
8
  descriptor_data = "\n$google/protobuf/source_context.proto\x12\x0fgoogle.protobuf\"\"\n\rSourceContext\x12\x11\n\tfile_name\x18\x01 \x01(\tB\x8a\x01\n\x13\x63om.google.protobufB\x12SourceContextProtoP\x01Z6google.golang.org/protobuf/types/known/sourcecontextpb\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
9
 
10
10
  pool = Google::Protobuf::DescriptorPool.generated_pool
11
-
12
- begin
13
- pool.add_serialized_file(descriptor_data)
14
- rescue TypeError
15
- # Compatibility code: will be removed in the next major version.
16
- require 'google/protobuf/descriptor_pb'
17
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
- parsed.clear_dependency
19
- serialized = parsed.class.encode(parsed)
20
- file = pool.add_serialized_file(serialized)
21
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
- imports = [
23
- ]
24
- imports.each do |type_name, expected_filename|
25
- import_file = pool.lookup(type_name).file_descriptor
26
- if import_file.name != expected_filename
27
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
28
- end
29
- end
30
- warn "Each proto file must use a consistent fully-qualified name."
31
- warn "This will become an error in the next major version."
32
- end
11
+ pool.add_serialized_file(descriptor_data)
33
12
 
34
13
  module Google
35
14
  module Protobuf
@@ -8,28 +8,7 @@ require 'google/protobuf'
8
8
  descriptor_data = "\n\x1cgoogle/protobuf/struct.proto\x12\x0fgoogle.protobuf\"\x84\x01\n\x06Struct\x12\x33\n\x06\x66ields\x18\x01 \x03(\x0b\x32#.google.protobuf.Struct.FieldsEntry\x1a\x45\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\"\xea\x01\n\x05Value\x12\x30\n\nnull_value\x18\x01 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x12\x16\n\x0cnumber_value\x18\x02 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x12/\n\x0cstruct_value\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x12\x30\n\nlist_value\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueH\x00\x42\x06\n\x04kind\"3\n\tListValue\x12&\n\x06values\x18\x01 \x03(\x0b\x32\x16.google.protobuf.Value*\x1b\n\tNullValue\x12\x0e\n\nNULL_VALUE\x10\x00\x42\x7f\n\x13\x63om.google.protobufB\x0bStructProtoP\x01Z/google.golang.org/protobuf/types/known/structpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
9
 
10
10
  pool = Google::Protobuf::DescriptorPool.generated_pool
11
-
12
- begin
13
- pool.add_serialized_file(descriptor_data)
14
- rescue TypeError
15
- # Compatibility code: will be removed in the next major version.
16
- require 'google/protobuf/descriptor_pb'
17
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
- parsed.clear_dependency
19
- serialized = parsed.class.encode(parsed)
20
- file = pool.add_serialized_file(serialized)
21
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
- imports = [
23
- ]
24
- imports.each do |type_name, expected_filename|
25
- import_file = pool.lookup(type_name).file_descriptor
26
- if import_file.name != expected_filename
27
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
28
- end
29
- end
30
- warn "Each proto file must use a consistent fully-qualified name."
31
- warn "This will become an error in the next major version."
32
- end
11
+ pool.add_serialized_file(descriptor_data)
33
12
 
34
13
  module Google
35
14
  module Protobuf
@@ -8,28 +8,7 @@ require 'google/protobuf'
8
8
  descriptor_data = "\n\x1fgoogle/protobuf/timestamp.proto\x12\x0fgoogle.protobuf\"+\n\tTimestamp\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\x42\x85\x01\n\x13\x63om.google.protobufB\x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestamppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
9
 
10
10
  pool = Google::Protobuf::DescriptorPool.generated_pool
11
-
12
- begin
13
- pool.add_serialized_file(descriptor_data)
14
- rescue TypeError
15
- # Compatibility code: will be removed in the next major version.
16
- require 'google/protobuf/descriptor_pb'
17
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
- parsed.clear_dependency
19
- serialized = parsed.class.encode(parsed)
20
- file = pool.add_serialized_file(serialized)
21
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
- imports = [
23
- ]
24
- imports.each do |type_name, expected_filename|
25
- import_file = pool.lookup(type_name).file_descriptor
26
- if import_file.name != expected_filename
27
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
28
- end
29
- end
30
- warn "Each proto file must use a consistent fully-qualified name."
31
- warn "This will become an error in the next major version."
32
- end
11
+ pool.add_serialized_file(descriptor_data)
33
12
 
34
13
  module Google
35
14
  module Protobuf
@@ -11,30 +11,7 @@ require 'google/protobuf/source_context_pb'
11
11
  descriptor_data = "\n\x1agoogle/protobuf/type.proto\x12\x0fgoogle.protobuf\x1a\x19google/protobuf/any.proto\x1a$google/protobuf/source_context.proto\"\xe8\x01\n\x04Type\x12\x0c\n\x04name\x18\x01 \x01(\t\x12&\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x16.google.protobuf.Field\x12\x0e\n\x06oneofs\x18\x03 \x03(\t\x12(\n\x07options\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Option\x12\x36\n\x0esource_context\x18\x05 \x01(\x0b\x32\x1e.google.protobuf.SourceContext\x12\'\n\x06syntax\x18\x06 \x01(\x0e\x32\x17.google.protobuf.Syntax\x12\x0f\n\x07\x65\x64ition\x18\x07 \x01(\t\"\xd5\x05\n\x05\x46ield\x12)\n\x04kind\x18\x01 \x01(\x0e\x32\x1b.google.protobuf.Field.Kind\x12\x37\n\x0b\x63\x61rdinality\x18\x02 \x01(\x0e\x32\".google.protobuf.Field.Cardinality\x12\x0e\n\x06number\x18\x03 \x01(\x05\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x10\n\x08type_url\x18\x06 \x01(\t\x12\x13\n\x0boneof_index\x18\x07 \x01(\x05\x12\x0e\n\x06packed\x18\x08 \x01(\x08\x12(\n\x07options\x18\t \x03(\x0b\x32\x17.google.protobuf.Option\x12\x11\n\tjson_name\x18\n \x01(\t\x12\x15\n\rdefault_value\x18\x0b \x01(\t\"\xc8\x02\n\x04Kind\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\x0f\n\x0bTYPE_DOUBLE\x10\x01\x12\x0e\n\nTYPE_FLOAT\x10\x02\x12\x0e\n\nTYPE_INT64\x10\x03\x12\x0f\n\x0bTYPE_UINT64\x10\x04\x12\x0e\n\nTYPE_INT32\x10\x05\x12\x10\n\x0cTYPE_FIXED64\x10\x06\x12\x10\n\x0cTYPE_FIXED32\x10\x07\x12\r\n\tTYPE_BOOL\x10\x08\x12\x0f\n\x0bTYPE_STRING\x10\t\x12\x0e\n\nTYPE_GROUP\x10\n\x12\x10\n\x0cTYPE_MESSAGE\x10\x0b\x12\x0e\n\nTYPE_BYTES\x10\x0c\x12\x0f\n\x0bTYPE_UINT32\x10\r\x12\r\n\tTYPE_ENUM\x10\x0e\x12\x11\n\rTYPE_SFIXED32\x10\x0f\x12\x11\n\rTYPE_SFIXED64\x10\x10\x12\x0f\n\x0bTYPE_SINT32\x10\x11\x12\x0f\n\x0bTYPE_SINT64\x10\x12\"t\n\x0b\x43\x61rdinality\x12\x17\n\x13\x43\x41RDINALITY_UNKNOWN\x10\x00\x12\x18\n\x14\x43\x41RDINALITY_OPTIONAL\x10\x01\x12\x18\n\x14\x43\x41RDINALITY_REQUIRED\x10\x02\x12\x18\n\x14\x43\x41RDINALITY_REPEATED\x10\x03\"\xdf\x01\n\x04\x45num\x12\x0c\n\x04name\x18\x01 \x01(\t\x12-\n\tenumvalue\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.EnumValue\x12(\n\x07options\x18\x03 \x03(\x0b\x32\x17.google.protobuf.Option\x12\x36\n\x0esource_context\x18\x04 \x01(\x0b\x32\x1e.google.protobuf.SourceContext\x12\'\n\x06syntax\x18\x05 \x01(\x0e\x32\x17.google.protobuf.Syntax\x12\x0f\n\x07\x65\x64ition\x18\x06 \x01(\t\"S\n\tEnumValue\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06number\x18\x02 \x01(\x05\x12(\n\x07options\x18\x03 \x03(\x0b\x32\x17.google.protobuf.Option\";\n\x06Option\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any*C\n\x06Syntax\x12\x11\n\rSYNTAX_PROTO2\x10\x00\x12\x11\n\rSYNTAX_PROTO3\x10\x01\x12\x13\n\x0fSYNTAX_EDITIONS\x10\x02\x42{\n\x13\x63om.google.protobufB\tTypeProtoP\x01Z-google.golang.org/protobuf/types/known/typepb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
12
12
 
13
13
  pool = Google::Protobuf::DescriptorPool.generated_pool
14
-
15
- begin
16
- pool.add_serialized_file(descriptor_data)
17
- rescue TypeError
18
- # Compatibility code: will be removed in the next major version.
19
- require 'google/protobuf/descriptor_pb'
20
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
21
- parsed.clear_dependency
22
- serialized = parsed.class.encode(parsed)
23
- file = pool.add_serialized_file(serialized)
24
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
25
- imports = [
26
- ["google.protobuf.SourceContext", "google/protobuf/source_context.proto"],
27
- ["google.protobuf.Any", "google/protobuf/any.proto"],
28
- ]
29
- imports.each do |type_name, expected_filename|
30
- import_file = pool.lookup(type_name).file_descriptor
31
- if import_file.name != expected_filename
32
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
33
- end
34
- end
35
- warn "Each proto file must use a consistent fully-qualified name."
36
- warn "This will become an error in the next major version."
37
- end
14
+ pool.add_serialized_file(descriptor_data)
38
15
 
39
16
  module Google
40
17
  module Protobuf
@@ -8,28 +8,7 @@ require 'google/protobuf'
8
8
  descriptor_data = "\n\x1egoogle/protobuf/wrappers.proto\x12\x0fgoogle.protobuf\"\x1c\n\x0b\x44oubleValue\x12\r\n\x05value\x18\x01 \x01(\x01\"\x1b\n\nFloatValue\x12\r\n\x05value\x18\x01 \x01(\x02\"\x1b\n\nInt64Value\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1c\n\x0bUInt64Value\x12\r\n\x05value\x18\x01 \x01(\x04\"\x1b\n\nInt32Value\x12\r\n\x05value\x18\x01 \x01(\x05\"\x1c\n\x0bUInt32Value\x12\r\n\x05value\x18\x01 \x01(\r\"\x1a\n\tBoolValue\x12\r\n\x05value\x18\x01 \x01(\x08\"\x1c\n\x0bStringValue\x12\r\n\x05value\x18\x01 \x01(\t\"\x1b\n\nBytesValue\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x83\x01\n\x13\x63om.google.protobufB\rWrappersProtoP\x01Z1google.golang.org/protobuf/types/known/wrapperspb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
9
 
10
10
  pool = Google::Protobuf::DescriptorPool.generated_pool
11
-
12
- begin
13
- pool.add_serialized_file(descriptor_data)
14
- rescue TypeError
15
- # Compatibility code: will be removed in the next major version.
16
- require 'google/protobuf/descriptor_pb'
17
- parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
- parsed.clear_dependency
19
- serialized = parsed.class.encode(parsed)
20
- file = pool.add_serialized_file(serialized)
21
- warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
- imports = [
23
- ]
24
- imports.each do |type_name, expected_filename|
25
- import_file = pool.lookup(type_name).file_descriptor
26
- if import_file.name != expected_filename
27
- warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
28
- end
29
- end
30
- warn "Each proto file must use a consistent fully-qualified name."
31
- warn "This will become an error in the next major version."
32
- end
11
+ pool.add_serialized_file(descriptor_data)
33
12
 
34
13
  module Google
35
14
  module Protobuf
@@ -7,7 +7,7 @@
7
7
 
8
8
  # require mixins before we hook them into the java & c code
9
9
  require 'google/protobuf/message_exts'
10
- require 'google/protobuf/object_cache'
10
+ require 'google/protobuf/internal/object_cache'
11
11
 
12
12
  # We define these before requiring the platform-specific modules.
13
13
  # That way the module init can grab references to these.
@@ -21,7 +21,6 @@ require 'google/protobuf/ffi/map'
21
21
  require 'google/protobuf/ffi/object_cache'
22
22
  require 'google/protobuf/ffi/repeated_field'
23
23
  require 'google/protobuf/ffi/message'
24
- require 'google/protobuf/descriptor_dsl'
25
24
 
26
25
  module Google
27
26
  module Protobuf
@@ -47,4 +46,4 @@ module Google
47
46
  nil
48
47
  end
49
48
  end
50
- end
49
+ end
@@ -16,5 +16,4 @@ else
16
16
  end
17
17
  end
18
18
 
19
- require 'google/protobuf/descriptor_dsl'
20
19
  require 'google/protobuf/repeated_field'
@@ -1,5 +1,3 @@
1
- require "ffi-compiler/compile_task"
2
-
3
1
  # # @param task [FFI::Compiler::CompileTask] task to configure
4
2
  def configure_common_compile_task(task)
5
3
  if FileUtils.pwd.include? 'ext'
@@ -49,46 +47,54 @@ def with_generated_files
49
47
  end
50
48
  end
51
49
 
52
- desc "Compile Protobuf library for FFI"
53
- namespace "ffi-protobuf" do
54
- with_generated_files do
55
- # Compile Ruby UPB separately in order to limit use of -DUPB_BUILD_API to one
56
- # compilation unit.
57
- desc "Compile UPB library for FFI"
58
- namespace "ffi-upb" do
59
- with_generated_files do
60
- FFI::Compiler::CompileTask.new('ruby-upb') do |c|
61
- configure_common_compile_task c
62
- c.add_define "UPB_BUILD_API"
63
- c.exclude << "/glue.c"
64
- c.exclude << "/shared_message.c"
65
- c.exclude << "/shared_convert.c"
66
- if RbConfig::CONFIG['target_os'] =~ /darwin|linux/
67
- c.cflags << "-fvisibility=hidden"
50
+ begin
51
+ require "ffi-compiler/compile_task"
52
+
53
+ desc "Compile Protobuf library for FFI"
54
+ namespace "ffi-protobuf" do
55
+ with_generated_files do
56
+ # Compile Ruby UPB separately in order to limit use of -DUPB_BUILD_API to one
57
+ # compilation unit.
58
+ desc "Compile UPB library for FFI"
59
+ namespace "ffi-upb" do
60
+ with_generated_files do
61
+ FFI::Compiler::CompileTask.new('ruby-upb') do |c|
62
+ configure_common_compile_task c
63
+ c.add_define "UPB_BUILD_API"
64
+ c.exclude << "/glue.c"
65
+ c.exclude << "/shared_message.c"
66
+ c.exclude << "/shared_convert.c"
67
+ if RbConfig::CONFIG['target_os'] =~ /darwin|linux/
68
+ c.cflags << "-fvisibility=hidden"
69
+ end
68
70
  end
69
71
  end
70
72
  end
71
- end
72
73
 
73
- FFI::Compiler::CompileTask.new 'protobuf_c_ffi' do |c|
74
- configure_common_compile_task c
75
- # Ruby UPB was already compiled with different flags.
76
- c.exclude << "/range2-neon.c"
77
- c.exclude << "/range2-sse.c"
78
- c.exclude << "/naive.c"
79
- c.exclude << "/ruby-upb.c"
80
- end
74
+ FFI::Compiler::CompileTask.new 'protobuf_c_ffi' do |c|
75
+ configure_common_compile_task c
76
+ # Ruby UPB was already compiled with different flags.
77
+ c.exclude << "/utf8_range.c"
78
+ c.exclude << "/ruby-upb.c"
79
+ end
81
80
 
82
- # Setup dependencies so that the .o files generated by building ffi-upb are
83
- # available to link here.
84
- # TODO Can this be simplified? Can the single shared library be used
85
- # instead of the object files?
86
- protobuf_c_task = Rake::Task[:default]
87
- protobuf_c_shared_lib_task = Rake::Task[protobuf_c_task.prereqs.last]
88
- ruby_upb_shared_lib_task = Rake::Task[:"ffi-upb:default"].prereqs.first
89
- Rake::Task[ruby_upb_shared_lib_task].prereqs.each do |dependency|
90
- protobuf_c_shared_lib_task.prereqs.prepend dependency
81
+ # Setup dependencies so that the .o files generated by building ffi-upb are
82
+ # available to link here.
83
+ # TODO Can this be simplified? Can the single shared library be used
84
+ # instead of the object files?
85
+ protobuf_c_task = Rake::Task[:default]
86
+ protobuf_c_shared_lib_task = Rake::Task[protobuf_c_task.prereqs.last]
87
+ ruby_upb_shared_lib_task = Rake::Task[:"ffi-upb:default"].prereqs.first
88
+ Rake::Task[ruby_upb_shared_lib_task].prereqs.each do |dependency|
89
+ protobuf_c_shared_lib_task.prereqs.prepend dependency
90
+ end
91
+ end
92
+ end
93
+ rescue LoadError
94
+ desc "Compile Protobuf library for FFI"
95
+ namespace "ffi-protobuf" do
96
+ task :default do
97
+ warn "Skipping build of FFI; `gem install ffi-compiler` to enable."
91
98
  end
92
99
  end
93
100
  end
94
-