diff options
Diffstat (limited to 'upb')
-rw-r--r-- | upb/handlers.c | 6 | ||||
-rw-r--r-- | upb/sink.h | 41 |
2 files changed, 37 insertions, 10 deletions
diff --git a/upb/handlers.c b/upb/handlers.c index ba27b98..ca978bf 100644 --- a/upb/handlers.c +++ b/upb/handlers.c @@ -91,7 +91,7 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f, if (closure_type && *context_closure_type && closure_type != *context_closure_type) { - UPB_ASSERT(false); + return false; } if (closure_type) @@ -103,7 +103,7 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f, const void *return_type = set_attr.return_closure_type; const void *table_return_type = h->table[sel].attr.return_closure_type; if (return_type && table_return_type && return_type != table_return_type) { - UPB_ASSERT(false); + return false; } if (table_return_type && !return_type) { @@ -168,7 +168,7 @@ bool checkstart(upb_handlers *h, const upb_fielddef *f, upb_handlertype_t type, return_closure_type = attr->return_closure_type; if (closure_type && return_closure_type && closure_type != return_closure_type) { - UPB_ASSERT(false); + return false; } return true; } @@ -326,18 +326,37 @@ class upb::Sink { * * For StartString(), the function will write a sink for the string to "sub." * The sub-sink must be used for any/all PutStringBuffer() calls. */ - bool StartString(HandlersPtr::Selector s, size_t size_hint, Sink* sub); + bool StartString(HandlersPtr::Selector s, size_t size_hint, Sink* sub) { + upb_sink sub_c; + bool ret = upb_sink_startstr(&sink_, s, size_hint, &sub_c); + *sub = sub_c; + return ret; + } + size_t PutStringBuffer(HandlersPtr::Selector s, const char *buf, size_t len, - const upb_bufhandle *handle); - bool EndString(HandlersPtr::Selector s); + const upb_bufhandle *handle) { + return upb_sink_putstring(&sink_, s, buf, len, handle); + } + + bool EndString(HandlersPtr::Selector s) { + return upb_sink_endstr(&sink_, s); + } /* For submessage fields. * * For StartSubMessage(), the function will write a sink for the string to * "sub." The sub-sink must be used for any/all handlers called within the * submessage. */ - bool StartSubMessage(HandlersPtr::Selector s, Sink* sub); - bool EndSubMessage(HandlersPtr::Selector s); + bool StartSubMessage(HandlersPtr::Selector s, Sink* sub) { + upb_sink sub_c; + bool ret = upb_sink_startsubmsg(&sink_, s, &sub_c); + *sub = sub_c; + return ret; + } + + bool EndSubMessage(HandlersPtr::Selector s) { + return upb_sink_endsubmsg(&sink_, s); + } /* For repeated fields of any type, the sequence of values must be wrapped in * these calls. @@ -345,8 +364,16 @@ class upb::Sink { * For StartSequence(), the function will write a sink for the string to * "sub." The sub-sink must be used for any/all handlers called within the * sequence. */ - bool StartSequence(HandlersPtr::Selector s, Sink* sub); - bool EndSequence(HandlersPtr::Selector s); + bool StartSequence(HandlersPtr::Selector s, Sink* sub) { + upb_sink sub_c; + bool ret = upb_sink_startseq(&sink_, s, &sub_c); + *sub = sub_c; + return ret; + } + + bool EndSequence(HandlersPtr::Selector s) { + return upb_sink_endseq(&sink_, s); + } /* Copy and assign specifically allowed. * We don't even bother making these members private because so many |