summaryrefslogtreecommitdiff
path: root/upb/descriptor/reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'upb/descriptor/reader.c')
-rw-r--r--upb/descriptor/reader.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/upb/descriptor/reader.c b/upb/descriptor/reader.c
index fdfa4e3..1baad81 100644
--- a/upb/descriptor/reader.c
+++ b/upb/descriptor/reader.c
@@ -272,6 +272,9 @@ static bool field_startmsg(void *closure, const void *hd) {
r->f = upb_fielddef_new(&r->defs);
free(r->default_string);
r->default_string = NULL;
+
+ // fielddefs default to packed, but descriptors default to non-packed.
+ upb_fielddef_setpacked(r->f, false);
return true;
}
@@ -378,6 +381,13 @@ static bool field_onlazy(void *closure, const void *hd, bool val) {
return true;
}
+static bool field_onpacked(void *closure, const void *hd, bool val) {
+ UPB_UNUSED(hd);
+ upb_descreader *r = closure;
+ upb_fielddef_setpacked(r->f, val);
+ return true;
+}
+
static bool field_ontype(void *closure, const void *hd, int32_t val) {
UPB_UNUSED(hd);
upb_descreader *r = closure;
@@ -552,6 +562,7 @@ static void reghandlers(const void *closure, upb_handlers *h) {
&field_ondefaultval, NULL);
} else if (m == D(FieldOptions)) {
upb_handlers_setbool(h, D(FieldOptions_lazy), &field_onlazy, NULL);
+ upb_handlers_setbool(h, D(FieldOptions_packed), &field_onpacked, NULL);
}
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback