From: mdroth <mdroth@linux.vnet.ibm.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: lcapitulino@redhat.com, qemu-devel@nongnu.org,
stefanha@redhat.com, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH 1/3] qapi.py: Move common code to evaluate()
Date: Mon, 24 Jun 2013 11:06:47 -0500 [thread overview]
Message-ID: <20130624160647.GG7866@vm> (raw)
In-Reply-To: <20130624151735.GH3338@dhcp-200-207.str.redhat.com>
On Mon, Jun 24, 2013 at 05:17:35PM +0200, Kevin Wolf wrote:
> Am 21.06.2013 um 18:39 hat mdroth geschrieben:
> > On Wed, Jun 19, 2013 at 06:28:05PM +0200, Kevin Wolf wrote:
> > > Don't duplicate more code than is really necessary.
> > >
> > > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > > ---
> > > scripts/qapi.py | 24 ++++++++++--------------
> > > 1 file changed, 10 insertions(+), 14 deletions(-)
> > >
> > > diff --git a/scripts/qapi.py b/scripts/qapi.py
> > > index 02ad668..3a64769 100644
> > > --- a/scripts/qapi.py
> > > +++ b/scripts/qapi.py
> > > @@ -76,12 +76,18 @@ def parse(tokens):
> > > return tokens[0], tokens[1:]
> > >
> > > def evaluate(string):
> > > - return parse(map(lambda x: x, tokenize(string)))[0]
> > > + expr_eval = parse(map(lambda x: x, tokenize(string)))[0]
> > > +
> > > + if expr_eval.has_key('enum'):
> > > + add_enum(expr_eval['enum'])
> > > + elif expr_eval.has_key('union'):
> > > + add_enum('%sKind' % expr_eval['union'])
> > > +
> > > + return expr_eval
> >
> > add_enum() adds stuff to a global table, so I don't really like the idea
> > of pushing it further down the stack (however inconsequential it may be
> > in this case...)
>
> As if it made any difference if it's one level more or less... It's
> already buried in the "library".
>
> > I think the real reason we have repetition is the extra 'flush' we do
> > after the for loop below to handle the last expression we read from a
> > schema, which leads to a repeat of one of the clauses in the loop body.
> > I've wanted to get rid of it a few times in the past so this is probably
> > a good opportunity to do so.
> >
> > Could you try adapting something like the following to keep the
> > global stuff in parse_schema()?
>
> I don't think there's any value in keeping the global stuff in
> parse_schema() (or, to be precise, in functions directly called by
> parse_schema()) , and I found it quite nice to have evaluate()
> actually evaluate something instead of just parsing it.
>
> But I agree that duplicating code, as small as it may be now, isn't
> nice, so I can try to use the get_expr() thing. I just would prefer to
> move the evaluation to evaluate() anyway.
evaluate() is basically the qapi version of python's eval(), but with
specially handling for JSON objects that retains the original ordering
of the keys by mapping JSON strings to OrderedDicts instead of dicts. If
it weren't for that requirement we'd be call eval() in place of
evaluate() and drop all our awesome parsing/tokenizing code.
It's still not a huge deal, but given an alternative that's also
beneficial in other ways I think we should avoid it.
>
> Kevin
>
next prev parent reply other threads:[~2013-06-24 16:07 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-19 16:28 [Qemu-devel] [PATCH 0/3] qapi: Top-level type reference for command definitions Kevin Wolf
2013-06-19 16:28 ` [Qemu-devel] [PATCH 1/3] qapi.py: Move common code to evaluate() Kevin Wolf
2013-06-21 16:39 ` mdroth
2013-06-24 15:17 ` Kevin Wolf
2013-06-24 16:06 ` mdroth [this message]
2013-06-19 16:28 ` [Qemu-devel] [PATCH 2/3] qapi.py: Allow top-level type reference for command definitions Kevin Wolf
2013-06-21 10:30 ` Eric Blake
2013-06-21 11:00 ` Kevin Wolf
2013-06-21 11:12 ` Eric Blake
2013-06-19 16:28 ` [Qemu-devel] [PATCH 3/3] qapi-schema: Use BlockdevSnapshot type for blockdev-snapshot-sync Kevin Wolf
2013-06-21 10:31 ` Eric Blake
2013-06-21 15:10 ` Luiz Capitulino
2013-06-20 7:43 ` [Qemu-devel] [PATCH 0/3] qapi: Top-level type reference for command definitions Stefan Hajnoczi
2013-06-21 10:31 ` Eric Blake
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=20130624160647.GG7866@vm \
--to=mdroth@linux.vnet.ibm.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).