|
|
|
@ -1167,6 +1167,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc, |
|
|
|
|
upb_msg_field_next(&i)) { |
|
|
|
|
upb_fielddef* f = upb_msg_iter_field(&i); |
|
|
|
|
uint32_t offset = desc->layout->fields[upb_fielddef_index(f)].offset; |
|
|
|
|
bool containing_oneof = false; |
|
|
|
|
|
|
|
|
|
if (upb_fielddef_containingoneof(f)) { |
|
|
|
|
uint32_t oneof_case_offset = |
|
|
|
@ -1179,6 +1180,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc, |
|
|
|
|
} |
|
|
|
|
// Otherwise, fall through to the appropriate singular-field handler
|
|
|
|
|
// below.
|
|
|
|
|
containing_oneof = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (is_map_field(f)) { |
|
|
|
@ -1209,7 +1211,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc, |
|
|
|
|
#define T(upbtypeconst, upbtype, ctype, default_value) \ |
|
|
|
|
case upbtypeconst: { \
|
|
|
|
|
ctype value = DEREF(message_data(msg), offset, ctype); \
|
|
|
|
|
if (value != default_value) { \
|
|
|
|
|
if (containing_oneof || value != default_value) { \
|
|
|
|
|
upb_sink_put##upbtype(sink, sel, value); \
|
|
|
|
|
} \
|
|
|
|
|
} break; |
|
|
|
|