summaryrefslogtreecommitdiff
path: root/src/upb_handlers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/upb_handlers.c')
-rw-r--r--src/upb_handlers.c89
1 files changed, 45 insertions, 44 deletions
diff --git a/src/upb_handlers.c b/src/upb_handlers.c
index 7be43ce..f4664a0 100644
--- a/src/upb_handlers.c
+++ b/src/upb_handlers.c
@@ -50,9 +50,9 @@ static upb_mhandlers *upb_mhandlers_new() {
return m;
}
-static upb_fhandlers *_upb_mhandlers_newfield(upb_mhandlers *m, uint32_t n,
- upb_fieldtype_t type,
- bool repeated) {
+static upb_fhandlers *_upb_mhandlers_newfhandlers(upb_mhandlers *m, uint32_t n,
+ upb_fieldtype_t type,
+ bool repeated) {
uint32_t tag = n << 3 | upb_types[type].native_wire_type;
upb_fhandlers *f = upb_inttable_lookup(&m->fieldtab, tag);
if (f) abort();
@@ -69,25 +69,56 @@ static upb_fhandlers *_upb_mhandlers_newfield(upb_mhandlers *m, uint32_t n,
return f;
}
-upb_fhandlers *upb_mhandlers_newfield(upb_mhandlers *m, uint32_t n,
- upb_fieldtype_t type, bool repeated) {
+upb_fhandlers *upb_mhandlers_newfhandlers(upb_mhandlers *m, uint32_t n,
+ upb_fieldtype_t type, bool repeated) {
assert(type != UPB_TYPE(MESSAGE));
assert(type != UPB_TYPE(GROUP));
- return _upb_mhandlers_newfield(m, n, type, repeated);
+ return _upb_mhandlers_newfhandlers(m, n, type, repeated);
}
-upb_fhandlers *upb_mhandlers_newsubmsgfield(upb_mhandlers *m, uint32_t n,
- upb_fieldtype_t type, bool repeated,
- upb_mhandlers *subm) {
+upb_fhandlers *upb_mhandlers_newfhandlers_subm(upb_mhandlers *m, uint32_t n,
+ upb_fieldtype_t type,
+ bool repeated,
+ upb_mhandlers *subm) {
assert(type == UPB_TYPE(MESSAGE) || type == UPB_TYPE(GROUP));
assert(subm);
- upb_fhandlers *f = _upb_mhandlers_newfield(m, n, type, repeated);
+ upb_fhandlers *f = _upb_mhandlers_newfhandlers(m, n, type, repeated);
f->submsg = subm;
if (type == UPB_TYPE(GROUP))
- _upb_mhandlers_newfield(subm, n, UPB_TYPE_ENDGROUP, false);
+ _upb_mhandlers_newfhandlers(subm, n, UPB_TYPE_ENDGROUP, false);
return f;
}
+
+/* upb_handlers ***************************************************************/
+
+void upb_handlers_init(upb_handlers *h) {
+ h->msgs_len = 0;
+ h->msgs_size = 4;
+ h->msgs = malloc(h->msgs_size * sizeof(*h->msgs));
+ h->should_jit = true;
+}
+
+void upb_handlers_uninit(upb_handlers *h) {
+ for (int i = 0; i < h->msgs_len; i++) {
+ upb_mhandlers *mh = h->msgs[i];
+ upb_inttable_free(&mh->fieldtab);
+ free(mh->tablearray);
+ free(mh);
+ }
+ free(h->msgs);
+}
+
+upb_mhandlers *upb_handlers_newmhandlers(upb_handlers *h) {
+ if (h->msgs_len == h->msgs_size) {
+ h->msgs_size *= 2;
+ h->msgs = realloc(h->msgs, h->msgs_size * sizeof(*h->msgs));
+ }
+ upb_mhandlers *mh = upb_mhandlers_new();
+ h->msgs[h->msgs_len++] = mh;
+ return mh;
+}
+
typedef struct {
upb_strtable_entry e;
upb_mhandlers *mh;
@@ -97,7 +128,7 @@ static upb_mhandlers *upb_regmsg_dfs(upb_handlers *h, upb_msgdef *m,
upb_onmsgreg *msgreg_cb,
upb_onfieldreg *fieldreg_cb,
void *closure, upb_strtable *mtab) {
- upb_mhandlers *mh = upb_handlers_newmsg(h);
+ upb_mhandlers *mh = upb_handlers_newmhandlers(h);
upb_mtab_ent e = {{m->base.fqname, 0}, mh};
upb_strtable_insert(mtab, &e.e);
if (msgreg_cb) msgreg_cb(closure, mh, m);
@@ -115,10 +146,10 @@ static upb_mhandlers *upb_regmsg_dfs(upb_handlers *h, upb_msgdef *m,
sub_mh = upb_regmsg_dfs(h, upb_downcast_msgdef(f->def), msgreg_cb,
fieldreg_cb, closure, mtab);
}
- fh = upb_mhandlers_newsubmsgfield(
+ fh = upb_mhandlers_newfhandlers_subm(
mh, f->number, f->type, upb_isarray(f), sub_mh);
} else {
- fh = upb_mhandlers_newfield(mh, f->number, f->type, upb_isarray(f));
+ fh = upb_mhandlers_newfhandlers(mh, f->number, f->type, upb_isarray(f));
}
if (fieldreg_cb) fieldreg_cb(closure, fh, f);
}
@@ -138,36 +169,6 @@ upb_mhandlers *upb_handlers_regmsgdef(upb_handlers *h, upb_msgdef *m,
}
-/* upb_handlers ***************************************************************/
-
-void upb_handlers_init(upb_handlers *h) {
- h->msgs_len = 0;
- h->msgs_size = 4;
- h->msgs = malloc(h->msgs_size * sizeof(*h->msgs));
- h->should_jit = true;
-}
-
-void upb_handlers_uninit(upb_handlers *h) {
- for (int i = 0; i < h->msgs_len; i++) {
- upb_mhandlers *mh = h->msgs[i];
- upb_inttable_free(&mh->fieldtab);
- free(mh->tablearray);
- free(mh);
- }
- free(h->msgs);
-}
-
-upb_mhandlers *upb_handlers_newmsg(upb_handlers *h) {
- if (h->msgs_len == h->msgs_size) {
- h->msgs_size *= 2;
- h->msgs = realloc(h->msgs, h->msgs_size * sizeof(*h->msgs));
- }
- upb_mhandlers *mh = upb_mhandlers_new();
- h->msgs[h->msgs_len++] = mh;
- return mh;
-}
-
-
/* upb_dispatcher *************************************************************/
static upb_fhandlers toplevel_f = {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback