This breaks the open-source build, will follow up with a change to fix it.
Added a upb_byteregion that tracks a region of the input buffer; decoders use this instead of using a upb_bytesrc directly. upb_byteregion is also used as the way of passing a string to a upb_handlers callback. This symmetry makes decoders compose better; if you want to take a parsed string and decode it as something else, you can take the string directly from the callback and feed it as input to another parser. A commented-out version of a pinning interface is present; I decline to actually implement it (and accept its extra complexity) until/unless it is clear that it is actually a win. But it is included as a proof-of-concept, to show that it fits well with the existing interface.
This might actually just bring to light my misuse of the upb_fielddef functions. The test assertions are fine, but an assertion in upb/upb.h fails: ./upb/upb.h:181: upb_value_getptr: Assertion `val.type == 33' failed.
Fix typo in handler.h
Signed-off-by: Wink Saville <email@example.com>
It's still not correct, but it's closer.
This leads to a major (20-40%) improvement in the parsetoproto2 benchmark with small messages. We now are faster than proto2 in all apples-to-apples comparisons, at least given the (admittedly limited) set of benchmarks in this source tree.