summaryrefslogtreecommitdiff
path: root/upb/pb/decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'upb/pb/decoder.c')
-rw-r--r--upb/pb/decoder.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/upb/pb/decoder.c b/upb/pb/decoder.c
index 6fd6576..c5fae0e 100644
--- a/upb/pb/decoder.c
+++ b/upb/pb/decoder.c
@@ -148,10 +148,11 @@ static void checkpoint(upb_pbdecoder *d) {
// Resumes the decoder from an initial state or from a previous suspend.
void *upb_pbdecoder_resume(upb_pbdecoder *d, void *p, const char *buf,
- size_t size) {
+ size_t size, const upb_bufhandle *handle) {
UPB_UNUSED(p); // Useless; just for the benefit of the JIT.
d->buf_param = buf;
d->size_param = size;
+ d->handle = handle;
d->skip = 0;
if (d->residual_end > d->residual) {
// We have residual bytes from the last buffer.
@@ -488,11 +489,11 @@ upb_pbdecoder_frame *outer_frame(upb_pbdecoder *d) {
/* The main decoding loop *****************************************************/
size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
- size_t size) {
+ size_t size, const upb_bufhandle *handle) {
upb_pbdecoder *d = closure;
const mgroup *group = hd;
assert(buf);
- upb_pbdecoder_resume(d, NULL, buf, size);
+ upb_pbdecoder_resume(d, NULL, buf, size, handle);
UPB_UNUSED(group);
#define VMCASE(op, code) \
@@ -578,7 +579,8 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
)
VMCASE(OP_STRING,
uint32_t len = curbufleft(d);
- CHECK_SUSPEND(upb_sink_putstring(&d->top->sink, arg, ptr(d), len));
+ CHECK_SUSPEND(
+ upb_sink_putstring(&d->top->sink, arg, ptr(d), len, handle));
advance(d, len);
if (d->delim_end == NULL) { // String extends beyond this buf?
d->pc--;
@@ -683,6 +685,7 @@ void *upb_pbdecoder_startbc(void *closure, const void *pc, size_t size_hint) {
void *upb_pbdecoder_startjit(void *closure, const void *hd, size_t size_hint) {
UPB_UNUSED(hd);
+ UPB_UNUSED(size_hint);
upb_pbdecoder *d = closure;
d->call_len = 0;
return d;
@@ -712,7 +715,7 @@ bool upb_pbdecoder_end(void *closure, const void *handler_data) {
if (group->jit_code) {
if (d->top != d->stack)
d->stack->end_ofs = 0;
- group->jit_code(closure, method->code_base.ptr, &dummy, 0);
+ group->jit_code(closure, method->code_base.ptr, &dummy, 0, NULL);
} else {
#endif
d->stack->end_ofs = end;
@@ -726,7 +729,7 @@ bool upb_pbdecoder_end(void *closure, const void *handler_data) {
getop(*d->pc) == OP_TAGN);
d->pc = p;
}
- upb_pbdecoder_decode(closure, handler_data, &dummy, 0);
+ upb_pbdecoder_decode(closure, handler_data, &dummy, 0, NULL);
#ifdef UPB_USE_JIT_X64
}
#endif
@@ -762,7 +765,9 @@ void upb_pbdecoder_reset(upb_pbdecoder *d) {
// Not currently required, but to support outgrowing the static stack we need
// this.
-void upb_pbdecoder_uninit(upb_pbdecoder *d) {}
+void upb_pbdecoder_uninit(upb_pbdecoder *d) {
+ UPB_UNUSED(d);
+}
const upb_pbdecodermethod *upb_pbdecoder_method(const upb_pbdecoder *d) {
return d->method_;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback