google-protobuf 3.17.0 → 3.23.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of google-protobuf might be problematic. Click here for more details.

Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/ext/google/protobuf_c/convert.c +128 -116
  3. data/ext/google/protobuf_c/convert.h +12 -9
  4. data/ext/google/protobuf_c/defs.c +235 -1529
  5. data/ext/google/protobuf_c/defs.h +19 -19
  6. data/ext/google/protobuf_c/extconf.rb +12 -6
  7. data/ext/google/protobuf_c/map.c +108 -110
  8. data/ext/google/protobuf_c/map.h +7 -7
  9. data/ext/google/protobuf_c/message.c +456 -343
  10. data/ext/google/protobuf_c/message.h +22 -19
  11. data/ext/google/protobuf_c/protobuf.c +78 -56
  12. data/ext/google/protobuf_c/protobuf.h +16 -9
  13. data/ext/google/protobuf_c/repeated_field.c +85 -85
  14. data/ext/google/protobuf_c/repeated_field.h +6 -5
  15. data/ext/google/protobuf_c/ruby-upb.c +11806 -6746
  16. data/ext/google/protobuf_c/ruby-upb.h +10860 -3532
  17. data/ext/google/protobuf_c/third_party/utf8_range/LICENSE +22 -0
  18. data/ext/google/protobuf_c/third_party/utf8_range/naive.c +92 -0
  19. data/ext/google/protobuf_c/third_party/utf8_range/range2-neon.c +157 -0
  20. data/ext/google/protobuf_c/third_party/utf8_range/range2-sse.c +170 -0
  21. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +21 -0
  22. data/ext/google/protobuf_c/wrap_memcpy.c +4 -3
  23. data/lib/google/protobuf/any_pb.rb +24 -5
  24. data/lib/google/protobuf/api_pb.rb +27 -23
  25. data/lib/google/protobuf/descriptor_dsl.rb +465 -0
  26. data/lib/google/protobuf/descriptor_pb.rb +75 -0
  27. data/lib/google/protobuf/duration_pb.rb +24 -5
  28. data/lib/google/protobuf/empty_pb.rb +24 -3
  29. data/lib/google/protobuf/field_mask_pb.rb +24 -4
  30. data/lib/google/protobuf/message_exts.rb +7 -2
  31. data/lib/google/protobuf/plugin_pb.rb +47 -0
  32. data/lib/google/protobuf/repeated_field.rb +15 -2
  33. data/lib/google/protobuf/source_context_pb.rb +24 -4
  34. data/lib/google/protobuf/struct_pb.rb +24 -20
  35. data/lib/google/protobuf/timestamp_pb.rb +24 -5
  36. data/lib/google/protobuf/type_pb.rb +27 -68
  37. data/lib/google/protobuf/well_known_types.rb +12 -2
  38. data/lib/google/protobuf/wrappers_pb.rb +24 -28
  39. data/lib/google/protobuf.rb +5 -73
  40. metadata +17 -36
  41. data/ext/google/protobuf_c/third_party/wyhash/wyhash.h +0 -145
  42. data/tests/basic.rb +0 -604
  43. data/tests/generated_code_test.rb +0 -23
  44. data/tests/stress.rb +0 -38
@@ -34,17 +34,16 @@
34
34
  #include "defs.h"
35
35
  #include "message.h"
36
36
  #include "protobuf.h"
37
- #include "third_party/wyhash/wyhash.h"
38
37
 
39
38
  // -----------------------------------------------------------------------------
40
39
  // Repeated field container type.
41
40
  // -----------------------------------------------------------------------------
42
41
 
43
42
  typedef struct {
44
- const upb_array *array; // Can get as mutable when non-frozen.
43
+ const upb_Array* array; // Can get as mutable when non-frozen.
45
44
  TypeInfo type_info;
46
45
  VALUE type_class; // To GC-root the msgdef/enumdef in type_info.
47
- VALUE arena; // To GC-root the upb_array.
46
+ VALUE arena; // To GC-root the upb_Array.
48
47
  } RepeatedField;
49
48
 
50
49
  VALUE cRepeatedField;
@@ -56,9 +55,9 @@ static void RepeatedField_mark(void* _self) {
56
55
  }
57
56
 
58
57
  const rb_data_type_t RepeatedField_type = {
59
- "Google::Protobuf::RepeatedField",
60
- { RepeatedField_mark, RUBY_DEFAULT_FREE, NULL },
61
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
58
+ "Google::Protobuf::RepeatedField",
59
+ {RepeatedField_mark, RUBY_DEFAULT_FREE, NULL},
60
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
62
61
  };
63
62
 
64
63
  static RepeatedField* ruby_to_RepeatedField(VALUE _self) {
@@ -67,9 +66,9 @@ static RepeatedField* ruby_to_RepeatedField(VALUE _self) {
67
66
  return self;
68
67
  }
69
68
 
70
- static upb_array *RepeatedField_GetMutable(VALUE _self) {
69
+ static upb_Array* RepeatedField_GetMutable(VALUE _self) {
71
70
  rb_check_frozen(_self);
72
- return (upb_array*)ruby_to_RepeatedField(_self)->array;
71
+ return (upb_Array*)ruby_to_RepeatedField(_self)->array;
73
72
  }
74
73
 
75
74
  VALUE RepeatedField_alloc(VALUE klass) {
@@ -80,7 +79,7 @@ VALUE RepeatedField_alloc(VALUE klass) {
80
79
  return TypedData_Wrap_Struct(klass, &RepeatedField_type, self);
81
80
  }
82
81
 
83
- VALUE RepeatedField_GetRubyWrapper(upb_array* array, TypeInfo type_info,
82
+ VALUE RepeatedField_GetRubyWrapper(upb_Array* array, TypeInfo type_info,
84
83
  VALUE arena) {
85
84
  PBRUBY_ASSERT(array);
86
85
  VALUE val = ObjectCache_Get(array);
@@ -93,7 +92,7 @@ VALUE RepeatedField_GetRubyWrapper(upb_array* array, TypeInfo type_info,
93
92
  self->array = array;
94
93
  self->arena = arena;
95
94
  self->type_info = type_info;
96
- if (self->type_info.type == UPB_TYPE_MESSAGE) {
95
+ if (self->type_info.type == kUpb_CType_Message) {
97
96
  self->type_class = Descriptor_DefToClass(type_info.def.msgdef);
98
97
  }
99
98
  }
@@ -106,24 +105,24 @@ VALUE RepeatedField_GetRubyWrapper(upb_array* array, TypeInfo type_info,
106
105
 
107
106
  static VALUE RepeatedField_new_this_type(RepeatedField* from) {
108
107
  VALUE arena_rb = Arena_new();
109
- upb_array *array = upb_array_new(Arena_get(arena_rb), from->type_info.type);
108
+ upb_Array* array = upb_Array_New(Arena_get(arena_rb), from->type_info.type);
110
109
  VALUE ret = RepeatedField_GetRubyWrapper(array, from->type_info, arena_rb);
111
110
  PBRUBY_ASSERT(ruby_to_RepeatedField(ret)->type_class == from->type_class);
112
111
  return ret;
113
112
  }
114
113
 
115
- void RepeatedField_Inspect(StringBuilder* b, const upb_array* array,
114
+ void RepeatedField_Inspect(StringBuilder* b, const upb_Array* array,
116
115
  TypeInfo info) {
117
116
  bool first = true;
118
117
  StringBuilder_Printf(b, "[");
119
- size_t n = array ? upb_array_size(array) : 0;
118
+ size_t n = array ? upb_Array_Size(array) : 0;
120
119
  for (size_t i = 0; i < n; i++) {
121
120
  if (first) {
122
121
  first = false;
123
122
  } else {
124
123
  StringBuilder_Printf(b, ", ");
125
124
  }
126
- StringBuilder_PrintMsgval(b, upb_array_get(array, i), info);
125
+ StringBuilder_PrintMsgval(b, upb_Array_Get(array, i), info);
127
126
  }
128
127
  StringBuilder_Printf(b, "]");
129
128
  }
@@ -133,23 +132,24 @@ VALUE RepeatedField_deep_copy(VALUE _self) {
133
132
  VALUE new_rptfield = RepeatedField_new_this_type(self);
134
133
  RepeatedField* new_self = ruby_to_RepeatedField(new_rptfield);
135
134
  VALUE arena_rb = new_self->arena;
136
- upb_array *new_array = RepeatedField_GetMutable(new_rptfield);
137
- upb_arena *arena = Arena_get(arena_rb);
138
- size_t elements = upb_array_size(self->array);
135
+ upb_Array* new_array = RepeatedField_GetMutable(new_rptfield);
136
+ upb_Arena* arena = Arena_get(arena_rb);
137
+ size_t elements = upb_Array_Size(self->array);
139
138
 
140
- upb_array_resize(new_array, elements, arena);
139
+ upb_Array_Resize(new_array, elements, arena);
141
140
 
142
- size_t size = upb_array_size(self->array);
141
+ size_t size = upb_Array_Size(self->array);
143
142
  for (size_t i = 0; i < size; i++) {
144
- upb_msgval msgval = upb_array_get(self->array, i);
145
- upb_msgval copy = Msgval_DeepCopy(msgval, self->type_info, arena);
146
- upb_array_set(new_array, i, copy);
143
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
144
+ upb_MessageValue copy = Msgval_DeepCopy(msgval, self->type_info, arena);
145
+ upb_Array_Set(new_array, i, copy);
147
146
  }
148
147
 
149
148
  return new_rptfield;
150
149
  }
151
150
 
152
- const upb_array* RepeatedField_GetUpbArray(VALUE val, const upb_fielddef *field) {
151
+ const upb_Array* RepeatedField_GetUpbArray(VALUE val, const upb_FieldDef* field,
152
+ upb_Arena* arena) {
153
153
  RepeatedField* self;
154
154
  TypeInfo type_info = TypeInfo_get(field);
155
155
 
@@ -167,22 +167,23 @@ const upb_array* RepeatedField_GetUpbArray(VALUE val, const upb_fielddef *field)
167
167
  rb_raise(cTypeError, "Repeated field array has wrong message/enum class");
168
168
  }
169
169
 
170
+ Arena_fuse(self->arena, arena);
170
171
  return self->array;
171
172
  }
172
173
 
173
174
  static int index_position(VALUE _index, RepeatedField* repeated_field) {
174
175
  int index = NUM2INT(_index);
175
- if (index < 0) index += upb_array_size(repeated_field->array);
176
+ if (index < 0) index += upb_Array_Size(repeated_field->array);
176
177
  return index;
177
178
  }
178
179
 
179
180
  static VALUE RepeatedField_subarray(RepeatedField* self, long beg, long len) {
180
- size_t size = upb_array_size(self->array);
181
+ size_t size = upb_Array_Size(self->array);
181
182
  VALUE ary = rb_ary_new2(size);
182
183
  long i;
183
184
 
184
185
  for (i = beg; i < beg + len; i++) {
185
- upb_msgval msgval = upb_array_get(self->array, i);
186
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
186
187
  VALUE elem = Convert_UpbToRuby(msgval, self->type_info, self->arena);
187
188
  rb_ary_push(ary, elem);
188
189
  }
@@ -199,18 +200,17 @@ static VALUE RepeatedField_subarray(RepeatedField* self, long beg, long len) {
199
200
  */
200
201
  static VALUE RepeatedField_each(VALUE _self) {
201
202
  RepeatedField* self = ruby_to_RepeatedField(_self);
202
- int size = upb_array_size(self->array);
203
+ int size = upb_Array_Size(self->array);
203
204
  int i;
204
205
 
205
206
  for (i = 0; i < size; i++) {
206
- upb_msgval msgval = upb_array_get(self->array, i);
207
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
207
208
  VALUE val = Convert_UpbToRuby(msgval, self->type_info, self->arena);
208
209
  rb_yield(val);
209
210
  }
210
211
  return _self;
211
212
  }
212
213
 
213
-
214
214
  /*
215
215
  * call-seq:
216
216
  * RepeatedField.[](index) => value
@@ -219,20 +219,20 @@ static VALUE RepeatedField_each(VALUE _self) {
219
219
  */
220
220
  static VALUE RepeatedField_index(int argc, VALUE* argv, VALUE _self) {
221
221
  RepeatedField* self = ruby_to_RepeatedField(_self);
222
- long size = upb_array_size(self->array);
222
+ long size = upb_Array_Size(self->array);
223
223
 
224
224
  VALUE arg = argv[0];
225
225
  long beg, len;
226
226
 
227
- if (argc == 1){
227
+ if (argc == 1) {
228
228
  if (FIXNUM_P(arg)) {
229
229
  /* standard case */
230
- upb_msgval msgval;
230
+ upb_MessageValue msgval;
231
231
  int index = index_position(argv[0], self);
232
- if (index < 0 || (size_t)index >= upb_array_size(self->array)) {
232
+ if (index < 0 || (size_t)index >= upb_Array_Size(self->array)) {
233
233
  return Qnil;
234
234
  }
235
- msgval = upb_array_get(self->array, index);
235
+ msgval = upb_Array_Get(self->array, index);
236
236
  return Convert_UpbToRuby(msgval, self->type_info, self->arena);
237
237
  } else {
238
238
  /* check if idx is Range */
@@ -268,10 +268,10 @@ static VALUE RepeatedField_index(int argc, VALUE* argv, VALUE _self) {
268
268
  */
269
269
  static VALUE RepeatedField_index_set(VALUE _self, VALUE _index, VALUE val) {
270
270
  RepeatedField* self = ruby_to_RepeatedField(_self);
271
- int size = upb_array_size(self->array);
272
- upb_array *array = RepeatedField_GetMutable(_self);
273
- upb_arena *arena = Arena_get(self->arena);
274
- upb_msgval msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
271
+ int size = upb_Array_Size(self->array);
272
+ upb_Array* array = RepeatedField_GetMutable(_self);
273
+ upb_Arena* arena = Arena_get(self->arena);
274
+ upb_MessageValue msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
275
275
 
276
276
  int index = index_position(_index, self);
277
277
  if (index < 0 || index >= (INT_MAX - 1)) {
@@ -279,17 +279,17 @@ static VALUE RepeatedField_index_set(VALUE _self, VALUE _index, VALUE val) {
279
279
  }
280
280
 
281
281
  if (index >= size) {
282
- upb_array_resize(array, index + 1, arena);
283
- upb_msgval fill;
282
+ upb_Array_Resize(array, index + 1, arena);
283
+ upb_MessageValue fill;
284
284
  memset(&fill, 0, sizeof(fill));
285
285
  for (int i = size; i < index; i++) {
286
286
  // Fill default values.
287
287
  // TODO(haberman): should this happen at the upb level?
288
- upb_array_set(array, i, fill);
288
+ upb_Array_Set(array, i, fill);
289
289
  }
290
290
  }
291
291
 
292
- upb_array_set(array, index, msgval);
292
+ upb_Array_Set(array, index, msgval);
293
293
  return Qnil;
294
294
  }
295
295
 
@@ -301,13 +301,14 @@ static VALUE RepeatedField_index_set(VALUE _self, VALUE _index, VALUE val) {
301
301
  */
302
302
  static VALUE RepeatedField_push_vararg(int argc, VALUE* argv, VALUE _self) {
303
303
  RepeatedField* self = ruby_to_RepeatedField(_self);
304
- upb_arena *arena = Arena_get(self->arena);
305
- upb_array *array = RepeatedField_GetMutable(_self);
304
+ upb_Arena* arena = Arena_get(self->arena);
305
+ upb_Array* array = RepeatedField_GetMutable(_self);
306
306
  int i;
307
307
 
308
308
  for (i = 0; i < argc; i++) {
309
- upb_msgval msgval = Convert_RubyToUpb(argv[i], "", self->type_info, arena);
310
- upb_array_append(array, msgval, arena);
309
+ upb_MessageValue msgval =
310
+ Convert_RubyToUpb(argv[i], "", self->type_info, arena);
311
+ upb_Array_Append(array, msgval, arena);
311
312
  }
312
313
 
313
314
  return _self;
@@ -321,11 +322,11 @@ static VALUE RepeatedField_push_vararg(int argc, VALUE* argv, VALUE _self) {
321
322
  */
322
323
  static VALUE RepeatedField_push(VALUE _self, VALUE val) {
323
324
  RepeatedField* self = ruby_to_RepeatedField(_self);
324
- upb_arena *arena = Arena_get(self->arena);
325
- upb_array *array = RepeatedField_GetMutable(_self);
325
+ upb_Arena* arena = Arena_get(self->arena);
326
+ upb_Array* array = RepeatedField_GetMutable(_self);
326
327
 
327
- upb_msgval msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
328
- upb_array_append(array, msgval, arena);
328
+ upb_MessageValue msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
329
+ upb_Array_Append(array, msgval, arena);
329
330
 
330
331
  return _self;
331
332
  }
@@ -335,19 +336,19 @@ static VALUE RepeatedField_push(VALUE _self, VALUE val) {
335
336
  */
336
337
  static VALUE RepeatedField_pop_one(VALUE _self) {
337
338
  RepeatedField* self = ruby_to_RepeatedField(_self);
338
- size_t size = upb_array_size(self->array);
339
- upb_array *array = RepeatedField_GetMutable(_self);
340
- upb_msgval last;
339
+ size_t size = upb_Array_Size(self->array);
340
+ upb_Array* array = RepeatedField_GetMutable(_self);
341
+ upb_MessageValue last;
341
342
  VALUE ret;
342
343
 
343
344
  if (size == 0) {
344
345
  return Qnil;
345
346
  }
346
347
 
347
- last = upb_array_get(self->array, size - 1);
348
+ last = upb_Array_Get(self->array, size - 1);
348
349
  ret = Convert_UpbToRuby(last, self->type_info, self->arena);
349
350
 
350
- upb_array_resize(array, size - 1, Arena_get(self->arena));
351
+ upb_Array_Resize(array, size - 1, Arena_get(self->arena));
351
352
  return ret;
352
353
  }
353
354
 
@@ -359,11 +360,11 @@ static VALUE RepeatedField_pop_one(VALUE _self) {
359
360
  */
360
361
  static VALUE RepeatedField_replace(VALUE _self, VALUE list) {
361
362
  RepeatedField* self = ruby_to_RepeatedField(_self);
362
- upb_array *array = RepeatedField_GetMutable(_self);
363
+ upb_Array* array = RepeatedField_GetMutable(_self);
363
364
  int i;
364
365
 
365
366
  Check_Type(list, T_ARRAY);
366
- upb_array_resize(array, 0, Arena_get(self->arena));
367
+ upb_Array_Resize(array, 0, Arena_get(self->arena));
367
368
 
368
369
  for (i = 0; i < RARRAY_LEN(list); i++) {
369
370
  RepeatedField_push(_self, rb_ary_entry(list, i));
@@ -380,8 +381,8 @@ static VALUE RepeatedField_replace(VALUE _self, VALUE list) {
380
381
  */
381
382
  static VALUE RepeatedField_clear(VALUE _self) {
382
383
  RepeatedField* self = ruby_to_RepeatedField(_self);
383
- upb_array *array = RepeatedField_GetMutable(_self);
384
- upb_array_resize(array, 0, Arena_get(self->arena));
384
+ upb_Array* array = RepeatedField_GetMutable(_self);
385
+ upb_Array_Resize(array, 0, Arena_get(self->arena));
385
386
  return _self;
386
387
  }
387
388
 
@@ -393,7 +394,7 @@ static VALUE RepeatedField_clear(VALUE _self) {
393
394
  */
394
395
  static VALUE RepeatedField_length(VALUE _self) {
395
396
  RepeatedField* self = ruby_to_RepeatedField(_self);
396
- return INT2NUM(upb_array_size(self->array));
397
+ return INT2NUM(upb_Array_Size(self->array));
397
398
  }
398
399
 
399
400
  /*
@@ -407,16 +408,16 @@ static VALUE RepeatedField_dup(VALUE _self) {
407
408
  RepeatedField* self = ruby_to_RepeatedField(_self);
408
409
  VALUE new_rptfield = RepeatedField_new_this_type(self);
409
410
  RepeatedField* new_rptfield_self = ruby_to_RepeatedField(new_rptfield);
410
- upb_array *new_array = RepeatedField_GetMutable(new_rptfield);
411
- upb_arena* arena = Arena_get(new_rptfield_self->arena);
412
- int size = upb_array_size(self->array);
411
+ upb_Array* new_array = RepeatedField_GetMutable(new_rptfield);
412
+ upb_Arena* arena = Arena_get(new_rptfield_self->arena);
413
+ int size = upb_Array_Size(self->array);
413
414
  int i;
414
415
 
415
- upb_arena_fuse(arena, Arena_get(self->arena));
416
+ Arena_fuse(self->arena, arena);
416
417
 
417
418
  for (i = 0; i < size; i++) {
418
- upb_msgval msgval = upb_array_get(self->array, i);
419
- upb_array_append(new_array, msgval, arena);
419
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
420
+ upb_Array_Append(new_array, msgval, arena);
420
421
  }
421
422
 
422
423
  return new_rptfield;
@@ -431,12 +432,12 @@ static VALUE RepeatedField_dup(VALUE _self) {
431
432
  */
432
433
  VALUE RepeatedField_to_ary(VALUE _self) {
433
434
  RepeatedField* self = ruby_to_RepeatedField(_self);
434
- int size = upb_array_size(self->array);
435
+ int size = upb_Array_Size(self->array);
435
436
  VALUE ary = rb_ary_new2(size);
436
437
  int i;
437
438
 
438
439
  for (i = 0; i < size; i++) {
439
- upb_msgval msgval = upb_array_get(self->array, i);
440
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
440
441
  VALUE val = Convert_UpbToRuby(msgval, self->type_info, self->arena);
441
442
  rb_ary_push(ary, val);
442
443
  }
@@ -472,17 +473,17 @@ VALUE RepeatedField_eq(VALUE _self, VALUE _other) {
472
473
 
473
474
  self = ruby_to_RepeatedField(_self);
474
475
  other = ruby_to_RepeatedField(_other);
475
- size_t n = upb_array_size(self->array);
476
+ size_t n = upb_Array_Size(self->array);
476
477
 
477
478
  if (self->type_info.type != other->type_info.type ||
478
479
  self->type_class != other->type_class ||
479
- upb_array_size(other->array) != n) {
480
+ upb_Array_Size(other->array) != n) {
480
481
  return Qfalse;
481
482
  }
482
483
 
483
484
  for (size_t i = 0; i < n; i++) {
484
- upb_msgval val1 = upb_array_get(self->array, i);
485
- upb_msgval val2 = upb_array_get(other->array, i);
485
+ upb_MessageValue val1 = upb_Array_Get(self->array, i);
486
+ upb_MessageValue val2 = upb_Array_Get(other->array, i);
486
487
  if (!Msgval_IsEqual(val1, val2, self->type_info)) {
487
488
  return Qfalse;
488
489
  }
@@ -516,10 +517,10 @@ static VALUE RepeatedField_freeze(VALUE _self) {
516
517
  VALUE RepeatedField_hash(VALUE _self) {
517
518
  RepeatedField* self = ruby_to_RepeatedField(_self);
518
519
  uint64_t hash = 0;
519
- size_t n = upb_array_size(self->array);
520
+ size_t n = upb_Array_Size(self->array);
520
521
 
521
522
  for (size_t i = 0; i < n; i++) {
522
- upb_msgval val = upb_array_get(self->array, i);
523
+ upb_MessageValue val = upb_Array_Get(self->array, i);
523
524
  hash = Msgval_GetHash(val, self->type_info, hash);
524
525
  }
525
526
 
@@ -548,9 +549,10 @@ VALUE RepeatedField_plus(VALUE _self, VALUE list) {
548
549
  RepeatedField* self = ruby_to_RepeatedField(_self);
549
550
  RepeatedField* list_rptfield = ruby_to_RepeatedField(list);
550
551
  RepeatedField* dupped = ruby_to_RepeatedField(dupped_);
551
- upb_array *dupped_array = RepeatedField_GetMutable(dupped_);
552
- upb_arena* arena = Arena_get(dupped->arena);
553
- int size = upb_array_size(list_rptfield->array);
552
+ upb_Array* dupped_array = RepeatedField_GetMutable(dupped_);
553
+ upb_Arena* arena = Arena_get(dupped->arena);
554
+ Arena_fuse(list_rptfield->arena, arena);
555
+ int size = upb_Array_Size(list_rptfield->array);
554
556
  int i;
555
557
 
556
558
  if (self->type_info.type != list_rptfield->type_info.type ||
@@ -560,8 +562,8 @@ VALUE RepeatedField_plus(VALUE _self, VALUE list) {
560
562
  }
561
563
 
562
564
  for (i = 0; i < size; i++) {
563
- upb_msgval msgval = upb_array_get(list_rptfield->array, i);
564
- upb_array_append(dupped_array, msgval, arena);
565
+ upb_MessageValue msgval = upb_Array_Get(list_rptfield->array, i);
566
+ upb_Array_Append(dupped_array, msgval, arena);
565
567
  }
566
568
  } else {
567
569
  rb_raise(rb_eArgError, "Unknown type appending to RepeatedField");
@@ -599,7 +601,7 @@ VALUE RepeatedField_concat(VALUE _self, VALUE list) {
599
601
  */
600
602
  VALUE RepeatedField_init(int argc, VALUE* argv, VALUE _self) {
601
603
  RepeatedField* self = ruby_to_RepeatedField(_self);
602
- upb_arena *arena;
604
+ upb_Arena* arena;
603
605
  VALUE ary = Qnil;
604
606
 
605
607
  self->arena = Arena_new();
@@ -610,7 +612,7 @@ VALUE RepeatedField_init(int argc, VALUE* argv, VALUE _self) {
610
612
  }
611
613
 
612
614
  self->type_info = TypeInfo_FromClass(argc, argv, 0, &self->type_class, &ary);
613
- self->array = upb_array_new(arena, self->type_info.type);
615
+ self->array = upb_Array_New(arena, self->type_info.type);
614
616
  ObjectCache_Add(self->array, _self);
615
617
 
616
618
  if (ary != Qnil) {
@@ -625,14 +627,12 @@ VALUE RepeatedField_init(int argc, VALUE* argv, VALUE _self) {
625
627
  }
626
628
 
627
629
  void RepeatedField_register(VALUE module) {
628
- VALUE klass = rb_define_class_under(
629
- module, "RepeatedField", rb_cObject);
630
+ VALUE klass = rb_define_class_under(module, "RepeatedField", rb_cObject);
630
631
  rb_define_alloc_func(klass, RepeatedField_alloc);
631
632
  rb_gc_register_address(&cRepeatedField);
632
633
  cRepeatedField = klass;
633
634
 
634
- rb_define_method(klass, "initialize",
635
- RepeatedField_init, -1);
635
+ rb_define_method(klass, "initialize", RepeatedField_init, -1);
636
636
  rb_define_method(klass, "each", RepeatedField_each, 0);
637
637
  rb_define_method(klass, "[]", RepeatedField_index, -1);
638
638
  rb_define_method(klass, "at", RepeatedField_index, -1);
@@ -36,18 +36,19 @@
36
36
  #include "protobuf.h"
37
37
  #include "ruby-upb.h"
38
38
 
39
- // Returns a Ruby wrapper object for the given upb_array, which will be created
39
+ // Returns a Ruby wrapper object for the given upb_Array, which will be created
40
40
  // if one does not exist already.
41
- VALUE RepeatedField_GetRubyWrapper(upb_array* msg, TypeInfo type_info,
41
+ VALUE RepeatedField_GetRubyWrapper(upb_Array* msg, TypeInfo type_info,
42
42
  VALUE arena);
43
43
 
44
- // Gets the underlying upb_array for this Ruby RepeatedField object, which must
44
+ // Gets the underlying upb_Array for this Ruby RepeatedField object, which must
45
45
  // have a type that matches |f|. If this is not a repeated field or the type
46
46
  // doesn't match, raises an exception.
47
- const upb_array* RepeatedField_GetUpbArray(VALUE value, const upb_fielddef* f);
47
+ const upb_Array* RepeatedField_GetUpbArray(VALUE value, const upb_FieldDef* f,
48
+ upb_Arena* arena);
48
49
 
49
50
  // Implements #inspect for this repeated field by appending its contents to |b|.
50
- void RepeatedField_Inspect(StringBuilder* b, const upb_array* array,
51
+ void RepeatedField_Inspect(StringBuilder* b, const upb_Array* array,
51
52
  TypeInfo info);
52
53
 
53
54
  // Returns a deep copy of this RepeatedField object.