google-protobuf 3.7.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

@@ -3,11 +3,9 @@
3
3
  require 'mkmf'
4
4
 
5
5
  if RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/
6
- # XOPEN_SOURCE needed for strptime:
7
- # https://stackoverflow.com/questions/35234152/strptime-giving-implicit-declaration-and-undefined-reference
8
- $CFLAGS += " -std=c99 -O3 -DNDEBUG -D_XOPEN_SOURCE=700"
6
+ $CFLAGS += " -std=gnu90 -O3 -DNDEBUG -Wall -Wdeclaration-after-statement -Wsign-compare"
9
7
  else
10
- $CFLAGS += " -std=c99 -O3 -DNDEBUG"
8
+ $CFLAGS += " -std=gnu90 -O3 -DNDEBUG"
11
9
  end
12
10
 
13
11
 
@@ -71,6 +71,9 @@ static VALUE table_key(Map* self, VALUE key,
71
71
  case UPB_TYPE_BYTES:
72
72
  case UPB_TYPE_STRING:
73
73
  // Strings: use string content directly.
74
+ if (TYPE(key) == T_SYMBOL) {
75
+ key = rb_id2str(SYM2ID(key));
76
+ }
74
77
  Check_Type(key, T_STRING);
75
78
  key = native_slot_encode_and_freeze_string(self->key_type, key);
76
79
  *out_key = RSTRING_PTR(key);
@@ -82,7 +85,7 @@ static VALUE table_key(Map* self, VALUE key,
82
85
  case UPB_TYPE_INT64:
83
86
  case UPB_TYPE_UINT32:
84
87
  case UPB_TYPE_UINT64:
85
- native_slot_set(self->key_type, Qnil, buf, key);
88
+ native_slot_set("", self->key_type, Qnil, buf, key);
86
89
  *out_key = buf;
87
90
  *out_length = native_slot_size(self->key_type);
88
91
  break;
@@ -97,11 +100,11 @@ static VALUE table_key(Map* self, VALUE key,
97
100
  return key;
98
101
  }
99
102
 
100
- static VALUE table_key_to_ruby(Map* self, const char* buf, size_t length) {
103
+ static VALUE table_key_to_ruby(Map* self, upb_strview key) {
101
104
  switch (self->key_type) {
102
105
  case UPB_TYPE_BYTES:
103
106
  case UPB_TYPE_STRING: {
104
- VALUE ret = rb_str_new(buf, length);
107
+ VALUE ret = rb_str_new(key.data, key.size);
105
108
  rb_enc_associate(ret,
106
109
  (self->key_type == UPB_TYPE_BYTES) ?
107
110
  kRubyString8bitEncoding : kRubyStringUtf8Encoding);
@@ -113,7 +116,7 @@ static VALUE table_key_to_ruby(Map* self, const char* buf, size_t length) {
113
116
  case UPB_TYPE_INT64:
114
117
  case UPB_TYPE_UINT32:
115
118
  case UPB_TYPE_UINT64:
116
- return native_slot_get(self->key_type, Qnil, buf);
119
+ return native_slot_get(self->key_type, Qnil, key.data);
117
120
 
118
121
  default:
119
122
  assert(false);
@@ -286,9 +289,7 @@ VALUE Map_each(VALUE _self) {
286
289
  for (upb_strtable_begin(&it, &self->table);
287
290
  !upb_strtable_done(&it);
288
291
  upb_strtable_next(&it)) {
289
-
290
- VALUE key = table_key_to_ruby(
291
- self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
292
+ VALUE key = table_key_to_ruby(self, upb_strtable_iter_key(&it));
292
293
 
293
294
  upb_value v = upb_strtable_iter_value(&it);
294
295
  void* mem = value_memory(&v);
@@ -316,9 +317,7 @@ VALUE Map_keys(VALUE _self) {
316
317
  for (upb_strtable_begin(&it, &self->table);
317
318
  !upb_strtable_done(&it);
318
319
  upb_strtable_next(&it)) {
319
-
320
- VALUE key = table_key_to_ruby(
321
- self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
320
+ VALUE key = table_key_to_ruby(self, upb_strtable_iter_key(&it));
322
321
 
323
322
  rb_ary_push(ret, key);
324
323
  }
@@ -387,7 +386,6 @@ VALUE Map_index(VALUE _self, VALUE key) {
387
386
  */
388
387
  VALUE Map_index_set(VALUE _self, VALUE key, VALUE value) {
389
388
  Map* self = ruby_to_Map(_self);
390
-
391
389
  char keybuf[TABLE_KEY_BUF_LENGTH];
392
390
  const char* keyval = NULL;
393
391
  size_t length = 0;
@@ -395,8 +393,15 @@ VALUE Map_index_set(VALUE _self, VALUE key, VALUE value) {
395
393
  void* mem;
396
394
  key = table_key(self, key, keybuf, &keyval, &length);
397
395
 
396
+ rb_check_frozen(_self);
397
+
398
+ if (TYPE(value) == T_HASH) {
399
+ VALUE args[1] = { value };
400
+ value = rb_class_new_instance(1, args, self->value_type_class);
401
+ }
402
+
398
403
  mem = value_memory(&v);
399
- native_slot_set(self->value_type, self->value_type_class, mem, value);
404
+ native_slot_set("", self->value_type, self->value_type_class, mem, value);
400
405
 
401
406
  // Replace any existing value by issuing a 'remove' operation first.
402
407
  upb_strtable_remove2(&self->table, keyval, length, NULL);
@@ -439,13 +444,14 @@ VALUE Map_has_key(VALUE _self, VALUE key) {
439
444
  */
440
445
  VALUE Map_delete(VALUE _self, VALUE key) {
441
446
  Map* self = ruby_to_Map(_self);
442
-
443
447
  char keybuf[TABLE_KEY_BUF_LENGTH];
444
448
  const char* keyval = NULL;
445
449
  size_t length = 0;
446
450
  upb_value v;
447
451
  key = table_key(self, key, keybuf, &keyval, &length);
448
452
 
453
+ rb_check_frozen(_self);
454
+
449
455
  if (upb_strtable_remove2(&self->table, keyval, length, &v)) {
450
456
  void* mem = value_memory(&v);
451
457
  return native_slot_get(self->value_type, self->value_type_class, mem);
@@ -463,6 +469,8 @@ VALUE Map_delete(VALUE _self, VALUE key) {
463
469
  VALUE Map_clear(VALUE _self) {
464
470
  Map* self = ruby_to_Map(_self);
465
471
 
472
+ rb_check_frozen(_self);
473
+
466
474
  // Uninit and reinit the table -- this is faster than iterating and doing a
467
475
  // delete-lookup on each key.
468
476
  upb_strtable_uninit(&self->table);
@@ -483,7 +491,7 @@ VALUE Map_length(VALUE _self) {
483
491
  return ULL2NUM(upb_strtable_count(&self->table));
484
492
  }
485
493
 
486
- static VALUE Map_new_this_type(VALUE _self) {
494
+ VALUE Map_new_this_type(VALUE _self) {
487
495
  Map* self = ruby_to_Map(_self);
488
496
  VALUE new_map = Qnil;
489
497
  VALUE key_type = fieldtype_to_ruby(self->key_type);
@@ -514,17 +522,14 @@ VALUE Map_dup(VALUE _self) {
514
522
  for (upb_strtable_begin(&it, &self->table);
515
523
  !upb_strtable_done(&it);
516
524
  upb_strtable_next(&it)) {
517
-
525
+ upb_strview k = upb_strtable_iter_key(&it);
518
526
  upb_value v = upb_strtable_iter_value(&it);
519
527
  void* mem = value_memory(&v);
520
528
  upb_value dup;
521
529
  void* dup_mem = value_memory(&dup);
522
530
  native_slot_dup(self->value_type, dup_mem, mem);
523
531
 
524
- if (!upb_strtable_insert2(&new_self->table,
525
- upb_strtable_iter_key(&it),
526
- upb_strtable_iter_keylength(&it),
527
- dup)) {
532
+ if (!upb_strtable_insert2(&new_self->table, k.data, k.size, dup)) {
528
533
  rb_raise(rb_eRuntimeError, "Error inserting value into new table");
529
534
  }
530
535
  }
@@ -542,17 +547,15 @@ VALUE Map_deep_copy(VALUE _self) {
542
547
  for (upb_strtable_begin(&it, &self->table);
543
548
  !upb_strtable_done(&it);
544
549
  upb_strtable_next(&it)) {
545
-
550
+ upb_strview k = upb_strtable_iter_key(&it);
546
551
  upb_value v = upb_strtable_iter_value(&it);
547
552
  void* mem = value_memory(&v);
548
553
  upb_value dup;
549
554
  void* dup_mem = value_memory(&dup);
550
- native_slot_deep_copy(self->value_type, dup_mem, mem);
555
+ native_slot_deep_copy(self->value_type, self->value_type_class, dup_mem,
556
+ mem);
551
557
 
552
- if (!upb_strtable_insert2(&new_self->table,
553
- upb_strtable_iter_key(&it),
554
- upb_strtable_iter_keylength(&it),
555
- dup)) {
558
+ if (!upb_strtable_insert2(&new_self->table, k.data, k.size, dup)) {
556
559
  rb_raise(rb_eRuntimeError, "Error inserting value into new table");
557
560
  }
558
561
  }
@@ -605,21 +608,19 @@ VALUE Map_eq(VALUE _self, VALUE _other) {
605
608
  for (upb_strtable_begin(&it, &self->table);
606
609
  !upb_strtable_done(&it);
607
610
  upb_strtable_next(&it)) {
608
-
611
+ upb_strview k = upb_strtable_iter_key(&it);
609
612
  upb_value v = upb_strtable_iter_value(&it);
610
613
  void* mem = value_memory(&v);
611
614
  upb_value other_v;
612
615
  void* other_mem = value_memory(&other_v);
613
616
 
614
- if (!upb_strtable_lookup2(&other->table,
615
- upb_strtable_iter_key(&it),
616
- upb_strtable_iter_keylength(&it),
617
- &other_v)) {
617
+ if (!upb_strtable_lookup2(&other->table, k.data, k.size, &other_v)) {
618
618
  // Not present in other map.
619
619
  return Qfalse;
620
620
  }
621
621
 
622
- if (!native_slot_eq(self->value_type, mem, other_mem)) {
622
+ if (!native_slot_eq(self->value_type, self->value_type_class, mem,
623
+ other_mem)) {
623
624
  // Present, but value not equal.
624
625
  return Qfalse;
625
626
  }
@@ -641,11 +642,9 @@ VALUE Map_hash(VALUE _self) {
641
642
  VALUE hash_sym = rb_intern("hash");
642
643
 
643
644
  upb_strtable_iter it;
644
- for (upb_strtable_begin(&it, &self->table);
645
- !upb_strtable_done(&it);
645
+ for (upb_strtable_begin(&it, &self->table); !upb_strtable_done(&it);
646
646
  upb_strtable_next(&it)) {
647
- VALUE key = table_key_to_ruby(
648
- self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
647
+ VALUE key = table_key_to_ruby(self, upb_strtable_iter_key(&it));
649
648
 
650
649
  upb_value v = upb_strtable_iter_value(&it);
651
650
  void* mem = value_memory(&v);
@@ -673,8 +672,7 @@ VALUE Map_to_h(VALUE _self) {
673
672
  for (upb_strtable_begin(&it, &self->table);
674
673
  !upb_strtable_done(&it);
675
674
  upb_strtable_next(&it)) {
676
- VALUE key = table_key_to_ruby(
677
- self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
675
+ VALUE key = table_key_to_ruby(self, upb_strtable_iter_key(&it));
678
676
  upb_value v = upb_strtable_iter_value(&it);
679
677
  void* mem = value_memory(&v);
680
678
  VALUE value = native_slot_get(self->value_type,
@@ -706,11 +704,9 @@ VALUE Map_inspect(VALUE _self) {
706
704
  VALUE inspect_sym = rb_intern("inspect");
707
705
 
708
706
  upb_strtable_iter it;
709
- for (upb_strtable_begin(&it, &self->table);
710
- !upb_strtable_done(&it);
707
+ for (upb_strtable_begin(&it, &self->table); !upb_strtable_done(&it);
711
708
  upb_strtable_next(&it)) {
712
- VALUE key = table_key_to_ruby(
713
- self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
709
+ VALUE key = table_key_to_ruby(self, upb_strtable_iter_key(&it));
714
710
 
715
711
  upb_value v = upb_strtable_iter_value(&it);
716
712
  void* mem = value_memory(&v);
@@ -771,20 +767,15 @@ VALUE Map_merge_into_self(VALUE _self, VALUE hashmap) {
771
767
  for (upb_strtable_begin(&it, &other->table);
772
768
  !upb_strtable_done(&it);
773
769
  upb_strtable_next(&it)) {
770
+ upb_strview k = upb_strtable_iter_key(&it);
774
771
 
775
772
  // Replace any existing value by issuing a 'remove' operation first.
776
773
  upb_value v;
777
774
  upb_value oldv;
778
- upb_strtable_remove2(&self->table,
779
- upb_strtable_iter_key(&it),
780
- upb_strtable_iter_keylength(&it),
781
- &oldv);
775
+ upb_strtable_remove2(&self->table, k.data, k.size, &oldv);
782
776
 
783
777
  v = upb_strtable_iter_value(&it);
784
- upb_strtable_insert2(&self->table,
785
- upb_strtable_iter_key(&it),
786
- upb_strtable_iter_keylength(&it),
787
- v);
778
+ upb_strtable_insert2(&self->table, k.data, k.size, v);
788
779
  }
789
780
  } else {
790
781
  rb_raise(rb_eArgError, "Unknown type merging into Map");
@@ -808,10 +799,7 @@ bool Map_done(Map_iter* iter) {
808
799
  }
809
800
 
810
801
  VALUE Map_iter_key(Map_iter* iter) {
811
- return table_key_to_ruby(
812
- iter->self,
813
- upb_strtable_iter_key(&iter->it),
814
- upb_strtable_iter_keylength(&iter->it));
802
+ return table_key_to_ruby(iter->self, upb_strtable_iter_key(&iter->it));
815
803
  }
816
804
 
817
805
  VALUE Map_iter_value(Map_iter* iter) {
@@ -841,7 +829,6 @@ void Map_register(VALUE module) {
841
829
  rb_define_method(klass, "dup", Map_dup, 0);
842
830
  rb_define_method(klass, "==", Map_eq, 1);
843
831
  rb_define_method(klass, "hash", Map_hash, 0);
844
- rb_define_method(klass, "to_hash", Map_to_h, 0);
845
832
  rb_define_method(klass, "to_h", Map_to_h, 0);
846
833
  rb_define_method(klass, "inspect", Map_inspect, 0);
847
834
  rb_define_method(klass, "merge", Map_merge, 1);