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.c62
1 files changed, 30 insertions, 32 deletions
diff --git a/src/upb_handlers.c b/src/upb_handlers.c
index d80d59f..25448da 100644
--- a/src/upb_handlers.c
+++ b/src/upb_handlers.c
@@ -47,11 +47,10 @@ upb_flow_t upb_unknownval_nop(void *closure, upb_field_number_t fieldnum,
return UPB_CONTINUE;
}
-static void upb_msgent_init(upb_msgent *e) {
- upb_inttable_init(&e->fieldtab, 8, sizeof(upb_fieldent));
+static void upb_msgent_init(upb_mhandlers *e) {
+ upb_inttable_init(&e->fieldtab, 8, sizeof(upb_fhandlers));
e->startmsg = &upb_startmsg_nop;
e->endmsg = &upb_endmsg_nop;
- e->unknownval = &upb_unknownval_nop;
e->tablearray = NULL;
e->is_group = false;
}
@@ -81,12 +80,12 @@ void upb_handlers_uninit(upb_handlers *h) {
upb_msgdef_unref(h->toplevel_msgdef);
}
-static upb_fieldent *upb_handlers_getorcreate_without_fval(
+static upb_fhandlers *upb_handlers_getorcreate_without_fval(
upb_handlers *h, upb_field_number_t fieldnum, upb_fieldtype_t type, bool repeated) {
uint32_t tag = fieldnum << 3 | upb_types[type].native_wire_type;
- upb_fieldent *f = upb_inttable_lookup(&h->msgent->fieldtab, tag);
+ upb_fhandlers *f = upb_inttable_lookup(&h->msgent->fieldtab, tag);
if (!f) {
- upb_fieldent new_f = {false, type, repeated,
+ upb_fhandlers new_f = {false, type, repeated,
repeated && upb_isprimitivetype(type), fieldnum, -1, UPB_NO_VALUE,
{&upb_value_nop}, &upb_endsubmsg_nop, 0, 0, 0, NULL};
if (upb_issubmsgtype(type)) new_f.cb.startsubmsg = &upb_startsubmsg_nop;
@@ -99,34 +98,33 @@ static upb_fieldent *upb_handlers_getorcreate_without_fval(
return f;
}
-static upb_fieldent *upb_handlers_getorcreate(
+static upb_fhandlers *upb_handlers_getorcreate(
upb_handlers *h, upb_field_number_t fieldnum,
upb_fieldtype_t type, bool repeated, upb_value fval) {
- upb_fieldent *f =
+ upb_fhandlers *f =
upb_handlers_getorcreate_without_fval(h, fieldnum, type, repeated);
f->fval = fval;
return f;
}
-void upb_register_startend(upb_handlers *h, upb_startmsg_handler_t startmsg,
- upb_endmsg_handler_t endmsg) {
+void upb_register_startend(upb_handlers *h, upb_startmsg_handler *startmsg,
+ upb_endmsg_handler *endmsg) {
h->msgent->startmsg = startmsg ? startmsg : &upb_startmsg_nop;
h->msgent->endmsg = endmsg ? endmsg : &upb_endmsg_nop;
}
// TODO:
// void upb_register_unknownval(upb_handlers *h,
-// upb_unknownval_handler_t unknown);
+// upb_unknownval_handler *unknown);
// bool upb_handlers_link(upb_handlers *h, upb_fielddef *f);
// void upb_register_path_value(upb_handlers *h, const char *path,
-// upb_value_handler_t value, upb_value fval);
-
-void upb_register_all(upb_handlers *h, upb_startmsg_handler_t start,
- upb_endmsg_handler_t end,
- upb_value_handler_t value,
- upb_startsubmsg_handler_t startsubmsg,
- upb_endsubmsg_handler_t endsubmsg,
- upb_unknownval_handler_t unknown) {
+// upb_value_handler *value, upb_value fval);
+
+void upb_register_all(upb_handlers *h, upb_startmsg_handler *start,
+ upb_endmsg_handler *end,
+ upb_value_handler *value,
+ upb_startsubmsg_handler *startsubmsg,
+ upb_endsubmsg_handler *endsubmsg) {
upb_register_startend(h, start, end);
//upb_register_unknownval(h, unknown);
upb_msgdef *m = h->top->msgdef;
@@ -137,7 +135,7 @@ void upb_register_all(upb_handlers *h, upb_startmsg_handler_t start,
upb_value_setfielddef(&fval, f);
if (upb_issubmsg(f)) {
upb_handlers_push(h, f, startsubmsg, endsubmsg, fval, false);
- upb_register_all(h, start, end, value, startsubmsg, endsubmsg, unknown);
+ upb_register_all(h, start, end, value, startsubmsg, endsubmsg);
upb_handlers_pop(h, f);
} else {
upb_register_value(h, f, value, fval);
@@ -147,23 +145,23 @@ void upb_register_all(upb_handlers *h, upb_startmsg_handler_t start,
void upb_register_typed_value(upb_handlers *h, upb_field_number_t fieldnum,
upb_fieldtype_t type, bool repeated,
- upb_value_handler_t value, upb_value fval) {
+ upb_value_handler *value, upb_value fval) {
upb_handlers_getorcreate(h, fieldnum, type, repeated, fval)->cb.value =
value ? value : &upb_value_nop;
}
void upb_register_value(upb_handlers *h, upb_fielddef *f,
- upb_value_handler_t value, upb_value fval) {
+ upb_value_handler *value, upb_value fval) {
assert(f->msgdef == h->top->msgdef);
upb_register_typed_value(h, f->number, f->type, upb_isarray(f), value, fval);
}
void upb_register_typed_submsg(upb_handlers *h, upb_field_number_t fieldnum,
upb_fieldtype_t type, bool repeated,
- upb_startsubmsg_handler_t start,
- upb_endsubmsg_handler_t end,
+ upb_startsubmsg_handler *start,
+ upb_endsubmsg_handler *end,
upb_value fval) {
- upb_fieldent *f = upb_handlers_getorcreate(h, fieldnum, type, repeated, fval);
+ upb_fhandlers *f = upb_handlers_getorcreate(h, fieldnum, type, repeated, fval);
f->cb.startsubmsg = start ? start : &upb_startsubmsg_nop;
f->endsubmsg = end ? end : &upb_endsubmsg_nop;
}
@@ -171,14 +169,14 @@ void upb_register_typed_submsg(upb_handlers *h, upb_field_number_t fieldnum,
void upb_handlers_typed_link(upb_handlers *h, upb_field_number_t fieldnum,
upb_fieldtype_t type, bool repeated, int frames) {
assert(frames <= (h->top - h->stack));
- upb_fieldent *f =
+ upb_fhandlers *f =
upb_handlers_getorcreate_without_fval(h, fieldnum, type, repeated);
f->msgent_index = (h->top - frames)->msgent_index;
}
void upb_handlers_typed_push(upb_handlers *h, upb_field_number_t fieldnum,
upb_fieldtype_t type, bool repeated) {
- upb_fieldent *f =
+ upb_fhandlers *f =
upb_handlers_getorcreate_without_fval(h, fieldnum, type, repeated);
if (h->top == h->limit) abort(); // TODO: make growable.
++h->top;
@@ -212,8 +210,8 @@ void upb_handlers_typed_push(upb_handlers *h, upb_field_number_t fieldnum,
}
void upb_handlers_push(upb_handlers *h, upb_fielddef *f,
- upb_startsubmsg_handler_t start,
- upb_endsubmsg_handler_t end, upb_value fval,
+ upb_startsubmsg_handler *start,
+ upb_endsubmsg_handler *end, upb_value fval,
bool delegate) {
assert(f->msgdef == h->top->msgdef);
(void)delegate; // TODO
@@ -234,7 +232,7 @@ void upb_handlers_pop(upb_handlers *h, upb_fielddef *f) {
/* upb_dispatcher *************************************************************/
-static upb_fieldent toplevel_f = {
+static upb_fhandlers toplevel_f = {
false, UPB_TYPE(GROUP), false, false, 0,
0, // msgent_index
#ifdef NDEBUG
@@ -294,7 +292,7 @@ void upb_dispatch_endmsg(upb_dispatcher *d, upb_status *status) {
upb_copyerr(status, &d->status);
}
-upb_flow_t upb_dispatch_startsubmsg(upb_dispatcher *d, upb_fieldent *f,
+upb_flow_t upb_dispatch_startsubmsg(upb_dispatcher *d, upb_fhandlers *f,
size_t userval) {
++d->current_depth;
if (upb_dispatcher_skipping(d)) return UPB_SKIPSUBMSG;
@@ -328,7 +326,7 @@ upb_flow_t upb_dispatch_endsubmsg(upb_dispatcher *d) {
flow = UPB_SKIPSUBMSG;
} else {
assert(d->top > d->stack);
- upb_fieldent *old_f = d->top->f;
+ upb_fhandlers *old_f = d->top->f;
d->msgent->endmsg(d->top->closure, &d->status);
--d->top;
d->msgent = upb_handlers_getmsgent(d->handlers, d->top->f);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback