[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 for-2.5 09/12] qjson: Convert to parser to re
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH v3 for-2.5 09/12] qjson: Convert to parser to recursive descent |
Date: |
Wed, 25 Nov 2015 15:22:34 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 11/25/2015 02:23 PM, Markus Armbruster wrote:
> We backtrack in parse_value(), even though JSON is LL(1) and thus can
> be parsed by straightforward recursive descent. Do exactly that.
>
> Based on an almost-correct patch from Paolo Bonzini.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
> qobject/json-parser.c | 165
> ++++++++++++++------------------------------------
> 1 file changed, 47 insertions(+), 118 deletions(-)
>
> static QObject *parse_value(JSONParserContext *ctxt, va_list *ap)
> {
> - QObject *obj;
> + QObject *token;
>
> - obj = parse_object(ctxt, ap);
> - if (obj == NULL) {
> - obj = parse_array(ctxt, ap);
> - }
> - if (obj == NULL) {
> - obj = parse_escape(ctxt, ap);
> - }
> - if (obj == NULL) {
> - obj = parse_keyword(ctxt);
> - }
> - if (obj == NULL) {
> - obj = parse_literal(ctxt);
> + token = parser_context_peek_token(ctxt);
> + if (token == NULL) {
> + parse_error(ctxt, NULL, "premature EOI");
Should we spell that out as 'end of input'?
But that's cosmetic, and doesn't affect correctness of the conversion.
Reviewed-by: Eric Blake <address@hidden>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH v3 for-2.5 07/12] qjson: Inline token_is_escape() and simplify, (continued)
- [Qemu-devel] [PATCH v3 for-2.5 07/12] qjson: Inline token_is_escape() and simplify, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 03/12] check-qjson: Add test for JSON nesting depth limit, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 04/12] qjson: Spell out some silent assumptions, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 12/12] qjson: Limit number of tokens in addition to total size, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 08/12] qjson: replace QString in JSONLexer with GString, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 09/12] qjson: Convert to parser to recursive descent, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 02/12] qjson: Don't crash when input exceeds nesting limit, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 10/12] qjson: store tokens in a GQueue, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 11/12] qjson: surprise, allocating 6 QObjects per token is expensive, Markus Armbruster, 2015/11/25
- [Qemu-devel] [PATCH v3 for-2.5 05/12] qjson: Give each of the six structural chars its own token type, Markus Armbruster, 2015/11/25