From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, lcapitulino@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 for-2.5 09/12] qjson: Convert to parser to recursive descent
Date: Thu, 26 Nov 2015 09:37:37 +0100 [thread overview]
Message-ID: <8737vtma0e.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <565634AA.1040703@redhat.com> (Eric Blake's message of "Wed, 25 Nov 2015 15:22:34 -0700")
Eric Blake <eblake@redhat.com> writes:
> 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 <armbru@redhat.com>
>> ---
>> 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.
Doesn't matter, because we generally throw away these error messages,
then make up a useless one *boggle*. Once that's fixed, the
parse_error() could use some love.
> Reviewed-by: Eric Blake <eblake@redhat.com>
Thanks!
next prev parent reply other threads:[~2015-11-26 8:37 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-25 21:23 [Qemu-devel] [PATCH v3 for-2.5 00/12] qjson: Fix crash & save a lot of memory Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 01/12] qjson: Apply nesting limit more sanely Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 02/12] qjson: Don't crash when input exceeds nesting limit Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 03/12] check-qjson: Add test for JSON nesting depth limit Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 04/12] qjson: Spell out some silent assumptions Markus Armbruster
2015-11-25 22:00 ` Eric Blake
2015-11-25 21:23 ` [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 22:05 ` Eric Blake
2015-11-26 8:22 ` Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 06/12] qjson: Inline token_is_keyword() and simplify Markus Armbruster
2015-11-25 22:09 ` Eric Blake
2015-11-26 8:26 ` Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 07/12] qjson: Inline token_is_escape() " Markus Armbruster
2015-11-25 22:14 ` Eric Blake
2015-11-26 8:34 ` Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 08/12] qjson: replace QString in JSONLexer with GString Markus Armbruster
2015-11-25 22:16 ` Eric Blake
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 09/12] qjson: Convert to parser to recursive descent Markus Armbruster
2015-11-25 22:22 ` Eric Blake
2015-11-26 8:37 ` Markus Armbruster [this message]
2015-11-26 9:07 ` Markus Armbruster
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 10/12] qjson: store tokens in a GQueue Markus Armbruster
2015-11-25 22:25 ` Eric Blake
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 11/12] qjson: surprise, allocating 6 QObjects per token is expensive Markus Armbruster
2015-11-25 22:31 ` Eric Blake
2015-11-25 21:23 ` [Qemu-devel] [PATCH v3 for-2.5 12/12] qjson: Limit number of tokens in addition to total size Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8737vtma0e.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.