summaryrefslogtreecommitdiff
path: root/upb/descriptor/reader.c
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2014-06-26 20:24:32 -0700
committerJosh Haberman <jhaberman@gmail.com>2014-06-26 20:24:32 -0700
commit2d10fa33071d52d7a35ce3b13bc459cd16a0aa33 (patch)
treebf47d38e2e1cc8ddb4711b23b26e7fd10742e07d /upb/descriptor/reader.c
parent7d565f1e7a0f107506d3cf31ef2e33e22a504d2b (diff)
Sync from internal Google development.
Diffstat (limited to 'upb/descriptor/reader.c')
-rw-r--r--upb/descriptor/reader.c80
1 files changed, 44 insertions, 36 deletions
diff --git a/upb/descriptor/reader.c b/upb/descriptor/reader.c
index 9baca1d..c9425a3 100644
--- a/upb/descriptor/reader.c
+++ b/upb/descriptor/reader.c
@@ -223,11 +223,6 @@ static bool enumval_endmsg(void *closure, const void *hd, upb_status *status) {
return false;
}
upb_enumdef *e = upb_downcast_enumdef_mutable(upb_descreader_last(r));
- if (upb_enumdef_numvals(e) == 0) {
- // The default value of an enum (in the absence of an explicit default) is
- // its first listed value.
- upb_enumdef_setdefault(e, r->number);
- }
upb_enumdef_addval(e, r->name, r->number, status);
free(r->name);
r->name = NULL;
@@ -507,52 +502,65 @@ static bool pushextension(void *closure, const void *hd) {
return true;
}
-static const upb_fielddef *f(const upb_handlers *h, const char *name) {
- const upb_fielddef *ret = upb_msgdef_ntof(upb_handlers_msgdef(h), name);
- assert(ret);
- return ret;
-}
+#define D(name) upbdefs_google_protobuf_ ## name(s)
-static void reghandlers(void *closure, upb_handlers *h) {
- UPB_UNUSED(closure);
+static void reghandlers(const void *closure, upb_handlers *h) {
+ const upb_symtab *s = closure;
const upb_msgdef *m = upb_handlers_msgdef(h);
- if (m == GOOGLE_PROTOBUF_DESCRIPTORPROTO) {
+ if (m == D(DescriptorProto)) {
upb_handlers_setstartmsg(h, &msg_startmsg, NULL);
upb_handlers_setendmsg(h, &msg_endmsg, NULL);
- upb_handlers_setstring(h, f(h, "name"), &msg_onname, NULL);
- upb_handlers_setendsubmsg(h, f(h, "field"), &msg_onendfield, NULL);
- upb_handlers_setendsubmsg(h, f(h, "extension"), &pushextension, NULL);
- } else if (m == GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO) {
+ upb_handlers_setstring(h, D(DescriptorProto_name), &msg_onname, NULL);
+ upb_handlers_setendsubmsg(h, D(DescriptorProto_field), &msg_onendfield,
+ NULL);
+ upb_handlers_setendsubmsg(h, D(DescriptorProto_extension), &pushextension,
+ NULL);
+ } else if (m == D(FileDescriptorProto)) {
upb_handlers_setstartmsg(h, &file_startmsg, NULL);
upb_handlers_setendmsg(h, &file_endmsg, NULL);
- upb_handlers_setstring(h, f(h, "package"), &file_onpackage, NULL);
- upb_handlers_setendsubmsg(h, f(h, "extension"), &pushextension, NULL);
- } else if (m == GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO) {
+ upb_handlers_setstring(h, D(FileDescriptorProto_package), &file_onpackage,
+ NULL);
+ upb_handlers_setendsubmsg(h, D(FileDescriptorProto_extension), &pushextension,
+ NULL);
+ } else if (m == D(EnumValueDescriptorProto)) {
upb_handlers_setstartmsg(h, &enumval_startmsg, NULL);
upb_handlers_setendmsg(h, &enumval_endmsg, NULL);
- upb_handlers_setstring(h, f(h, "name"), &enumval_onname, NULL);
- upb_handlers_setint32(h, f(h, "number"), &enumval_onnumber, NULL);
- } else if (m == GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO) {
+ upb_handlers_setstring(h, D(EnumValueDescriptorProto_name), &enumval_onname, NULL);
+ upb_handlers_setint32(h, D(EnumValueDescriptorProto_number), &enumval_onnumber,
+ NULL);
+ } else if (m == D(EnumDescriptorProto)) {
upb_handlers_setstartmsg(h, &enum_startmsg, NULL);
upb_handlers_setendmsg(h, &enum_endmsg, NULL);
- upb_handlers_setstring(h, f(h, "name"), &enum_onname, NULL);
- } else if (m == GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO) {
+ upb_handlers_setstring(h, D(EnumDescriptorProto_name), &enum_onname, NULL);
+ } else if (m == D(FieldDescriptorProto)) {
upb_handlers_setstartmsg(h, &field_startmsg, NULL);
upb_handlers_setendmsg(h, &field_endmsg, NULL);
- upb_handlers_setint32(h, f(h, "type"), &field_ontype, NULL);
- upb_handlers_setint32(h, f(h, "label"), &field_onlabel, NULL);
- upb_handlers_setint32(h, f(h, "number"), &field_onnumber, NULL);
- upb_handlers_setstring(h, f(h, "name"), &field_onname, NULL);
- upb_handlers_setstring(h, f(h, "type_name"), &field_ontypename, NULL);
- upb_handlers_setstring(h, f(h, "extendee"), &field_onextendee, NULL);
- upb_handlers_setstring(h, f(h, "default_value"), &field_ondefaultval, NULL);
- } else if (m == GOOGLE_PROTOBUF_FIELDOPTIONS) {
- upb_handlers_setbool(h, f(h, "lazy"), &field_onlazy, NULL);
+ upb_handlers_setint32(h, D(FieldDescriptorProto_type), &field_ontype,
+ NULL);
+ upb_handlers_setint32(h, D(FieldDescriptorProto_label), &field_onlabel,
+ NULL);
+ upb_handlers_setint32(h, D(FieldDescriptorProto_number), &field_onnumber,
+ NULL);
+ upb_handlers_setstring(h, D(FieldDescriptorProto_name), &field_onname,
+ NULL);
+ upb_handlers_setstring(h, D(FieldDescriptorProto_type_name),
+ &field_ontypename, NULL);
+ upb_handlers_setstring(h, D(FieldDescriptorProto_extendee),
+ &field_onextendee, NULL);
+ upb_handlers_setstring(h, D(FieldDescriptorProto_default_value),
+ &field_ondefaultval, NULL);
+ } else if (m == D(FieldOptions)) {
+ upb_handlers_setbool(h, D(FieldOptions_lazy), &field_onlazy, NULL);
}
}
+#undef D
+
const upb_handlers *upb_descreader_newhandlers(const void *owner) {
- return upb_handlers_newfrozen(
- GOOGLE_PROTOBUF_FILEDESCRIPTORSET, owner, reghandlers, NULL);
+ const upb_symtab *s = upbdefs_google_protobuf_descriptor(&s);
+ const upb_handlers *h = upb_handlers_newfrozen(
+ upbdefs_google_protobuf_FileDescriptorSet(s), owner, reghandlers, s);
+ upb_symtab_unref(s, &s);
+ return h;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback