diff options
author | Joshua Haberman <joshua@reverberate.org> | 2010-07-24 17:01:45 -0700 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2010-07-24 17:01:45 -0700 |
commit | 372c8f0487a666c3fb36edc18accba0fba9a2680 (patch) | |
tree | 1265fee2c2324a5bca84208fdf29caa3a8697818 | |
parent | 851c6a6915b55842809c8622d0fb941bc911be37 (diff) |
Fixes to benchmark.
-rw-r--r-- | benchmarks/parsestream.upb_table.c | 8 | ||||
-rw-r--r-- | core/upb_def.c | 2 | ||||
-rw-r--r-- | stream/upb_decoder.c | 12 | ||||
-rw-r--r-- | stream/upb_strstream.c | 1 |
4 files changed, 18 insertions, 5 deletions
diff --git a/benchmarks/parsestream.upb_table.c b/benchmarks/parsestream.upb_table.c index c6acad9..1e18119 100644 --- a/benchmarks/parsestream.upb_table.c +++ b/benchmarks/parsestream.upb_table.c @@ -17,6 +17,12 @@ static bool initialize() upb_status status = UPB_STATUS_INIT; upb_symtab *s = upb_symtab_new(); upb_symtab_add_descriptorproto(s); + upb_def *fds_def = upb_symtab_lookup( + s, UPB_STRLIT("google.protobuf.FileDescriptorSet")); + if (!fds_def) { + fprintf(stderr, "Couldn't load FileDescriptorSet def"); + } + upb_string *fds_str = upb_strreadfile(MESSAGE_DESCRIPTOR_FILE); if(fds_str == NULL) { fprintf(stderr, "Couldn't read " MESSAGE_DESCRIPTOR_FILE ":"), @@ -26,8 +32,6 @@ static bool initialize() upb_stringsrc *ssrc = upb_stringsrc_new(); upb_stringsrc_reset(ssrc, fds_str); - upb_def *fds_def = upb_symtab_lookup( - s, UPB_STRLIT("google.protobuf.FileDescriptorSet")); upb_decoder *d = upb_decoder_new(upb_downcast_msgdef(fds_def)); upb_decoder_reset(d, upb_stringsrc_bytesrc(ssrc)); diff --git a/core/upb_def.c b/core/upb_def.c index e40e1f0..e117455 100644 --- a/core/upb_def.c +++ b/core/upb_def.c @@ -384,6 +384,8 @@ static bool upb_addfield(upb_src *src, upb_msgdef *m, upb_status *status) f->owned = true; break; } + default: + upb_src_skipval(src); } } CHECKSRC(upb_src_eof(src)); diff --git a/stream/upb_decoder.c b/stream/upb_decoder.c index 74ef5c5..46cfb3f 100644 --- a/stream/upb_decoder.c +++ b/stream/upb_decoder.c @@ -318,7 +318,9 @@ upb_fielddef *upb_decoder_getdef(upb_decoder *d) } // Handles the packed field case. - if(d->field) return d->field; + if(d->field) { + return d->field; + } uint32_t key = 0; again: @@ -457,12 +459,15 @@ bool upb_decoder_startmsg(upb_decoder *d) { return false; } upb_decoder_frame *frame = d->top; - frame->msgdef = upb_downcast_msgdef(d->field->def); if(d->field->type == UPB_TYPE(GROUP)) { frame->end_offset = UPB_GROUP_END_OFFSET; - } else { + } else if (d->field->type == UPB_TYPE(MESSAGE)) { frame->end_offset = upb_decoder_offset(d) + d->delimited_len; + } else { + upb_seterr(&d->src.status, UPB_STATUS_ERROR, + "Tried to startmsg a non-msg field."); } + frame->msgdef = upb_downcast_msgdef(d->field->def); d->field = NULL; return true; } @@ -485,6 +490,7 @@ bool upb_decoder_endmsg(upb_decoder *d) { bool upb_decoder_skipval(upb_decoder *d) { upb_strlen_t bytes_to_skip; + d->field = NULL; switch(d->wire_type) { case UPB_WIRE_TYPE_VARINT: { return upb_decoder_skipv64(d); diff --git a/stream/upb_strstream.c b/stream/upb_strstream.c index 65f33d9..7ed761b 100644 --- a/stream/upb_strstream.c +++ b/stream/upb_strstream.c @@ -53,6 +53,7 @@ static upb_bytesrc_vtable upb_stringsrc_vtbl = { upb_stringsrc *upb_stringsrc_new() { upb_stringsrc *s = malloc(sizeof(*s)); + s->str = NULL; upb_bytesrc_init(&s->bytesrc, &upb_stringsrc_vtbl); return s; } |