From cafebf6beede670a10535809667ac9b9f3033091 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Tue, 6 Mar 2018 23:59:58 +0000 Subject: [PATCH] For encoding upb needs descriptor type instead of type. --- upb/decode.c | 16 ++++++++-------- upb/def.h | 3 +++ upb/encode.c | 6 +++--- upb/msg.c | 4 ++-- upb/msg.h | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/upb/decode.c b/upb/decode.c index 3e782d76d7..a4da9a986b 100644 --- a/upb/decode.c +++ b/upb/decode.c @@ -4,7 +4,7 @@ #include "upb/structs.int.h" /* Maps descriptor type -> upb field type. */ -static const uint8_t upb_desctype_to_fieldtype[] = { +const uint8_t upb_desctype_to_fieldtype[] = { UPB_WIRE_TYPE_END_GROUP, /* ENDGROUP */ UPB_TYPE_DOUBLE, /* DOUBLE */ UPB_TYPE_FLOAT, /* FLOAT */ @@ -216,7 +216,7 @@ static upb_array *upb_getorcreatearr(upb_decstate *d, if (!arr) { return NULL; } - upb_array_init(arr, upb_desctype_to_fieldtype[field->type], + upb_array_init(arr, upb_desctype_to_fieldtype[field->descriptortype], upb_arena_alloc(upb_env_arena(d->env))); *(upb_array**)&frame->msg[field->offset] = arr; } @@ -299,7 +299,7 @@ static bool upb_decode_varintfield(upb_decstate *d, upb_decframe *frame, CHK(field_mem); CHK(upb_decode_varint(&d->ptr, frame->limit, &val)); - switch ((upb_descriptortype_t)field->type) { + switch ((upb_descriptortype_t)field->descriptortype) { case UPB_DESCRIPTOR_TYPE_INT64: case UPB_DESCRIPTOR_TYPE_UINT64: memcpy(field_mem, &val, sizeof(val)); @@ -344,7 +344,7 @@ static bool upb_decode_64bitfield(upb_decstate *d, upb_decframe *frame, CHK(field_mem); CHK(upb_decode_64bit(&d->ptr, frame->limit, &val)); - switch ((upb_descriptortype_t)field->type) { + switch ((upb_descriptortype_t)field->descriptortype) { case UPB_DESCRIPTOR_TYPE_DOUBLE: case UPB_DESCRIPTOR_TYPE_FIXED64: case UPB_DESCRIPTOR_TYPE_SFIXED64: @@ -368,7 +368,7 @@ static bool upb_decode_32bitfield(upb_decstate *d, upb_decframe *frame, CHK(field_mem); CHK(upb_decode_32bit(&d->ptr, frame->limit, &val)); - switch ((upb_descriptortype_t)field->type) { + switch ((upb_descriptortype_t)field->descriptortype) { case UPB_DESCRIPTOR_TYPE_FLOAT: case UPB_DESCRIPTOR_TYPE_FIXED32: case UPB_DESCRIPTOR_TYPE_SFIXED32: @@ -416,7 +416,7 @@ static bool upb_decode_toarray(upb_decstate *d, upb_decframe *frame, return true; \ } - switch ((upb_descriptortype_t)field->type) { + switch ((upb_descriptortype_t)field->descriptortype) { case UPB_DESCRIPTOR_TYPE_STRING: case UPB_DESCRIPTOR_TYPE_BYTES: { void *field_mem = upb_array_add(arr, 1); @@ -466,7 +466,7 @@ static bool upb_decode_delimitedfield(upb_decstate *d, upb_decframe *frame, if (field->label == UPB_LABEL_REPEATED) { return upb_decode_toarray(d, frame, field_start, field, val); } else { - switch ((upb_descriptortype_t)field->type) { + switch ((upb_descriptortype_t)field->descriptortype) { case UPB_DESCRIPTOR_TYPE_STRING: case UPB_DESCRIPTOR_TYPE_BYTES: { void *field_mem = upb_decode_prepareslot(d, frame, field); @@ -520,7 +520,7 @@ static bool upb_decode_field(upb_decstate *d, upb_decframe *frame) { case UPB_WIRE_TYPE_DELIMITED: return upb_decode_delimitedfield(d, frame, field_start, field); case UPB_WIRE_TYPE_START_GROUP: - CHK(field->type == UPB_DESCRIPTOR_TYPE_GROUP); + CHK(field->descriptortype == UPB_DESCRIPTOR_TYPE_GROUP); return upb_decode_submsg(d, frame, frame->limit, field, field_number); case UPB_WIRE_TYPE_END_GROUP: CHK(frame->group_number == field_number) diff --git a/upb/def.h b/upb/def.h index 81c553bf01..10fa510c30 100644 --- a/upb/def.h +++ b/upb/def.h @@ -279,6 +279,9 @@ typedef enum { UPB_SYNTAX_PROTO3 = 3 } upb_syntax_t; +/* Maps descriptor type -> upb field type. */ +extern const uint8_t upb_desctype_to_fieldtype[]; + /* Maximum field number allowed for FieldDefs. This is an inherent limit of the * protobuf wire format. */ #define UPB_MAX_FIELDNUMBER ((1 << 29) - 1) diff --git a/upb/encode.c b/upb/encode.c index 5acb492afa..a582a2f7a4 100644 --- a/upb/encode.c +++ b/upb/encode.c @@ -162,7 +162,7 @@ static bool upb_encode_array(upb_encstate *e, const char *field_mem, return true; } - UPB_ASSERT(arr->type == upb_desctype_to_fieldtype2[f->type]); + UPB_ASSERT(arr->type == upb_desctype_to_fieldtype2[f->descriptortype]); #define VARINT_CASE(ctype, encode) { \ ctype *start = arr->data; \ @@ -177,7 +177,7 @@ static bool upb_encode_array(upb_encstate *e, const char *field_mem, break; \ do { ; } while(0) - switch (f->type) { + switch (f->descriptortype) { case UPB_DESCRIPTOR_TYPE_DOUBLE: CHK(upb_put_fixedarray(e, arr, sizeof(double))); break; @@ -267,7 +267,7 @@ static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem, upb_put_tag(e, f->number, wire_type); \ } while(0) - switch (f->type) { + switch (f->descriptortype) { case UPB_DESCRIPTOR_TYPE_DOUBLE: CASE(double, double, UPB_WIRE_TYPE_64BIT, val); case UPB_DESCRIPTOR_TYPE_FLOAT: diff --git a/upb/msg.c b/upb/msg.c index b3b0420941..a146e0cccd 100644 --- a/upb/msg.c +++ b/upb/msg.c @@ -77,7 +77,7 @@ static uint8_t upb_msg_fieldsize(const upb_msglayout_fieldinit_v1 *field) { if (field->label == UPB_LABEL_REPEATED) { return sizeof(void*); } else { - return upb_msgval_sizeof(field->type); + return upb_msgval_sizeof(upb_desctype_to_fieldtype[field->descriptortype]); } } @@ -284,7 +284,7 @@ static upb_msglayout *upb_msglayout_new(const upb_msgdef *m) { upb_msglayout_fieldinit_v1 *field = &fields[upb_fielddef_index(f)]; field->number = upb_fielddef_number(f); - field->type = upb_fielddef_type(f); + field->descriptortype = upb_fielddef_descriptortype(f); field->label = upb_fielddef_label(f); if (upb_fielddef_containingoneof(f)) { diff --git a/upb/msg.h b/upb/msg.h index 3579a3f43f..e875f6e2d1 100644 --- a/upb/msg.h +++ b/upb/msg.h @@ -396,7 +396,7 @@ typedef struct { uint16_t hasbit; /* UPB_NO_HASBIT if no hasbit. */ uint16_t oneof_index; /* UPB_NOT_IN_ONEOF if not in a oneof. */ uint16_t submsg_index; /* UPB_NO_SUBMSG if no submsg. */ - uint8_t type; + uint8_t descriptortype; uint8_t label; } upb_msglayout_fieldinit_v1;