google-protobuf 3.17.3-x86-mingw32 → 3.18.0.rc.1-x86-mingw32
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.
- checksums.yaml +4 -4
- data/ext/google/protobuf_c/convert.c +4 -5
- data/ext/google/protobuf_c/defs.c +26 -1326
- data/ext/google/protobuf_c/extconf.rb +0 -1
- data/ext/google/protobuf_c/message.c +1 -2
- data/ext/google/protobuf_c/repeated_field.c +0 -1
- data/ext/google/protobuf_c/ruby-upb.c +603 -290
- data/ext/google/protobuf_c/ruby-upb.h +420 -127
- data/lib/google/2.3/protobuf_c.so +0 -0
- data/lib/google/2.4/protobuf_c.so +0 -0
- data/lib/google/2.5/protobuf_c.so +0 -0
- data/lib/google/2.6/protobuf_c.so +0 -0
- data/lib/google/2.7/protobuf_c.so +0 -0
- data/lib/google/3.0/protobuf_c.so +0 -0
- data/lib/google/protobuf.rb +1 -69
- data/lib/google/protobuf/api_pb.rb +2 -2
- data/lib/google/protobuf/descriptor_dsl.rb +458 -0
- data/lib/google/protobuf/descriptor_pb.rb +266 -0
- data/lib/google/protobuf/type_pb.rb +2 -2
- metadata +7 -6
- data/ext/google/protobuf_c/third_party/wyhash/wyhash.h +0 -145
@@ -35,7 +35,6 @@
|
|
35
35
|
#include "map.h"
|
36
36
|
#include "protobuf.h"
|
37
37
|
#include "repeated_field.h"
|
38
|
-
#include "third_party/wyhash/wyhash.h"
|
39
38
|
|
40
39
|
static VALUE cParseError = Qnil;
|
41
40
|
static ID descriptor_instancevar_interned;
|
@@ -717,7 +716,7 @@ uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) {
|
|
717
716
|
&size);
|
718
717
|
|
719
718
|
if (data) {
|
720
|
-
uint64_t ret =
|
719
|
+
uint64_t ret = Wyhash(data, size, seed, kWyhashSalt);
|
721
720
|
upb_arena_free(arena);
|
722
721
|
return ret;
|
723
722
|
} else {
|
@@ -524,24 +524,43 @@ static void decode_munge(int type, wireval *val) {
|
|
524
524
|
}
|
525
525
|
|
526
526
|
static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
|
527
|
-
uint32_t field_number
|
527
|
+
uint32_t field_number,
|
528
|
+
int *last_field_index) {
|
528
529
|
static upb_msglayout_field none = {0, 0, 0, 0, 0, 0};
|
529
530
|
|
530
|
-
/* Lots of optimization opportunities here. */
|
531
|
-
int i;
|
532
531
|
if (l == NULL) return &none;
|
533
|
-
|
534
|
-
|
535
|
-
|
532
|
+
|
533
|
+
size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
|
534
|
+
if (idx < l->dense_below) {
|
535
|
+
goto found;
|
536
|
+
}
|
537
|
+
|
538
|
+
/* Resume scanning from last_field_index since fields are usually in order. */
|
539
|
+
int last = *last_field_index;
|
540
|
+
for (idx = last; idx < l->field_count; idx++) {
|
541
|
+
if (l->fields[idx].number == field_number) {
|
542
|
+
goto found;
|
543
|
+
}
|
544
|
+
}
|
545
|
+
|
546
|
+
for (idx = 0; idx < last; idx++) {
|
547
|
+
if (l->fields[idx].number == field_number) {
|
548
|
+
goto found;
|
536
549
|
}
|
537
550
|
}
|
538
551
|
|
539
552
|
return &none; /* Unknown field. */
|
553
|
+
|
554
|
+
found:
|
555
|
+
UPB_ASSERT(l->fields[idx].number == field_number);
|
556
|
+
*last_field_index = idx;
|
557
|
+
return &l->fields[idx];
|
540
558
|
}
|
541
559
|
|
542
|
-
static upb_msg *decode_newsubmsg(upb_decstate *d,
|
560
|
+
static upb_msg *decode_newsubmsg(upb_decstate *d,
|
561
|
+
upb_msglayout const *const *submsgs,
|
543
562
|
const upb_msglayout_field *field) {
|
544
|
-
const upb_msglayout *subl =
|
563
|
+
const upb_msglayout *subl = submsgs[field->submsg_index];
|
545
564
|
return _upb_msg_new_inl(subl, &d->arena);
|
546
565
|
}
|
547
566
|
|
@@ -571,9 +590,10 @@ static const char *decode_readstr(upb_decstate *d, const char *ptr, int size,
|
|
571
590
|
|
572
591
|
UPB_FORCEINLINE
|
573
592
|
static const char *decode_tosubmsg(upb_decstate *d, const char *ptr,
|
574
|
-
upb_msg *submsg,
|
593
|
+
upb_msg *submsg,
|
594
|
+
upb_msglayout const *const *submsgs,
|
575
595
|
const upb_msglayout_field *field, int size) {
|
576
|
-
const upb_msglayout *subl =
|
596
|
+
const upb_msglayout *subl = submsgs[field->submsg_index];
|
577
597
|
int saved_delta = decode_pushlimit(d, ptr, size);
|
578
598
|
if (--d->depth < 0) decode_err(d);
|
579
599
|
if (!decode_isdone(d, &ptr)) {
|
@@ -602,15 +622,17 @@ static const char *decode_group(upb_decstate *d, const char *ptr,
|
|
602
622
|
|
603
623
|
UPB_FORCEINLINE
|
604
624
|
static const char *decode_togroup(upb_decstate *d, const char *ptr,
|
605
|
-
upb_msg *submsg,
|
625
|
+
upb_msg *submsg,
|
626
|
+
upb_msglayout const *const *submsgs,
|
606
627
|
const upb_msglayout_field *field) {
|
607
|
-
const upb_msglayout *subl =
|
628
|
+
const upb_msglayout *subl = submsgs[field->submsg_index];
|
608
629
|
return decode_group(d, ptr, submsg, subl, field->number);
|
609
630
|
}
|
610
631
|
|
611
632
|
static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
612
|
-
upb_msg *msg,
|
613
|
-
const
|
633
|
+
upb_msg *msg,
|
634
|
+
upb_msglayout const *const *submsgs,
|
635
|
+
const upb_msglayout_field *field, wireval *val,
|
614
636
|
int op) {
|
615
637
|
upb_array **arrp = UPB_PTR_AT(msg, field->offset, void);
|
616
638
|
upb_array *arr = *arrp;
|
@@ -632,27 +654,27 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
632
654
|
/* Append scalar value. */
|
633
655
|
mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << op, void);
|
634
656
|
arr->len++;
|
635
|
-
memcpy(mem,
|
657
|
+
memcpy(mem, val, 1 << op);
|
636
658
|
return ptr;
|
637
659
|
case OP_STRING:
|
638
|
-
decode_verifyutf8(d, ptr, val
|
660
|
+
decode_verifyutf8(d, ptr, val->size);
|
639
661
|
/* Fallthrough. */
|
640
662
|
case OP_BYTES: {
|
641
663
|
/* Append bytes. */
|
642
664
|
upb_strview *str = (upb_strview*)_upb_array_ptr(arr) + arr->len;
|
643
665
|
arr->len++;
|
644
|
-
return decode_readstr(d, ptr, val
|
666
|
+
return decode_readstr(d, ptr, val->size, str);
|
645
667
|
}
|
646
668
|
case OP_SUBMSG: {
|
647
669
|
/* Append submessage / group. */
|
648
|
-
upb_msg *submsg = decode_newsubmsg(d,
|
670
|
+
upb_msg *submsg = decode_newsubmsg(d, submsgs, field);
|
649
671
|
*UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) =
|
650
672
|
submsg;
|
651
673
|
arr->len++;
|
652
674
|
if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) {
|
653
|
-
return decode_togroup(d, ptr, submsg,
|
675
|
+
return decode_togroup(d, ptr, submsg, submsgs, field);
|
654
676
|
} else {
|
655
|
-
return decode_tosubmsg(d, ptr, submsg,
|
677
|
+
return decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size);
|
656
678
|
}
|
657
679
|
}
|
658
680
|
case OP_FIXPCK_LG2(2):
|
@@ -660,15 +682,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
660
682
|
/* Fixed packed. */
|
661
683
|
int lg2 = op - OP_FIXPCK_LG2(0);
|
662
684
|
int mask = (1 << lg2) - 1;
|
663
|
-
size_t count = val
|
664
|
-
if ((val
|
685
|
+
size_t count = val->size >> lg2;
|
686
|
+
if ((val->size & mask) != 0) {
|
665
687
|
decode_err(d); /* Length isn't a round multiple of elem size. */
|
666
688
|
}
|
667
689
|
decode_reserve(d, arr, count);
|
668
690
|
mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
669
691
|
arr->len += count;
|
670
|
-
memcpy(mem, ptr, val
|
671
|
-
return ptr + val
|
692
|
+
memcpy(mem, ptr, val->size); /* XXX: ptr boundary. */
|
693
|
+
return ptr + val->size;
|
672
694
|
}
|
673
695
|
case OP_VARPCK_LG2(0):
|
674
696
|
case OP_VARPCK_LG2(2):
|
@@ -676,7 +698,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
676
698
|
/* Varint packed. */
|
677
699
|
int lg2 = op - OP_VARPCK_LG2(0);
|
678
700
|
int scale = 1 << lg2;
|
679
|
-
int saved_limit = decode_pushlimit(d, ptr, val
|
701
|
+
int saved_limit = decode_pushlimit(d, ptr, val->size);
|
680
702
|
char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
681
703
|
while (!decode_isdone(d, &ptr)) {
|
682
704
|
wireval elem;
|
@@ -698,16 +720,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
698
720
|
}
|
699
721
|
|
700
722
|
static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg,
|
701
|
-
const
|
702
|
-
const upb_msglayout_field *field, wireval val) {
|
723
|
+
upb_msglayout const *const *submsgs,
|
724
|
+
const upb_msglayout_field *field, wireval *val) {
|
703
725
|
upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *);
|
704
726
|
upb_map *map = *map_p;
|
705
727
|
upb_map_entry ent;
|
706
|
-
const upb_msglayout *entry =
|
728
|
+
const upb_msglayout *entry = submsgs[field->submsg_index];
|
707
729
|
|
708
730
|
if (!map) {
|
709
731
|
/* Lazily create map. */
|
710
|
-
const upb_msglayout *entry = layout->submsgs[field->submsg_index];
|
711
732
|
const upb_msglayout_field *key_field = &entry->fields[0];
|
712
733
|
const upb_msglayout_field *val_field = &entry->fields[1];
|
713
734
|
char key_size = desctype_to_mapsize[key_field->descriptortype];
|
@@ -727,28 +748,28 @@ static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
727
748
|
ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], &d->arena));
|
728
749
|
}
|
729
750
|
|
730
|
-
ptr = decode_tosubmsg(d, ptr, &ent.k,
|
751
|
+
ptr = decode_tosubmsg(d, ptr, &ent.k, submsgs, field, val->size);
|
731
752
|
_upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena);
|
732
753
|
return ptr;
|
733
754
|
}
|
734
755
|
|
735
756
|
static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
736
|
-
const
|
737
|
-
const upb_msglayout_field *field, wireval val,
|
757
|
+
upb_msglayout const *const *submsgs,
|
758
|
+
const upb_msglayout_field *field, wireval *val,
|
738
759
|
int op) {
|
739
760
|
void *mem = UPB_PTR_AT(msg, field->offset, void);
|
740
761
|
int type = field->descriptortype;
|
741
762
|
|
742
763
|
/* Set presence if necessary. */
|
743
|
-
if (field->presence
|
764
|
+
if (field->presence > 0) {
|
765
|
+
_upb_sethas_field(msg, field);
|
766
|
+
} else if (field->presence < 0) {
|
744
767
|
/* Oneof case */
|
745
768
|
uint32_t *oneof_case = _upb_oneofcase_field(msg, field);
|
746
769
|
if (op == OP_SUBMSG && *oneof_case != field->number) {
|
747
770
|
memset(mem, 0, sizeof(void*));
|
748
771
|
}
|
749
772
|
*oneof_case = field->number;
|
750
|
-
} else if (field->presence > 0) {
|
751
|
-
_upb_sethas_field(msg, field);
|
752
773
|
}
|
753
774
|
|
754
775
|
/* Store into message. */
|
@@ -757,29 +778,29 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
757
778
|
upb_msg **submsgp = mem;
|
758
779
|
upb_msg *submsg = *submsgp;
|
759
780
|
if (!submsg) {
|
760
|
-
submsg = decode_newsubmsg(d,
|
781
|
+
submsg = decode_newsubmsg(d, submsgs, field);
|
761
782
|
*submsgp = submsg;
|
762
783
|
}
|
763
784
|
if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) {
|
764
|
-
ptr = decode_togroup(d, ptr, submsg,
|
785
|
+
ptr = decode_togroup(d, ptr, submsg, submsgs, field);
|
765
786
|
} else {
|
766
|
-
ptr = decode_tosubmsg(d, ptr, submsg,
|
787
|
+
ptr = decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size);
|
767
788
|
}
|
768
789
|
break;
|
769
790
|
}
|
770
791
|
case OP_STRING:
|
771
|
-
decode_verifyutf8(d, ptr, val
|
792
|
+
decode_verifyutf8(d, ptr, val->size);
|
772
793
|
/* Fallthrough. */
|
773
794
|
case OP_BYTES:
|
774
|
-
return decode_readstr(d, ptr, val
|
795
|
+
return decode_readstr(d, ptr, val->size, mem);
|
775
796
|
case OP_SCALAR_LG2(3):
|
776
|
-
memcpy(mem,
|
797
|
+
memcpy(mem, val, 8);
|
777
798
|
break;
|
778
799
|
case OP_SCALAR_LG2(2):
|
779
|
-
memcpy(mem,
|
800
|
+
memcpy(mem, val, 4);
|
780
801
|
break;
|
781
802
|
case OP_SCALAR_LG2(0):
|
782
|
-
memcpy(mem,
|
803
|
+
memcpy(mem, val, 1);
|
783
804
|
break;
|
784
805
|
default:
|
785
806
|
UPB_UNREACHABLE();
|
@@ -805,6 +826,7 @@ static bool decode_tryfastdispatch(upb_decstate *d, const char **ptr,
|
|
805
826
|
UPB_NOINLINE
|
806
827
|
static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
807
828
|
const upb_msglayout *layout) {
|
829
|
+
int last_field_index = 0;
|
808
830
|
while (true) {
|
809
831
|
uint32_t tag;
|
810
832
|
const upb_msglayout_field *field;
|
@@ -819,7 +841,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
819
841
|
field_number = tag >> 3;
|
820
842
|
wire_type = tag & 7;
|
821
843
|
|
822
|
-
field = upb_find_field(layout, field_number);
|
844
|
+
field = upb_find_field(layout, field_number, &last_field_index);
|
823
845
|
|
824
846
|
switch (wire_type) {
|
825
847
|
case UPB_WIRE_TYPE_VARINT:
|
@@ -844,7 +866,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
844
866
|
case UPB_WIRE_TYPE_DELIMITED: {
|
845
867
|
int ndx = field->descriptortype;
|
846
868
|
uint64_t size;
|
847
|
-
if (
|
869
|
+
if (_upb_getmode(field) == _UPB_MODE_ARRAY) ndx += 18;
|
848
870
|
ptr = decode_varint64(d, ptr, &size);
|
849
871
|
if (size >= INT32_MAX ||
|
850
872
|
ptr - d->end + (int32_t)size > d->limit) {
|
@@ -868,17 +890,18 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
868
890
|
|
869
891
|
if (op >= 0) {
|
870
892
|
/* Parse, using op for dispatch. */
|
871
|
-
switch (field
|
872
|
-
case
|
873
|
-
|
874
|
-
ptr = decode_toarray(d, ptr, msg, layout, field, val, op);
|
893
|
+
switch (_upb_getmode(field)) {
|
894
|
+
case _UPB_MODE_ARRAY:
|
895
|
+
ptr = decode_toarray(d, ptr, msg, layout->submsgs, field, &val, op);
|
875
896
|
break;
|
876
|
-
case
|
877
|
-
ptr = decode_tomap(d, ptr, msg, layout, field, val);
|
897
|
+
case _UPB_MODE_MAP:
|
898
|
+
ptr = decode_tomap(d, ptr, msg, layout->submsgs, field, &val);
|
878
899
|
break;
|
879
|
-
|
880
|
-
ptr = decode_tomsg(d, ptr, msg, layout, field, val, op);
|
900
|
+
case _UPB_MODE_SCALAR:
|
901
|
+
ptr = decode_tomsg(d, ptr, msg, layout->submsgs, field, &val, op);
|
881
902
|
break;
|
903
|
+
default:
|
904
|
+
UPB_UNREACHABLE();
|
882
905
|
}
|
883
906
|
} else {
|
884
907
|
unknown:
|
@@ -924,7 +947,8 @@ static bool decode_top(struct upb_decstate *d, const char *buf, void *msg,
|
|
924
947
|
}
|
925
948
|
|
926
949
|
bool _upb_decode(const char *buf, size_t size, void *msg,
|
927
|
-
const upb_msglayout *l,
|
950
|
+
const upb_msglayout *l, const upb_extreg *extreg, int options,
|
951
|
+
upb_arena *arena) {
|
928
952
|
bool ok;
|
929
953
|
upb_decstate state;
|
930
954
|
unsigned depth = (unsigned)options >> 16;
|
@@ -1126,7 +1150,7 @@ static void encode_fixedarray(upb_encstate *e, const upb_array *arr,
|
|
1126
1150
|
}
|
1127
1151
|
}
|
1128
1152
|
|
1129
|
-
static void encode_message(upb_encstate *e, const
|
1153
|
+
static void encode_message(upb_encstate *e, const upb_msg *msg,
|
1130
1154
|
const upb_msglayout *m, size_t *size);
|
1131
1155
|
|
1132
1156
|
static void encode_scalar(upb_encstate *e, const void *_field_mem,
|
@@ -1218,10 +1242,10 @@ static void encode_scalar(upb_encstate *e, const void *_field_mem,
|
|
1218
1242
|
encode_tag(e, f->number, wire_type);
|
1219
1243
|
}
|
1220
1244
|
|
1221
|
-
static void encode_array(upb_encstate *e, const
|
1245
|
+
static void encode_array(upb_encstate *e, const upb_msg *msg,
|
1222
1246
|
const upb_msglayout *m, const upb_msglayout_field *f) {
|
1223
|
-
const upb_array *arr = *(
|
1224
|
-
bool packed = f->
|
1247
|
+
const upb_array *arr = *UPB_PTR_AT(msg, f->offset, upb_array*);
|
1248
|
+
bool packed = f->mode & _UPB_MODE_IS_PACKED;
|
1225
1249
|
size_t pre_len = e->limit - e->ptr;
|
1226
1250
|
|
1227
1251
|
if (arr == NULL || arr->len == 0) {
|
@@ -1337,9 +1361,9 @@ static void encode_mapentry(upb_encstate *e, uint32_t number,
|
|
1337
1361
|
encode_tag(e, number, UPB_WIRE_TYPE_DELIMITED);
|
1338
1362
|
}
|
1339
1363
|
|
1340
|
-
static void encode_map(upb_encstate *e, const
|
1364
|
+
static void encode_map(upb_encstate *e, const upb_msg *msg,
|
1341
1365
|
const upb_msglayout *m, const upb_msglayout_field *f) {
|
1342
|
-
const upb_map *map = *(const upb_map
|
1366
|
+
const upb_map *map = *UPB_PTR_AT(msg, f->offset, const upb_map*);
|
1343
1367
|
const upb_msglayout *layout = m->submsgs[f->submsg_index];
|
1344
1368
|
UPB_ASSERT(layout->field_count == 2);
|
1345
1369
|
|
@@ -1385,7 +1409,7 @@ static void encode_scalarfield(upb_encstate *e, const char *msg,
|
|
1385
1409
|
encode_scalar(e, msg + f->offset, m, f, skip_empty);
|
1386
1410
|
}
|
1387
1411
|
|
1388
|
-
static void encode_message(upb_encstate *e, const
|
1412
|
+
static void encode_message(upb_encstate *e, const upb_msg *msg,
|
1389
1413
|
const upb_msglayout *m, size_t *size) {
|
1390
1414
|
size_t pre_len = e->limit - e->ptr;
|
1391
1415
|
const upb_msglayout_field *f = &m->fields[m->field_count];
|
@@ -1402,12 +1426,18 @@ static void encode_message(upb_encstate *e, const char *msg,
|
|
1402
1426
|
|
1403
1427
|
while (f != first) {
|
1404
1428
|
f--;
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1429
|
+
switch (_upb_getmode(f)) {
|
1430
|
+
case _UPB_MODE_ARRAY:
|
1431
|
+
encode_array(e, msg, m, f);
|
1432
|
+
break;
|
1433
|
+
case _UPB_MODE_MAP:
|
1434
|
+
encode_map(e, msg, m, f);
|
1435
|
+
break;
|
1436
|
+
case _UPB_MODE_SCALAR:
|
1437
|
+
encode_scalarfield(e, msg, m, f);
|
1438
|
+
break;
|
1439
|
+
default:
|
1440
|
+
UPB_UNREACHABLE();
|
1411
1441
|
}
|
1412
1442
|
}
|
1413
1443
|
|
@@ -1452,7 +1482,7 @@ char *upb_encode_ex(const void *msg, const upb_msglayout *l, int options,
|
|
1452
1482
|
|
1453
1483
|
/** upb_msg *******************************************************************/
|
1454
1484
|
|
1455
|
-
static const size_t overhead = sizeof(
|
1485
|
+
static const size_t overhead = sizeof(upb_msg_internaldata);
|
1456
1486
|
|
1457
1487
|
static const upb_msg_internal *upb_msg_getinternal_const(const upb_msg *msg) {
|
1458
1488
|
ptrdiff_t size = sizeof(upb_msg_internal);
|
@@ -1468,49 +1498,107 @@ void _upb_msg_clear(upb_msg *msg, const upb_msglayout *l) {
|
|
1468
1498
|
memset(mem, 0, upb_msg_sizeof(l));
|
1469
1499
|
}
|
1470
1500
|
|
1501
|
+
static bool realloc_internal(upb_msg *msg, size_t need, upb_arena *arena) {
|
1502
|
+
upb_msg_internal *in = upb_msg_getinternal(msg);
|
1503
|
+
if (!in->internal) {
|
1504
|
+
/* No internal data, allocate from scratch. */
|
1505
|
+
size_t size = UPB_MAX(128, _upb_lg2ceilsize(need + overhead));
|
1506
|
+
upb_msg_internaldata *internal = upb_arena_malloc(arena, size);
|
1507
|
+
if (!internal) return false;
|
1508
|
+
internal->size = size;
|
1509
|
+
internal->unknown_end = overhead;
|
1510
|
+
internal->ext_begin = size;
|
1511
|
+
in->internal = internal;
|
1512
|
+
} else if (in->internal->ext_begin - in->internal->unknown_end < need) {
|
1513
|
+
/* Internal data is too small, reallocate. */
|
1514
|
+
size_t new_size = _upb_lg2ceilsize(in->internal->size + need);
|
1515
|
+
size_t ext_bytes = in->internal->size - in->internal->ext_begin;
|
1516
|
+
size_t new_ext_begin = new_size - ext_bytes;
|
1517
|
+
upb_msg_internaldata *internal =
|
1518
|
+
upb_arena_realloc(arena, in->internal, in->internal->size, new_size);
|
1519
|
+
if (!internal) return false;
|
1520
|
+
if (ext_bytes) {
|
1521
|
+
/* Need to move extension data to the end. */
|
1522
|
+
char *ptr = (char*)internal;
|
1523
|
+
memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes);
|
1524
|
+
}
|
1525
|
+
internal->ext_begin = new_ext_begin;
|
1526
|
+
internal->size = new_size;
|
1527
|
+
in->internal = internal;
|
1528
|
+
}
|
1529
|
+
UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need);
|
1530
|
+
return true;
|
1531
|
+
}
|
1532
|
+
|
1471
1533
|
bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
|
1472
1534
|
upb_arena *arena) {
|
1473
|
-
|
1535
|
+
if (!realloc_internal(msg, len, arena)) return false;
|
1474
1536
|
upb_msg_internal *in = upb_msg_getinternal(msg);
|
1475
|
-
|
1476
|
-
|
1477
|
-
while (size < len) size *= 2;
|
1478
|
-
in->unknown = upb_arena_malloc(arena, size + overhead);
|
1479
|
-
if (!in->unknown) return false;
|
1480
|
-
in->unknown->size = size;
|
1481
|
-
in->unknown->len = 0;
|
1482
|
-
} else if (in->unknown->size - in->unknown->len < len) {
|
1483
|
-
size_t need = in->unknown->len + len;
|
1484
|
-
size_t size = in->unknown->size;
|
1485
|
-
while (size < need) size *= 2;
|
1486
|
-
in->unknown = upb_arena_realloc(
|
1487
|
-
arena, in->unknown, in->unknown->size + overhead, size + overhead);
|
1488
|
-
if (!in->unknown) return false;
|
1489
|
-
in->unknown->size = size;
|
1490
|
-
}
|
1491
|
-
memcpy(UPB_PTR_AT(in->unknown + 1, in->unknown->len, char), data, len);
|
1492
|
-
in->unknown->len += len;
|
1537
|
+
memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len);
|
1538
|
+
in->internal->unknown_end += len;
|
1493
1539
|
return true;
|
1494
1540
|
}
|
1495
1541
|
|
1496
1542
|
void _upb_msg_discardunknown_shallow(upb_msg *msg) {
|
1497
1543
|
upb_msg_internal *in = upb_msg_getinternal(msg);
|
1498
|
-
if (in->
|
1499
|
-
in->
|
1544
|
+
if (in->internal) {
|
1545
|
+
in->internal->unknown_end = overhead;
|
1500
1546
|
}
|
1501
1547
|
}
|
1502
1548
|
|
1503
1549
|
const char *upb_msg_getunknown(const upb_msg *msg, size_t *len) {
|
1504
1550
|
const upb_msg_internal *in = upb_msg_getinternal_const(msg);
|
1505
|
-
if (in->
|
1506
|
-
*len = in->
|
1507
|
-
return (char*)(in->
|
1551
|
+
if (in->internal) {
|
1552
|
+
*len = in->internal->unknown_end - overhead;
|
1553
|
+
return (char*)(in->internal + 1);
|
1508
1554
|
} else {
|
1509
1555
|
*len = 0;
|
1510
1556
|
return NULL;
|
1511
1557
|
}
|
1512
1558
|
}
|
1513
1559
|
|
1560
|
+
const upb_msg_ext *_upb_msg_getexts(const upb_msg *msg, size_t *count) {
|
1561
|
+
const upb_msg_internal *in = upb_msg_getinternal_const(msg);
|
1562
|
+
if (in->internal) {
|
1563
|
+
*count =
|
1564
|
+
(in->internal->size - in->internal->ext_begin) / sizeof(upb_msg_ext);
|
1565
|
+
return UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
|
1566
|
+
} else {
|
1567
|
+
*count = 0;
|
1568
|
+
return NULL;
|
1569
|
+
}
|
1570
|
+
}
|
1571
|
+
|
1572
|
+
const upb_msg_ext *_upb_msg_getext(const upb_msg *msg,
|
1573
|
+
const upb_msglayout_ext *e) {
|
1574
|
+
size_t n;
|
1575
|
+
const upb_msg_ext *ext = _upb_msg_getexts(msg, &n);
|
1576
|
+
|
1577
|
+
/* For now we use linear search exclusively to find extensions. If this
|
1578
|
+
* becomes an issue due to messages with lots of extensions, we can introduce
|
1579
|
+
* a table of some sort. */
|
1580
|
+
for (size_t i = 0; i < n; i++) {
|
1581
|
+
if (ext[i].ext == e) {
|
1582
|
+
return &ext[i];
|
1583
|
+
}
|
1584
|
+
}
|
1585
|
+
|
1586
|
+
return NULL;
|
1587
|
+
}
|
1588
|
+
|
1589
|
+
upb_msg_ext *_upb_msg_getorcreateext(upb_msg *msg, const upb_msglayout_ext *e,
|
1590
|
+
upb_arena *arena) {
|
1591
|
+
upb_msg_ext *ext = (upb_msg_ext*)_upb_msg_getext(msg, e);
|
1592
|
+
if (ext) return ext;
|
1593
|
+
if (!realloc_internal(msg, sizeof(upb_msg_ext), arena)) return NULL;
|
1594
|
+
upb_msg_internal *in = upb_msg_getinternal(msg);
|
1595
|
+
in->internal->ext_begin -= sizeof(upb_msg_ext);
|
1596
|
+
ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void);
|
1597
|
+
memset(ext, 0, sizeof(upb_msg_ext));
|
1598
|
+
ext->ext = e;
|
1599
|
+
return ext;
|
1600
|
+
}
|
1601
|
+
|
1514
1602
|
/** upb_array *****************************************************************/
|
1515
1603
|
|
1516
1604
|
bool _upb_array_realloc(upb_array *arr, size_t min_size, upb_arena *arena) {
|
@@ -1700,6 +1788,63 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type,
|
|
1700
1788
|
return true;
|
1701
1789
|
}
|
1702
1790
|
|
1791
|
+
/** upb_extreg ****************************************************************/
|
1792
|
+
|
1793
|
+
struct upb_extreg {
|
1794
|
+
upb_arena *arena;
|
1795
|
+
upb_strtable exts; /* Key is upb_msglayout* concatenated with fieldnum. */
|
1796
|
+
};
|
1797
|
+
|
1798
|
+
#define EXTREG_KEY_SIZE (sizeof(upb_msglayout*) + sizeof(uint32_t))
|
1799
|
+
|
1800
|
+
static void extreg_key(char *buf, const upb_msglayout *l, uint32_t fieldnum) {
|
1801
|
+
memcpy(buf, &l, sizeof(l));
|
1802
|
+
memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum));
|
1803
|
+
}
|
1804
|
+
|
1805
|
+
upb_extreg *upb_extreg_new(upb_arena *arena) {
|
1806
|
+
upb_extreg *r = upb_arena_malloc(arena, sizeof(*r));
|
1807
|
+
if (!r) return NULL;
|
1808
|
+
r->arena = arena;
|
1809
|
+
if (!upb_strtable_init(&r->exts, 8, arena)) return NULL;
|
1810
|
+
return r;
|
1811
|
+
}
|
1812
|
+
|
1813
|
+
bool _upb_extreg_add(upb_extreg *r, const upb_msglayout_ext *e, size_t count) {
|
1814
|
+
char buf[EXTREG_KEY_SIZE];
|
1815
|
+
const upb_msglayout_ext *start = e;
|
1816
|
+
const upb_msglayout_ext *end = e + count;
|
1817
|
+
for (; e < end; e++) {
|
1818
|
+
extreg_key(buf, e->extendee, e->field.number);
|
1819
|
+
if (!upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
|
1820
|
+
upb_value_constptr(e), r->arena)) {
|
1821
|
+
goto failure;
|
1822
|
+
}
|
1823
|
+
}
|
1824
|
+
return true;
|
1825
|
+
|
1826
|
+
failure:
|
1827
|
+
/* Back out the entries previously added. */
|
1828
|
+
for (end = e, e = start; e < end; e++) {
|
1829
|
+
extreg_key(buf, e->extendee, e->field.number);
|
1830
|
+
upb_strtable_remove(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
|
1831
|
+
}
|
1832
|
+
return false;
|
1833
|
+
}
|
1834
|
+
|
1835
|
+
const upb_msglayout_field *_upb_extreg_get(const upb_extreg *r,
|
1836
|
+
const upb_msglayout *l,
|
1837
|
+
uint32_t num) {
|
1838
|
+
char buf[EXTREG_KEY_SIZE];
|
1839
|
+
upb_value v;
|
1840
|
+
extreg_key(buf, l, num);
|
1841
|
+
if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) {
|
1842
|
+
return upb_value_getconstptr(v);
|
1843
|
+
} else {
|
1844
|
+
return NULL;
|
1845
|
+
}
|
1846
|
+
}
|
1847
|
+
|
1703
1848
|
/** upb/table.c ************************************************************/
|
1704
1849
|
/*
|
1705
1850
|
* upb_table Implementation
|
@@ -1709,7 +1854,6 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type,
|
|
1709
1854
|
|
1710
1855
|
#include <string.h>
|
1711
1856
|
|
1712
|
-
#include "third_party/wyhash/wyhash.h"
|
1713
1857
|
|
1714
1858
|
/* Must be last. */
|
1715
1859
|
|
@@ -1982,8 +2126,143 @@ static upb_tabkey strcopy(lookupkey_t k2, upb_arena *a) {
|
|
1982
2126
|
return (uintptr_t)str;
|
1983
2127
|
}
|
1984
2128
|
|
2129
|
+
/* Adapted from ABSL's wyhash. */
|
2130
|
+
|
2131
|
+
static uint64_t UnalignedLoad64(const void *p) {
|
2132
|
+
uint64_t val;
|
2133
|
+
memcpy(&val, p, 8);
|
2134
|
+
return val;
|
2135
|
+
}
|
2136
|
+
|
2137
|
+
static uint32_t UnalignedLoad32(const void *p) {
|
2138
|
+
uint32_t val;
|
2139
|
+
memcpy(&val, p, 4);
|
2140
|
+
return val;
|
2141
|
+
}
|
2142
|
+
|
2143
|
+
#if defined(_MSC_VER) && defined(_M_X64)
|
2144
|
+
#include <intrin.h>
|
2145
|
+
#endif
|
2146
|
+
|
2147
|
+
/* Computes a * b, returning the low 64 bits of the result and storing the high
|
2148
|
+
* 64 bits in |*high|. */
|
2149
|
+
static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) {
|
2150
|
+
#ifdef __SIZEOF_INT128__
|
2151
|
+
__uint128_t p = v0;
|
2152
|
+
p *= v1;
|
2153
|
+
*out_high = (uint64_t)(p >> 64);
|
2154
|
+
return (uint64_t)p;
|
2155
|
+
#elif defined(_MSC_VER) && defined(_M_X64)
|
2156
|
+
return _umul128(v0, v1, out_high);
|
2157
|
+
#else
|
2158
|
+
uint64_t a32 = v0 >> 32;
|
2159
|
+
uint64_t a00 = v0 & 0xffffffff;
|
2160
|
+
uint64_t b32 = v1 >> 32;
|
2161
|
+
uint64_t b00 = v1 & 0xffffffff;
|
2162
|
+
uint64_t high = a32 * b32;
|
2163
|
+
uint64_t low = a00 * b00;
|
2164
|
+
uint64_t mid1 = a32 * b00;
|
2165
|
+
uint64_t mid2 = a00 * b32;
|
2166
|
+
low += (mid1 << 32) + (mid2 << 32);
|
2167
|
+
// Omit carry bit, for mixing we do not care about exact numerical precision.
|
2168
|
+
high += (mid1 >> 32) + (mid2 >> 32);
|
2169
|
+
*out_high = high;
|
2170
|
+
return low;
|
2171
|
+
#endif
|
2172
|
+
}
|
2173
|
+
|
2174
|
+
static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
|
2175
|
+
uint64_t high;
|
2176
|
+
uint64_t low = upb_umul128(v0, v1, &high);
|
2177
|
+
return low ^ high;
|
2178
|
+
}
|
2179
|
+
|
2180
|
+
uint64_t Wyhash(const void *data, size_t len, uint64_t seed,
|
2181
|
+
const uint64_t salt[]) {
|
2182
|
+
const uint8_t* ptr = (const uint8_t*)data;
|
2183
|
+
uint64_t starting_length = (uint64_t)len;
|
2184
|
+
uint64_t current_state = seed ^ salt[0];
|
2185
|
+
|
2186
|
+
if (len > 64) {
|
2187
|
+
// If we have more than 64 bytes, we're going to handle chunks of 64
|
2188
|
+
// bytes at a time. We're going to build up two separate hash states
|
2189
|
+
// which we will then hash together.
|
2190
|
+
uint64_t duplicated_state = current_state;
|
2191
|
+
|
2192
|
+
do {
|
2193
|
+
uint64_t a = UnalignedLoad64(ptr);
|
2194
|
+
uint64_t b = UnalignedLoad64(ptr + 8);
|
2195
|
+
uint64_t c = UnalignedLoad64(ptr + 16);
|
2196
|
+
uint64_t d = UnalignedLoad64(ptr + 24);
|
2197
|
+
uint64_t e = UnalignedLoad64(ptr + 32);
|
2198
|
+
uint64_t f = UnalignedLoad64(ptr + 40);
|
2199
|
+
uint64_t g = UnalignedLoad64(ptr + 48);
|
2200
|
+
uint64_t h = UnalignedLoad64(ptr + 56);
|
2201
|
+
|
2202
|
+
uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
|
2203
|
+
uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
|
2204
|
+
current_state = (cs0 ^ cs1);
|
2205
|
+
|
2206
|
+
uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
|
2207
|
+
uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
|
2208
|
+
duplicated_state = (ds0 ^ ds1);
|
2209
|
+
|
2210
|
+
ptr += 64;
|
2211
|
+
len -= 64;
|
2212
|
+
} while (len > 64);
|
2213
|
+
|
2214
|
+
current_state = current_state ^ duplicated_state;
|
2215
|
+
}
|
2216
|
+
|
2217
|
+
// We now have a data `ptr` with at most 64 bytes and the current state
|
2218
|
+
// of the hashing state machine stored in current_state.
|
2219
|
+
while (len > 16) {
|
2220
|
+
uint64_t a = UnalignedLoad64(ptr);
|
2221
|
+
uint64_t b = UnalignedLoad64(ptr + 8);
|
2222
|
+
|
2223
|
+
current_state = WyhashMix(a ^ salt[1], b ^ current_state);
|
2224
|
+
|
2225
|
+
ptr += 16;
|
2226
|
+
len -= 16;
|
2227
|
+
}
|
2228
|
+
|
2229
|
+
// We now have a data `ptr` with at most 16 bytes.
|
2230
|
+
uint64_t a = 0;
|
2231
|
+
uint64_t b = 0;
|
2232
|
+
if (len > 8) {
|
2233
|
+
// When we have at least 9 and at most 16 bytes, set A to the first 64
|
2234
|
+
// bits of the input and B to the last 64 bits of the input. Yes, they will
|
2235
|
+
// overlap in the middle if we are working with less than the full 16
|
2236
|
+
// bytes.
|
2237
|
+
a = UnalignedLoad64(ptr);
|
2238
|
+
b = UnalignedLoad64(ptr + len - 8);
|
2239
|
+
} else if (len > 3) {
|
2240
|
+
// If we have at least 4 and at most 8 bytes, set A to the first 32
|
2241
|
+
// bits and B to the last 32 bits.
|
2242
|
+
a = UnalignedLoad32(ptr);
|
2243
|
+
b = UnalignedLoad32(ptr + len - 4);
|
2244
|
+
} else if (len > 0) {
|
2245
|
+
// If we have at least 1 and at most 3 bytes, read all of the provided
|
2246
|
+
// bits into A, with some adjustments.
|
2247
|
+
a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
|
2248
|
+
b = 0;
|
2249
|
+
} else {
|
2250
|
+
a = 0;
|
2251
|
+
b = 0;
|
2252
|
+
}
|
2253
|
+
|
2254
|
+
uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
|
2255
|
+
uint64_t z = salt[1] ^ starting_length;
|
2256
|
+
return WyhashMix(w, z);
|
2257
|
+
}
|
2258
|
+
|
2259
|
+
const uint64_t kWyhashSalt[5] = {
|
2260
|
+
0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL,
|
2261
|
+
0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL,
|
2262
|
+
};
|
2263
|
+
|
1985
2264
|
static uint32_t table_hash(const char *p, size_t n) {
|
1986
|
-
return
|
2265
|
+
return Wyhash(p, n, 0, kWyhashSalt);
|
1987
2266
|
}
|
1988
2267
|
|
1989
2268
|
static uint32_t strhash(upb_tabkey key) {
|
@@ -3710,13 +3989,13 @@ static const upb_msglayout *const google_protobuf_FileDescriptorSet_submsgs[1] =
|
|
3710
3989
|
};
|
3711
3990
|
|
3712
3991
|
static const upb_msglayout_field google_protobuf_FileDescriptorSet__fields[1] = {
|
3713
|
-
{1, UPB_SIZE(0, 0), 0, 0, 11,
|
3992
|
+
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY},
|
3714
3993
|
};
|
3715
3994
|
|
3716
3995
|
const upb_msglayout google_protobuf_FileDescriptorSet_msginit = {
|
3717
3996
|
&google_protobuf_FileDescriptorSet_submsgs[0],
|
3718
3997
|
&google_protobuf_FileDescriptorSet__fields[0],
|
3719
|
-
UPB_SIZE(8, 8), 1, false, 255,
|
3998
|
+
UPB_SIZE(8, 8), 1, false, 1, 255,
|
3720
3999
|
};
|
3721
4000
|
|
3722
4001
|
static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] = {
|
@@ -3729,24 +4008,24 @@ static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6]
|
|
3729
4008
|
};
|
3730
4009
|
|
3731
4010
|
static const upb_msglayout_field google_protobuf_FileDescriptorProto__fields[12] = {
|
3732
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3733
|
-
{2, UPB_SIZE(12, 24), 2, 0, 12,
|
3734
|
-
{3, UPB_SIZE(36, 72), 0, 0, 12,
|
3735
|
-
{4, UPB_SIZE(40, 80), 0, 0, 11,
|
3736
|
-
{5, UPB_SIZE(44, 88), 0, 1, 11,
|
3737
|
-
{6, UPB_SIZE(48, 96), 0, 4, 11,
|
3738
|
-
{7, UPB_SIZE(52, 104), 0, 2, 11,
|
3739
|
-
{8, UPB_SIZE(28, 56), 3, 3, 11,
|
3740
|
-
{9, UPB_SIZE(32, 64), 4, 5, 11,
|
3741
|
-
{10, UPB_SIZE(56, 112), 0, 0, 5,
|
3742
|
-
{11, UPB_SIZE(60, 120), 0, 0, 5,
|
3743
|
-
{12, UPB_SIZE(20, 40), 5, 0, 12,
|
4011
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4012
|
+
{2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR},
|
4013
|
+
{3, UPB_SIZE(36, 72), 0, 0, 12, _UPB_MODE_ARRAY},
|
4014
|
+
{4, UPB_SIZE(40, 80), 0, 0, 11, _UPB_MODE_ARRAY},
|
4015
|
+
{5, UPB_SIZE(44, 88), 0, 1, 11, _UPB_MODE_ARRAY},
|
4016
|
+
{6, UPB_SIZE(48, 96), 0, 4, 11, _UPB_MODE_ARRAY},
|
4017
|
+
{7, UPB_SIZE(52, 104), 0, 2, 11, _UPB_MODE_ARRAY},
|
4018
|
+
{8, UPB_SIZE(28, 56), 3, 3, 11, _UPB_MODE_SCALAR},
|
4019
|
+
{9, UPB_SIZE(32, 64), 4, 5, 11, _UPB_MODE_SCALAR},
|
4020
|
+
{10, UPB_SIZE(56, 112), 0, 0, 5, _UPB_MODE_ARRAY},
|
4021
|
+
{11, UPB_SIZE(60, 120), 0, 0, 5, _UPB_MODE_ARRAY},
|
4022
|
+
{12, UPB_SIZE(20, 40), 5, 0, 12, _UPB_MODE_SCALAR},
|
3744
4023
|
};
|
3745
4024
|
|
3746
4025
|
const upb_msglayout google_protobuf_FileDescriptorProto_msginit = {
|
3747
4026
|
&google_protobuf_FileDescriptorProto_submsgs[0],
|
3748
4027
|
&google_protobuf_FileDescriptorProto__fields[0],
|
3749
|
-
UPB_SIZE(64, 128), 12, false, 255,
|
4028
|
+
UPB_SIZE(64, 128), 12, false, 12, 255,
|
3750
4029
|
};
|
3751
4030
|
|
3752
4031
|
static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = {
|
@@ -3760,22 +4039,22 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = {
|
|
3760
4039
|
};
|
3761
4040
|
|
3762
4041
|
static const upb_msglayout_field google_protobuf_DescriptorProto__fields[10] = {
|
3763
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3764
|
-
{2, UPB_SIZE(16, 32), 0, 4, 11,
|
3765
|
-
{3, UPB_SIZE(20, 40), 0, 0, 11,
|
3766
|
-
{4, UPB_SIZE(24, 48), 0, 3, 11,
|
3767
|
-
{5, UPB_SIZE(28, 56), 0, 1, 11,
|
3768
|
-
{6, UPB_SIZE(32, 64), 0, 4, 11,
|
3769
|
-
{7, UPB_SIZE(12, 24), 2, 5, 11,
|
3770
|
-
{8, UPB_SIZE(36, 72), 0, 6, 11,
|
3771
|
-
{9, UPB_SIZE(40, 80), 0, 2, 11,
|
3772
|
-
{10, UPB_SIZE(44, 88), 0, 0, 12,
|
4042
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4043
|
+
{2, UPB_SIZE(16, 32), 0, 4, 11, _UPB_MODE_ARRAY},
|
4044
|
+
{3, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY},
|
4045
|
+
{4, UPB_SIZE(24, 48), 0, 3, 11, _UPB_MODE_ARRAY},
|
4046
|
+
{5, UPB_SIZE(28, 56), 0, 1, 11, _UPB_MODE_ARRAY},
|
4047
|
+
{6, UPB_SIZE(32, 64), 0, 4, 11, _UPB_MODE_ARRAY},
|
4048
|
+
{7, UPB_SIZE(12, 24), 2, 5, 11, _UPB_MODE_SCALAR},
|
4049
|
+
{8, UPB_SIZE(36, 72), 0, 6, 11, _UPB_MODE_ARRAY},
|
4050
|
+
{9, UPB_SIZE(40, 80), 0, 2, 11, _UPB_MODE_ARRAY},
|
4051
|
+
{10, UPB_SIZE(44, 88), 0, 0, 12, _UPB_MODE_ARRAY},
|
3773
4052
|
};
|
3774
4053
|
|
3775
4054
|
const upb_msglayout google_protobuf_DescriptorProto_msginit = {
|
3776
4055
|
&google_protobuf_DescriptorProto_submsgs[0],
|
3777
4056
|
&google_protobuf_DescriptorProto__fields[0],
|
3778
|
-
UPB_SIZE(48, 96), 10, false, 255,
|
4057
|
+
UPB_SIZE(48, 96), 10, false, 10, 255,
|
3779
4058
|
};
|
3780
4059
|
|
3781
4060
|
static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = {
|
@@ -3783,26 +4062,26 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange
|
|
3783
4062
|
};
|
3784
4063
|
|
3785
4064
|
static const upb_msglayout_field google_protobuf_DescriptorProto_ExtensionRange__fields[3] = {
|
3786
|
-
{1, UPB_SIZE(4, 4), 1, 0, 5,
|
3787
|
-
{2, UPB_SIZE(8, 8), 2, 0, 5,
|
3788
|
-
{3, UPB_SIZE(12, 16), 3, 0, 11,
|
4065
|
+
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR},
|
4066
|
+
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR},
|
4067
|
+
{3, UPB_SIZE(12, 16), 3, 0, 11, _UPB_MODE_SCALAR},
|
3789
4068
|
};
|
3790
4069
|
|
3791
4070
|
const upb_msglayout google_protobuf_DescriptorProto_ExtensionRange_msginit = {
|
3792
4071
|
&google_protobuf_DescriptorProto_ExtensionRange_submsgs[0],
|
3793
4072
|
&google_protobuf_DescriptorProto_ExtensionRange__fields[0],
|
3794
|
-
UPB_SIZE(16, 24), 3, false, 255,
|
4073
|
+
UPB_SIZE(16, 24), 3, false, 3, 255,
|
3795
4074
|
};
|
3796
4075
|
|
3797
4076
|
static const upb_msglayout_field google_protobuf_DescriptorProto_ReservedRange__fields[2] = {
|
3798
|
-
{1, UPB_SIZE(4, 4), 1, 0, 5,
|
3799
|
-
{2, UPB_SIZE(8, 8), 2, 0, 5,
|
4077
|
+
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR},
|
4078
|
+
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR},
|
3800
4079
|
};
|
3801
4080
|
|
3802
4081
|
const upb_msglayout google_protobuf_DescriptorProto_ReservedRange_msginit = {
|
3803
4082
|
NULL,
|
3804
4083
|
&google_protobuf_DescriptorProto_ReservedRange__fields[0],
|
3805
|
-
UPB_SIZE(16, 16), 2, false, 255,
|
4084
|
+
UPB_SIZE(16, 16), 2, false, 2, 255,
|
3806
4085
|
};
|
3807
4086
|
|
3808
4087
|
static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[1] = {
|
@@ -3810,13 +4089,13 @@ static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[
|
|
3810
4089
|
};
|
3811
4090
|
|
3812
4091
|
static const upb_msglayout_field google_protobuf_ExtensionRangeOptions__fields[1] = {
|
3813
|
-
{999, UPB_SIZE(0, 0), 0, 0, 11,
|
4092
|
+
{999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY},
|
3814
4093
|
};
|
3815
4094
|
|
3816
4095
|
const upb_msglayout google_protobuf_ExtensionRangeOptions_msginit = {
|
3817
4096
|
&google_protobuf_ExtensionRangeOptions_submsgs[0],
|
3818
4097
|
&google_protobuf_ExtensionRangeOptions__fields[0],
|
3819
|
-
UPB_SIZE(8, 8), 1, false, 255,
|
4098
|
+
UPB_SIZE(8, 8), 1, false, 0, 255,
|
3820
4099
|
};
|
3821
4100
|
|
3822
4101
|
static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1] = {
|
@@ -3824,23 +4103,23 @@ static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1
|
|
3824
4103
|
};
|
3825
4104
|
|
3826
4105
|
static const upb_msglayout_field google_protobuf_FieldDescriptorProto__fields[11] = {
|
3827
|
-
{1, UPB_SIZE(24, 24), 1, 0, 12,
|
3828
|
-
{2, UPB_SIZE(32, 40), 2, 0, 12,
|
3829
|
-
{3, UPB_SIZE(12, 12), 3, 0, 5,
|
3830
|
-
{4, UPB_SIZE(4, 4), 4, 0, 14,
|
3831
|
-
{5, UPB_SIZE(8, 8), 5, 0, 14,
|
3832
|
-
{6, UPB_SIZE(40, 56), 6, 0, 12,
|
3833
|
-
{7, UPB_SIZE(48, 72), 7, 0, 12,
|
3834
|
-
{8, UPB_SIZE(64, 104), 8, 0, 11,
|
3835
|
-
{9, UPB_SIZE(16, 16), 9, 0, 5,
|
3836
|
-
{10, UPB_SIZE(56, 88), 10, 0, 12,
|
3837
|
-
{17, UPB_SIZE(20, 20), 11, 0, 8,
|
4106
|
+
{1, UPB_SIZE(24, 24), 1, 0, 12, _UPB_MODE_SCALAR},
|
4107
|
+
{2, UPB_SIZE(32, 40), 2, 0, 12, _UPB_MODE_SCALAR},
|
4108
|
+
{3, UPB_SIZE(12, 12), 3, 0, 5, _UPB_MODE_SCALAR},
|
4109
|
+
{4, UPB_SIZE(4, 4), 4, 0, 14, _UPB_MODE_SCALAR},
|
4110
|
+
{5, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR},
|
4111
|
+
{6, UPB_SIZE(40, 56), 6, 0, 12, _UPB_MODE_SCALAR},
|
4112
|
+
{7, UPB_SIZE(48, 72), 7, 0, 12, _UPB_MODE_SCALAR},
|
4113
|
+
{8, UPB_SIZE(64, 104), 8, 0, 11, _UPB_MODE_SCALAR},
|
4114
|
+
{9, UPB_SIZE(16, 16), 9, 0, 5, _UPB_MODE_SCALAR},
|
4115
|
+
{10, UPB_SIZE(56, 88), 10, 0, 12, _UPB_MODE_SCALAR},
|
4116
|
+
{17, UPB_SIZE(20, 20), 11, 0, 8, _UPB_MODE_SCALAR},
|
3838
4117
|
};
|
3839
4118
|
|
3840
4119
|
const upb_msglayout google_protobuf_FieldDescriptorProto_msginit = {
|
3841
4120
|
&google_protobuf_FieldDescriptorProto_submsgs[0],
|
3842
4121
|
&google_protobuf_FieldDescriptorProto__fields[0],
|
3843
|
-
UPB_SIZE(72, 112), 11, false, 255,
|
4122
|
+
UPB_SIZE(72, 112), 11, false, 10, 255,
|
3844
4123
|
};
|
3845
4124
|
|
3846
4125
|
static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1] = {
|
@@ -3848,14 +4127,14 @@ static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1
|
|
3848
4127
|
};
|
3849
4128
|
|
3850
4129
|
static const upb_msglayout_field google_protobuf_OneofDescriptorProto__fields[2] = {
|
3851
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3852
|
-
{2, UPB_SIZE(12, 24), 2, 0, 11,
|
4130
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4131
|
+
{2, UPB_SIZE(12, 24), 2, 0, 11, _UPB_MODE_SCALAR},
|
3853
4132
|
};
|
3854
4133
|
|
3855
4134
|
const upb_msglayout google_protobuf_OneofDescriptorProto_msginit = {
|
3856
4135
|
&google_protobuf_OneofDescriptorProto_submsgs[0],
|
3857
4136
|
&google_protobuf_OneofDescriptorProto__fields[0],
|
3858
|
-
UPB_SIZE(16, 32), 2, false, 255,
|
4137
|
+
UPB_SIZE(16, 32), 2, false, 2, 255,
|
3859
4138
|
};
|
3860
4139
|
|
3861
4140
|
static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] = {
|
@@ -3865,28 +4144,28 @@ static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3]
|
|
3865
4144
|
};
|
3866
4145
|
|
3867
4146
|
static const upb_msglayout_field google_protobuf_EnumDescriptorProto__fields[5] = {
|
3868
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3869
|
-
{2, UPB_SIZE(16, 32), 0, 2, 11,
|
3870
|
-
{3, UPB_SIZE(12, 24), 2, 1, 11,
|
3871
|
-
{4, UPB_SIZE(20, 40), 0, 0, 11,
|
3872
|
-
{5, UPB_SIZE(24, 48), 0, 0, 12,
|
4147
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4148
|
+
{2, UPB_SIZE(16, 32), 0, 2, 11, _UPB_MODE_ARRAY},
|
4149
|
+
{3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR},
|
4150
|
+
{4, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY},
|
4151
|
+
{5, UPB_SIZE(24, 48), 0, 0, 12, _UPB_MODE_ARRAY},
|
3873
4152
|
};
|
3874
4153
|
|
3875
4154
|
const upb_msglayout google_protobuf_EnumDescriptorProto_msginit = {
|
3876
4155
|
&google_protobuf_EnumDescriptorProto_submsgs[0],
|
3877
4156
|
&google_protobuf_EnumDescriptorProto__fields[0],
|
3878
|
-
UPB_SIZE(32, 64), 5, false, 255,
|
4157
|
+
UPB_SIZE(32, 64), 5, false, 5, 255,
|
3879
4158
|
};
|
3880
4159
|
|
3881
4160
|
static const upb_msglayout_field google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[2] = {
|
3882
|
-
{1, UPB_SIZE(4, 4), 1, 0, 5,
|
3883
|
-
{2, UPB_SIZE(8, 8), 2, 0, 5,
|
4161
|
+
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR},
|
4162
|
+
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR},
|
3884
4163
|
};
|
3885
4164
|
|
3886
4165
|
const upb_msglayout google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit = {
|
3887
4166
|
NULL,
|
3888
4167
|
&google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[0],
|
3889
|
-
UPB_SIZE(16, 16), 2, false, 255,
|
4168
|
+
UPB_SIZE(16, 16), 2, false, 2, 255,
|
3890
4169
|
};
|
3891
4170
|
|
3892
4171
|
static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_submsgs[1] = {
|
@@ -3894,15 +4173,15 @@ static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_subms
|
|
3894
4173
|
};
|
3895
4174
|
|
3896
4175
|
static const upb_msglayout_field google_protobuf_EnumValueDescriptorProto__fields[3] = {
|
3897
|
-
{1, UPB_SIZE(8, 8), 1, 0, 12,
|
3898
|
-
{2, UPB_SIZE(4, 4), 2, 0, 5,
|
3899
|
-
{3, UPB_SIZE(16, 24), 3, 0, 11,
|
4176
|
+
{1, UPB_SIZE(8, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4177
|
+
{2, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR},
|
4178
|
+
{3, UPB_SIZE(16, 24), 3, 0, 11, _UPB_MODE_SCALAR},
|
3900
4179
|
};
|
3901
4180
|
|
3902
4181
|
const upb_msglayout google_protobuf_EnumValueDescriptorProto_msginit = {
|
3903
4182
|
&google_protobuf_EnumValueDescriptorProto_submsgs[0],
|
3904
4183
|
&google_protobuf_EnumValueDescriptorProto__fields[0],
|
3905
|
-
UPB_SIZE(24, 32), 3, false, 255,
|
4184
|
+
UPB_SIZE(24, 32), 3, false, 3, 255,
|
3906
4185
|
};
|
3907
4186
|
|
3908
4187
|
static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs[2] = {
|
@@ -3911,15 +4190,15 @@ static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs
|
|
3911
4190
|
};
|
3912
4191
|
|
3913
4192
|
static const upb_msglayout_field google_protobuf_ServiceDescriptorProto__fields[3] = {
|
3914
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3915
|
-
{2, UPB_SIZE(16, 32), 0, 0, 11,
|
3916
|
-
{3, UPB_SIZE(12, 24), 2, 1, 11,
|
4193
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4194
|
+
{2, UPB_SIZE(16, 32), 0, 0, 11, _UPB_MODE_ARRAY},
|
4195
|
+
{3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR},
|
3917
4196
|
};
|
3918
4197
|
|
3919
4198
|
const upb_msglayout google_protobuf_ServiceDescriptorProto_msginit = {
|
3920
4199
|
&google_protobuf_ServiceDescriptorProto_submsgs[0],
|
3921
4200
|
&google_protobuf_ServiceDescriptorProto__fields[0],
|
3922
|
-
UPB_SIZE(24, 48), 3, false, 255,
|
4201
|
+
UPB_SIZE(24, 48), 3, false, 3, 255,
|
3923
4202
|
};
|
3924
4203
|
|
3925
4204
|
static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[1] = {
|
@@ -3927,18 +4206,18 @@ static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[
|
|
3927
4206
|
};
|
3928
4207
|
|
3929
4208
|
static const upb_msglayout_field google_protobuf_MethodDescriptorProto__fields[6] = {
|
3930
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
3931
|
-
{2, UPB_SIZE(12, 24), 2, 0, 12,
|
3932
|
-
{3, UPB_SIZE(20, 40), 3, 0, 12,
|
3933
|
-
{4, UPB_SIZE(28, 56), 4, 0, 11,
|
3934
|
-
{5, UPB_SIZE(1, 1), 5, 0, 8,
|
3935
|
-
{6, UPB_SIZE(2, 2), 6, 0, 8,
|
4209
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4210
|
+
{2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR},
|
4211
|
+
{3, UPB_SIZE(20, 40), 3, 0, 12, _UPB_MODE_SCALAR},
|
4212
|
+
{4, UPB_SIZE(28, 56), 4, 0, 11, _UPB_MODE_SCALAR},
|
4213
|
+
{5, UPB_SIZE(1, 1), 5, 0, 8, _UPB_MODE_SCALAR},
|
4214
|
+
{6, UPB_SIZE(2, 2), 6, 0, 8, _UPB_MODE_SCALAR},
|
3936
4215
|
};
|
3937
4216
|
|
3938
4217
|
const upb_msglayout google_protobuf_MethodDescriptorProto_msginit = {
|
3939
4218
|
&google_protobuf_MethodDescriptorProto_submsgs[0],
|
3940
4219
|
&google_protobuf_MethodDescriptorProto__fields[0],
|
3941
|
-
UPB_SIZE(32, 64), 6, false, 255,
|
4220
|
+
UPB_SIZE(32, 64), 6, false, 6, 255,
|
3942
4221
|
};
|
3943
4222
|
|
3944
4223
|
static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = {
|
@@ -3946,33 +4225,33 @@ static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = {
|
|
3946
4225
|
};
|
3947
4226
|
|
3948
4227
|
static const upb_msglayout_field google_protobuf_FileOptions__fields[21] = {
|
3949
|
-
{1, UPB_SIZE(20, 24), 1, 0, 12,
|
3950
|
-
{8, UPB_SIZE(28, 40), 2, 0, 12,
|
3951
|
-
{9, UPB_SIZE(4, 4), 3, 0, 14,
|
3952
|
-
{10, UPB_SIZE(8, 8), 4, 0, 8,
|
3953
|
-
{11, UPB_SIZE(36, 56), 5, 0, 12,
|
3954
|
-
{16, UPB_SIZE(9, 9), 6, 0, 8,
|
3955
|
-
{17, UPB_SIZE(10, 10), 7, 0, 8,
|
3956
|
-
{18, UPB_SIZE(11, 11), 8, 0, 8,
|
3957
|
-
{20, UPB_SIZE(12, 12), 9, 0, 8,
|
3958
|
-
{23, UPB_SIZE(13, 13), 10, 0, 8,
|
3959
|
-
{27, UPB_SIZE(14, 14), 11, 0, 8,
|
3960
|
-
{31, UPB_SIZE(15, 15), 12, 0, 8,
|
3961
|
-
{36, UPB_SIZE(44, 72), 13, 0, 12,
|
3962
|
-
{37, UPB_SIZE(52, 88), 14, 0, 12,
|
3963
|
-
{39, UPB_SIZE(60, 104), 15, 0, 12,
|
3964
|
-
{40, UPB_SIZE(68, 120), 16, 0, 12,
|
3965
|
-
{41, UPB_SIZE(76, 136), 17, 0, 12,
|
3966
|
-
{42, UPB_SIZE(16, 16), 18, 0, 8,
|
3967
|
-
{44, UPB_SIZE(84, 152), 19, 0, 12,
|
3968
|
-
{45, UPB_SIZE(92, 168), 20, 0, 12,
|
3969
|
-
{999, UPB_SIZE(100, 184), 0, 0, 11,
|
4228
|
+
{1, UPB_SIZE(20, 24), 1, 0, 12, _UPB_MODE_SCALAR},
|
4229
|
+
{8, UPB_SIZE(28, 40), 2, 0, 12, _UPB_MODE_SCALAR},
|
4230
|
+
{9, UPB_SIZE(4, 4), 3, 0, 14, _UPB_MODE_SCALAR},
|
4231
|
+
{10, UPB_SIZE(8, 8), 4, 0, 8, _UPB_MODE_SCALAR},
|
4232
|
+
{11, UPB_SIZE(36, 56), 5, 0, 12, _UPB_MODE_SCALAR},
|
4233
|
+
{16, UPB_SIZE(9, 9), 6, 0, 8, _UPB_MODE_SCALAR},
|
4234
|
+
{17, UPB_SIZE(10, 10), 7, 0, 8, _UPB_MODE_SCALAR},
|
4235
|
+
{18, UPB_SIZE(11, 11), 8, 0, 8, _UPB_MODE_SCALAR},
|
4236
|
+
{20, UPB_SIZE(12, 12), 9, 0, 8, _UPB_MODE_SCALAR},
|
4237
|
+
{23, UPB_SIZE(13, 13), 10, 0, 8, _UPB_MODE_SCALAR},
|
4238
|
+
{27, UPB_SIZE(14, 14), 11, 0, 8, _UPB_MODE_SCALAR},
|
4239
|
+
{31, UPB_SIZE(15, 15), 12, 0, 8, _UPB_MODE_SCALAR},
|
4240
|
+
{36, UPB_SIZE(44, 72), 13, 0, 12, _UPB_MODE_SCALAR},
|
4241
|
+
{37, UPB_SIZE(52, 88), 14, 0, 12, _UPB_MODE_SCALAR},
|
4242
|
+
{39, UPB_SIZE(60, 104), 15, 0, 12, _UPB_MODE_SCALAR},
|
4243
|
+
{40, UPB_SIZE(68, 120), 16, 0, 12, _UPB_MODE_SCALAR},
|
4244
|
+
{41, UPB_SIZE(76, 136), 17, 0, 12, _UPB_MODE_SCALAR},
|
4245
|
+
{42, UPB_SIZE(16, 16), 18, 0, 8, _UPB_MODE_SCALAR},
|
4246
|
+
{44, UPB_SIZE(84, 152), 19, 0, 12, _UPB_MODE_SCALAR},
|
4247
|
+
{45, UPB_SIZE(92, 168), 20, 0, 12, _UPB_MODE_SCALAR},
|
4248
|
+
{999, UPB_SIZE(100, 184), 0, 0, 11, _UPB_MODE_ARRAY},
|
3970
4249
|
};
|
3971
4250
|
|
3972
4251
|
const upb_msglayout google_protobuf_FileOptions_msginit = {
|
3973
4252
|
&google_protobuf_FileOptions_submsgs[0],
|
3974
4253
|
&google_protobuf_FileOptions__fields[0],
|
3975
|
-
UPB_SIZE(104, 192), 21, false, 255,
|
4254
|
+
UPB_SIZE(104, 192), 21, false, 1, 255,
|
3976
4255
|
};
|
3977
4256
|
|
3978
4257
|
static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = {
|
@@ -3980,17 +4259,17 @@ static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = {
|
|
3980
4259
|
};
|
3981
4260
|
|
3982
4261
|
static const upb_msglayout_field google_protobuf_MessageOptions__fields[5] = {
|
3983
|
-
{1, UPB_SIZE(1, 1), 1, 0, 8,
|
3984
|
-
{2, UPB_SIZE(2, 2), 2, 0, 8,
|
3985
|
-
{3, UPB_SIZE(3, 3), 3, 0, 8,
|
3986
|
-
{7, UPB_SIZE(4, 4), 4, 0, 8,
|
3987
|
-
{999, UPB_SIZE(8, 8), 0, 0, 11,
|
4262
|
+
{1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR},
|
4263
|
+
{2, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR},
|
4264
|
+
{3, UPB_SIZE(3, 3), 3, 0, 8, _UPB_MODE_SCALAR},
|
4265
|
+
{7, UPB_SIZE(4, 4), 4, 0, 8, _UPB_MODE_SCALAR},
|
4266
|
+
{999, UPB_SIZE(8, 8), 0, 0, 11, _UPB_MODE_ARRAY},
|
3988
4267
|
};
|
3989
4268
|
|
3990
4269
|
const upb_msglayout google_protobuf_MessageOptions_msginit = {
|
3991
4270
|
&google_protobuf_MessageOptions_submsgs[0],
|
3992
4271
|
&google_protobuf_MessageOptions__fields[0],
|
3993
|
-
UPB_SIZE(16, 16), 5, false, 255,
|
4272
|
+
UPB_SIZE(16, 16), 5, false, 3, 255,
|
3994
4273
|
};
|
3995
4274
|
|
3996
4275
|
static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = {
|
@@ -3998,19 +4277,19 @@ static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = {
|
|
3998
4277
|
};
|
3999
4278
|
|
4000
4279
|
static const upb_msglayout_field google_protobuf_FieldOptions__fields[7] = {
|
4001
|
-
{1, UPB_SIZE(4, 4), 1, 0, 14,
|
4002
|
-
{2, UPB_SIZE(12, 12), 2, 0, 8,
|
4003
|
-
{3, UPB_SIZE(13, 13), 3, 0, 8,
|
4004
|
-
{5, UPB_SIZE(14, 14), 4, 0, 8,
|
4005
|
-
{6, UPB_SIZE(8, 8), 5, 0, 14,
|
4006
|
-
{10, UPB_SIZE(15, 15), 6, 0, 8,
|
4007
|
-
{999, UPB_SIZE(16, 16), 0, 0, 11,
|
4280
|
+
{1, UPB_SIZE(4, 4), 1, 0, 14, _UPB_MODE_SCALAR},
|
4281
|
+
{2, UPB_SIZE(12, 12), 2, 0, 8, _UPB_MODE_SCALAR},
|
4282
|
+
{3, UPB_SIZE(13, 13), 3, 0, 8, _UPB_MODE_SCALAR},
|
4283
|
+
{5, UPB_SIZE(14, 14), 4, 0, 8, _UPB_MODE_SCALAR},
|
4284
|
+
{6, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR},
|
4285
|
+
{10, UPB_SIZE(15, 15), 6, 0, 8, _UPB_MODE_SCALAR},
|
4286
|
+
{999, UPB_SIZE(16, 16), 0, 0, 11, _UPB_MODE_ARRAY},
|
4008
4287
|
};
|
4009
4288
|
|
4010
4289
|
const upb_msglayout google_protobuf_FieldOptions_msginit = {
|
4011
4290
|
&google_protobuf_FieldOptions_submsgs[0],
|
4012
4291
|
&google_protobuf_FieldOptions__fields[0],
|
4013
|
-
UPB_SIZE(24, 24), 7, false, 255,
|
4292
|
+
UPB_SIZE(24, 24), 7, false, 3, 255,
|
4014
4293
|
};
|
4015
4294
|
|
4016
4295
|
static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = {
|
@@ -4018,13 +4297,13 @@ static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = {
|
|
4018
4297
|
};
|
4019
4298
|
|
4020
4299
|
static const upb_msglayout_field google_protobuf_OneofOptions__fields[1] = {
|
4021
|
-
{999, UPB_SIZE(0, 0), 0, 0, 11,
|
4300
|
+
{999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY},
|
4022
4301
|
};
|
4023
4302
|
|
4024
4303
|
const upb_msglayout google_protobuf_OneofOptions_msginit = {
|
4025
4304
|
&google_protobuf_OneofOptions_submsgs[0],
|
4026
4305
|
&google_protobuf_OneofOptions__fields[0],
|
4027
|
-
UPB_SIZE(8, 8), 1, false, 255,
|
4306
|
+
UPB_SIZE(8, 8), 1, false, 0, 255,
|
4028
4307
|
};
|
4029
4308
|
|
4030
4309
|
static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = {
|
@@ -4032,15 +4311,15 @@ static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = {
|
|
4032
4311
|
};
|
4033
4312
|
|
4034
4313
|
static const upb_msglayout_field google_protobuf_EnumOptions__fields[3] = {
|
4035
|
-
{2, UPB_SIZE(1, 1), 1, 0, 8,
|
4036
|
-
{3, UPB_SIZE(2, 2), 2, 0, 8,
|
4037
|
-
{999, UPB_SIZE(4, 8), 0, 0, 11,
|
4314
|
+
{2, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR},
|
4315
|
+
{3, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR},
|
4316
|
+
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY},
|
4038
4317
|
};
|
4039
4318
|
|
4040
4319
|
const upb_msglayout google_protobuf_EnumOptions_msginit = {
|
4041
4320
|
&google_protobuf_EnumOptions_submsgs[0],
|
4042
4321
|
&google_protobuf_EnumOptions__fields[0],
|
4043
|
-
UPB_SIZE(8, 16), 3, false, 255,
|
4322
|
+
UPB_SIZE(8, 16), 3, false, 0, 255,
|
4044
4323
|
};
|
4045
4324
|
|
4046
4325
|
static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = {
|
@@ -4048,14 +4327,14 @@ static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] =
|
|
4048
4327
|
};
|
4049
4328
|
|
4050
4329
|
static const upb_msglayout_field google_protobuf_EnumValueOptions__fields[2] = {
|
4051
|
-
{1, UPB_SIZE(1, 1), 1, 0, 8,
|
4052
|
-
{999, UPB_SIZE(4, 8), 0, 0, 11,
|
4330
|
+
{1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR},
|
4331
|
+
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY},
|
4053
4332
|
};
|
4054
4333
|
|
4055
4334
|
const upb_msglayout google_protobuf_EnumValueOptions_msginit = {
|
4056
4335
|
&google_protobuf_EnumValueOptions_submsgs[0],
|
4057
4336
|
&google_protobuf_EnumValueOptions__fields[0],
|
4058
|
-
UPB_SIZE(8, 16), 2, false, 255,
|
4337
|
+
UPB_SIZE(8, 16), 2, false, 1, 255,
|
4059
4338
|
};
|
4060
4339
|
|
4061
4340
|
static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = {
|
@@ -4063,14 +4342,14 @@ static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = {
|
|
4063
4342
|
};
|
4064
4343
|
|
4065
4344
|
static const upb_msglayout_field google_protobuf_ServiceOptions__fields[2] = {
|
4066
|
-
{33, UPB_SIZE(1, 1), 1, 0, 8,
|
4067
|
-
{999, UPB_SIZE(4, 8), 0, 0, 11,
|
4345
|
+
{33, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR},
|
4346
|
+
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY},
|
4068
4347
|
};
|
4069
4348
|
|
4070
4349
|
const upb_msglayout google_protobuf_ServiceOptions_msginit = {
|
4071
4350
|
&google_protobuf_ServiceOptions_submsgs[0],
|
4072
4351
|
&google_protobuf_ServiceOptions__fields[0],
|
4073
|
-
UPB_SIZE(8, 16), 2, false, 255,
|
4352
|
+
UPB_SIZE(8, 16), 2, false, 0, 255,
|
4074
4353
|
};
|
4075
4354
|
|
4076
4355
|
static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = {
|
@@ -4078,15 +4357,15 @@ static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = {
|
|
4078
4357
|
};
|
4079
4358
|
|
4080
4359
|
static const upb_msglayout_field google_protobuf_MethodOptions__fields[3] = {
|
4081
|
-
{33, UPB_SIZE(8, 8), 1, 0, 8,
|
4082
|
-
{34, UPB_SIZE(4, 4), 2, 0, 14,
|
4083
|
-
{999, UPB_SIZE(12, 16), 0, 0, 11,
|
4360
|
+
{33, UPB_SIZE(8, 8), 1, 0, 8, _UPB_MODE_SCALAR},
|
4361
|
+
{34, UPB_SIZE(4, 4), 2, 0, 14, _UPB_MODE_SCALAR},
|
4362
|
+
{999, UPB_SIZE(12, 16), 0, 0, 11, _UPB_MODE_ARRAY},
|
4084
4363
|
};
|
4085
4364
|
|
4086
4365
|
const upb_msglayout google_protobuf_MethodOptions_msginit = {
|
4087
4366
|
&google_protobuf_MethodOptions_submsgs[0],
|
4088
4367
|
&google_protobuf_MethodOptions__fields[0],
|
4089
|
-
UPB_SIZE(16, 24), 3, false, 255,
|
4368
|
+
UPB_SIZE(16, 24), 3, false, 0, 255,
|
4090
4369
|
};
|
4091
4370
|
|
4092
4371
|
static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] = {
|
@@ -4094,30 +4373,30 @@ static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1]
|
|
4094
4373
|
};
|
4095
4374
|
|
4096
4375
|
static const upb_msglayout_field google_protobuf_UninterpretedOption__fields[7] = {
|
4097
|
-
{2, UPB_SIZE(56, 80), 0, 0, 11,
|
4098
|
-
{3, UPB_SIZE(32, 32), 1, 0, 12,
|
4099
|
-
{4, UPB_SIZE(8, 8), 2, 0, 4,
|
4100
|
-
{5, UPB_SIZE(16, 16), 3, 0, 3,
|
4101
|
-
{6, UPB_SIZE(24, 24), 4, 0, 1,
|
4102
|
-
{7, UPB_SIZE(40, 48), 5, 0, 12,
|
4103
|
-
{8, UPB_SIZE(48, 64), 6, 0, 12,
|
4376
|
+
{2, UPB_SIZE(56, 80), 0, 0, 11, _UPB_MODE_ARRAY},
|
4377
|
+
{3, UPB_SIZE(32, 32), 1, 0, 12, _UPB_MODE_SCALAR},
|
4378
|
+
{4, UPB_SIZE(8, 8), 2, 0, 4, _UPB_MODE_SCALAR},
|
4379
|
+
{5, UPB_SIZE(16, 16), 3, 0, 3, _UPB_MODE_SCALAR},
|
4380
|
+
{6, UPB_SIZE(24, 24), 4, 0, 1, _UPB_MODE_SCALAR},
|
4381
|
+
{7, UPB_SIZE(40, 48), 5, 0, 12, _UPB_MODE_SCALAR},
|
4382
|
+
{8, UPB_SIZE(48, 64), 6, 0, 12, _UPB_MODE_SCALAR},
|
4104
4383
|
};
|
4105
4384
|
|
4106
4385
|
const upb_msglayout google_protobuf_UninterpretedOption_msginit = {
|
4107
4386
|
&google_protobuf_UninterpretedOption_submsgs[0],
|
4108
4387
|
&google_protobuf_UninterpretedOption__fields[0],
|
4109
|
-
UPB_SIZE(64, 96), 7, false, 255,
|
4388
|
+
UPB_SIZE(64, 96), 7, false, 0, 255,
|
4110
4389
|
};
|
4111
4390
|
|
4112
4391
|
static const upb_msglayout_field google_protobuf_UninterpretedOption_NamePart__fields[2] = {
|
4113
|
-
{1, UPB_SIZE(4, 8), 1, 0, 12,
|
4114
|
-
{2, UPB_SIZE(1, 1), 2, 0, 8,
|
4392
|
+
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4393
|
+
{2, UPB_SIZE(1, 1), 2, 0, 8, _UPB_MODE_SCALAR},
|
4115
4394
|
};
|
4116
4395
|
|
4117
4396
|
const upb_msglayout google_protobuf_UninterpretedOption_NamePart_msginit = {
|
4118
4397
|
NULL,
|
4119
4398
|
&google_protobuf_UninterpretedOption_NamePart__fields[0],
|
4120
|
-
UPB_SIZE(16, 32), 2, false, 255,
|
4399
|
+
UPB_SIZE(16, 32), 2, false, 2, 255,
|
4121
4400
|
};
|
4122
4401
|
|
4123
4402
|
static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = {
|
@@ -4125,27 +4404,27 @@ static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = {
|
|
4125
4404
|
};
|
4126
4405
|
|
4127
4406
|
static const upb_msglayout_field google_protobuf_SourceCodeInfo__fields[1] = {
|
4128
|
-
{1, UPB_SIZE(0, 0), 0, 0, 11,
|
4407
|
+
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY},
|
4129
4408
|
};
|
4130
4409
|
|
4131
4410
|
const upb_msglayout google_protobuf_SourceCodeInfo_msginit = {
|
4132
4411
|
&google_protobuf_SourceCodeInfo_submsgs[0],
|
4133
4412
|
&google_protobuf_SourceCodeInfo__fields[0],
|
4134
|
-
UPB_SIZE(8, 8), 1, false, 255,
|
4413
|
+
UPB_SIZE(8, 8), 1, false, 1, 255,
|
4135
4414
|
};
|
4136
4415
|
|
4137
4416
|
static const upb_msglayout_field google_protobuf_SourceCodeInfo_Location__fields[5] = {
|
4138
|
-
{1, UPB_SIZE(20, 40), 0, 0, 5,
|
4139
|
-
{2, UPB_SIZE(24, 48), 0, 0, 5,
|
4140
|
-
{3, UPB_SIZE(4, 8), 1, 0, 12,
|
4141
|
-
{4, UPB_SIZE(12, 24), 2, 0, 12,
|
4142
|
-
{6, UPB_SIZE(28, 56), 0, 0, 12,
|
4417
|
+
{1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED},
|
4418
|
+
{2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED},
|
4419
|
+
{3, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR},
|
4420
|
+
{4, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR},
|
4421
|
+
{6, UPB_SIZE(28, 56), 0, 0, 12, _UPB_MODE_ARRAY},
|
4143
4422
|
};
|
4144
4423
|
|
4145
4424
|
const upb_msglayout google_protobuf_SourceCodeInfo_Location_msginit = {
|
4146
4425
|
NULL,
|
4147
4426
|
&google_protobuf_SourceCodeInfo_Location__fields[0],
|
4148
|
-
UPB_SIZE(32, 64), 5, false, 255,
|
4427
|
+
UPB_SIZE(32, 64), 5, false, 4, 255,
|
4149
4428
|
};
|
4150
4429
|
|
4151
4430
|
static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = {
|
@@ -4153,26 +4432,26 @@ static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] =
|
|
4153
4432
|
};
|
4154
4433
|
|
4155
4434
|
static const upb_msglayout_field google_protobuf_GeneratedCodeInfo__fields[1] = {
|
4156
|
-
{1, UPB_SIZE(0, 0), 0, 0, 11,
|
4435
|
+
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY},
|
4157
4436
|
};
|
4158
4437
|
|
4159
4438
|
const upb_msglayout google_protobuf_GeneratedCodeInfo_msginit = {
|
4160
4439
|
&google_protobuf_GeneratedCodeInfo_submsgs[0],
|
4161
4440
|
&google_protobuf_GeneratedCodeInfo__fields[0],
|
4162
|
-
UPB_SIZE(8, 8), 1, false, 255,
|
4441
|
+
UPB_SIZE(8, 8), 1, false, 1, 255,
|
4163
4442
|
};
|
4164
4443
|
|
4165
4444
|
static const upb_msglayout_field google_protobuf_GeneratedCodeInfo_Annotation__fields[4] = {
|
4166
|
-
{1, UPB_SIZE(20, 32), 0, 0, 5,
|
4167
|
-
{2, UPB_SIZE(12, 16), 1, 0, 12,
|
4168
|
-
{3, UPB_SIZE(4, 4), 2, 0, 5,
|
4169
|
-
{4, UPB_SIZE(8, 8), 3, 0, 5,
|
4445
|
+
{1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED},
|
4446
|
+
{2, UPB_SIZE(12, 16), 1, 0, 12, _UPB_MODE_SCALAR},
|
4447
|
+
{3, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR},
|
4448
|
+
{4, UPB_SIZE(8, 8), 3, 0, 5, _UPB_MODE_SCALAR},
|
4170
4449
|
};
|
4171
4450
|
|
4172
4451
|
const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit = {
|
4173
4452
|
NULL,
|
4174
4453
|
&google_protobuf_GeneratedCodeInfo_Annotation__fields[0],
|
4175
|
-
UPB_SIZE(24, 48), 4, false, 255,
|
4454
|
+
UPB_SIZE(24, 48), 4, false, 4, 255,
|
4176
4455
|
};
|
4177
4456
|
|
4178
4457
|
|
@@ -5167,13 +5446,44 @@ static int field_number_cmp(const void *p1, const void *p2) {
|
|
5167
5446
|
return f1->number - f2->number;
|
5168
5447
|
}
|
5169
5448
|
|
5170
|
-
static void assign_layout_indices(const upb_msgdef *m,
|
5449
|
+
static void assign_layout_indices(const upb_msgdef *m, upb_msglayout *l,
|
5450
|
+
upb_msglayout_field *fields) {
|
5171
5451
|
int i;
|
5172
5452
|
int n = upb_msgdef_numfields(m);
|
5453
|
+
int dense_below = 0;
|
5173
5454
|
for (i = 0; i < n; i++) {
|
5174
5455
|
upb_fielddef *f = (upb_fielddef*)upb_msgdef_itof(m, fields[i].number);
|
5175
5456
|
UPB_ASSERT(f);
|
5176
5457
|
f->layout_index = i;
|
5458
|
+
if (i < UINT8_MAX && fields[i].number == i + 1 &&
|
5459
|
+
(i == 0 || fields[i-1].number == i)) {
|
5460
|
+
dense_below = i + 1;
|
5461
|
+
}
|
5462
|
+
}
|
5463
|
+
l->dense_below = dense_below;
|
5464
|
+
}
|
5465
|
+
|
5466
|
+
static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f) {
|
5467
|
+
field->number = upb_fielddef_number(f);
|
5468
|
+
field->descriptortype = upb_fielddef_descriptortype(f);
|
5469
|
+
|
5470
|
+
if (field->descriptortype == UPB_DTYPE_STRING &&
|
5471
|
+
f->file->syntax == UPB_SYNTAX_PROTO2) {
|
5472
|
+
/* See TableDescriptorType() in upbc/generator.cc for details and
|
5473
|
+
* rationale. */
|
5474
|
+
field->descriptortype = UPB_DTYPE_BYTES;
|
5475
|
+
}
|
5476
|
+
|
5477
|
+
if (upb_fielddef_ismap(f)) {
|
5478
|
+
field->mode = _UPB_MODE_MAP;
|
5479
|
+
} else if (upb_fielddef_isseq(f)) {
|
5480
|
+
field->mode = _UPB_MODE_ARRAY;
|
5481
|
+
} else {
|
5482
|
+
field->mode = _UPB_MODE_SCALAR;
|
5483
|
+
}
|
5484
|
+
|
5485
|
+
if (upb_fielddef_packed(f)) {
|
5486
|
+
field->mode |= _UPB_MODE_IS_PACKED;
|
5177
5487
|
}
|
5178
5488
|
}
|
5179
5489
|
|
@@ -5218,8 +5528,8 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
5218
5528
|
const upb_fielddef *val = upb_msgdef_itof(m, 2);
|
5219
5529
|
fields[0].number = 1;
|
5220
5530
|
fields[1].number = 2;
|
5221
|
-
fields[0].
|
5222
|
-
fields[1].
|
5531
|
+
fields[0].mode = _UPB_MODE_SCALAR;
|
5532
|
+
fields[1].mode = _UPB_MODE_SCALAR;
|
5223
5533
|
fields[0].presence = 0;
|
5224
5534
|
fields[1].presence = 0;
|
5225
5535
|
fields[0].descriptortype = upb_fielddef_descriptortype(key);
|
@@ -5255,22 +5565,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
5255
5565
|
upb_fielddef* f = upb_msg_iter_field(&it);
|
5256
5566
|
upb_msglayout_field *field = &fields[upb_fielddef_index(f)];
|
5257
5567
|
|
5258
|
-
field
|
5259
|
-
field->descriptortype = upb_fielddef_descriptortype(f);
|
5260
|
-
field->label = upb_fielddef_label(f);
|
5261
|
-
|
5262
|
-
if (field->descriptortype == UPB_DTYPE_STRING &&
|
5263
|
-
f->file->syntax == UPB_SYNTAX_PROTO2) {
|
5264
|
-
/* See TableDescriptorType() in upbc/generator.cc for details and
|
5265
|
-
* rationale. */
|
5266
|
-
field->descriptortype = UPB_DTYPE_BYTES;
|
5267
|
-
}
|
5268
|
-
|
5269
|
-
if (upb_fielddef_ismap(f)) {
|
5270
|
-
field->label = _UPB_LABEL_MAP;
|
5271
|
-
} else if (upb_fielddef_packed(f)) {
|
5272
|
-
field->label = _UPB_LABEL_PACKED;
|
5273
|
-
}
|
5568
|
+
fill_fieldlayout(field, f);
|
5274
5569
|
|
5275
5570
|
if (upb_fielddef_issubmsg(f)) {
|
5276
5571
|
const upb_msgdef *subm = upb_fielddef_msgsubdef(f);
|
@@ -5346,7 +5641,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
5346
5641
|
|
5347
5642
|
/* Sort fields by number. */
|
5348
5643
|
qsort(fields, upb_msgdef_numfields(m), sizeof(*fields), field_number_cmp);
|
5349
|
-
assign_layout_indices(m, fields);
|
5644
|
+
assign_layout_indices(m, l, fields);
|
5350
5645
|
}
|
5351
5646
|
|
5352
5647
|
static char *strviewdup(symtab_addctx *ctx, upb_strview view) {
|
@@ -6056,13 +6351,18 @@ static void build_filedef(
|
|
6056
6351
|
const upb_strview* strs;
|
6057
6352
|
size_t i, n;
|
6058
6353
|
|
6059
|
-
|
6354
|
+
file->symtab = ctx->symtab;
|
6060
6355
|
|
6356
|
+
/* One pass to count and allocate. */
|
6357
|
+
file->msg_count = 0;
|
6358
|
+
file->enum_count = 0;
|
6359
|
+
file->ext_count = 0;
|
6360
|
+
count_types_in_file(file_proto, file);
|
6061
6361
|
file->msgs = symtab_alloc(ctx, sizeof(*file->msgs) * file->msg_count);
|
6062
6362
|
file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count);
|
6063
6363
|
file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count);
|
6064
6364
|
|
6065
|
-
/*
|
6365
|
+
/* In the second pass we increment these as defs are added. */
|
6066
6366
|
file->msg_count = 0;
|
6067
6367
|
file->enum_count = 0;
|
6068
6368
|
file->ext_count = 0;
|
@@ -6191,41 +6491,43 @@ static void remove_filedef(upb_symtab *s, upb_filedef *file) {
|
|
6191
6491
|
static const upb_filedef *_upb_symtab_addfile(
|
6192
6492
|
upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto,
|
6193
6493
|
const upb_msglayout **layouts, upb_status *status) {
|
6194
|
-
upb_arena *file_arena = upb_arena_new();
|
6195
|
-
upb_filedef *file;
|
6196
6494
|
symtab_addctx ctx;
|
6495
|
+
upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto);
|
6197
6496
|
|
6198
|
-
if (
|
6199
|
-
|
6200
|
-
|
6201
|
-
|
6497
|
+
if (upb_strtable_lookup2(&s->files, name.data, name.size, NULL)) {
|
6498
|
+
upb_status_seterrf(status, "duplicate file name (%.*s)",
|
6499
|
+
UPB_STRVIEW_ARGS(name));
|
6500
|
+
return NULL;
|
6501
|
+
}
|
6202
6502
|
|
6203
|
-
ctx.file = file;
|
6204
6503
|
ctx.symtab = s;
|
6205
|
-
ctx.arena = file_arena;
|
6206
6504
|
ctx.layouts = layouts;
|
6207
6505
|
ctx.status = status;
|
6506
|
+
ctx.file = NULL;
|
6507
|
+
ctx.arena = upb_arena_new();
|
6208
6508
|
|
6209
|
-
|
6210
|
-
|
6211
|
-
|
6212
|
-
|
6509
|
+
if (!ctx.arena) {
|
6510
|
+
upb_status_setoom(status);
|
6511
|
+
return NULL;
|
6512
|
+
}
|
6213
6513
|
|
6214
6514
|
if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
|
6215
6515
|
UPB_ASSERT(!upb_ok(status));
|
6216
|
-
|
6217
|
-
|
6516
|
+
if (ctx.file) {
|
6517
|
+
remove_filedef(s, ctx.file);
|
6518
|
+
ctx.file = NULL;
|
6519
|
+
}
|
6218
6520
|
} else {
|
6219
|
-
|
6220
|
-
|
6221
|
-
|
6521
|
+
ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file));
|
6522
|
+
build_filedef(&ctx, ctx.file, file_proto);
|
6523
|
+
upb_strtable_insert(&s->files, name.data, name.size,
|
6524
|
+
upb_value_constptr(ctx.file), ctx.arena);
|
6222
6525
|
UPB_ASSERT(upb_ok(status));
|
6223
|
-
upb_arena_fuse(s->arena,
|
6526
|
+
upb_arena_fuse(s->arena, ctx.arena);
|
6224
6527
|
}
|
6225
6528
|
|
6226
|
-
|
6227
|
-
|
6228
|
-
return file;
|
6529
|
+
upb_arena_free(ctx.arena);
|
6530
|
+
return ctx.file;
|
6229
6531
|
}
|
6230
6532
|
|
6231
6533
|
const upb_filedef *upb_symtab_addfile(
|
@@ -6258,7 +6560,8 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
|
|
6258
6560
|
}
|
6259
6561
|
|
6260
6562
|
file = google_protobuf_FileDescriptorProto_parse_ex(
|
6261
|
-
init->descriptor.data, init->descriptor.size,
|
6563
|
+
init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS,
|
6564
|
+
arena);
|
6262
6565
|
s->bytes_loaded += init->descriptor.size;
|
6263
6566
|
|
6264
6567
|
if (!file) {
|
@@ -8388,7 +8691,17 @@ static void jsonenc_double(jsonenc *e, const char *fmt, double val) {
|
|
8388
8691
|
} else if (val != val) {
|
8389
8692
|
jsonenc_putstr(e, "\"NaN\"");
|
8390
8693
|
} else {
|
8694
|
+
char *p = e->ptr;
|
8391
8695
|
jsonenc_printf(e, fmt, val);
|
8696
|
+
|
8697
|
+
/* printf() is dependent on locales; sadly there is no easy and portable way
|
8698
|
+
* to avoid this. This little post-processing step will translate 1,2 -> 1.2
|
8699
|
+
* since JSON needs the latter. Arguably a hack, but it is simple and the
|
8700
|
+
* alternatives are far more complicated, platform-dependent, and/or larger
|
8701
|
+
* in code size. */
|
8702
|
+
for (char *end = e->ptr; p < end; p++) {
|
8703
|
+
if (*p == ',') *p = '.';
|
8704
|
+
}
|
8392
8705
|
}
|
8393
8706
|
}
|
8394
8707
|
|