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: Fri, 21 Jun 2013 11:39:57 -0500 [thread overview]
Message-ID: <20130621163957.GD12685@vm> (raw)
In-Reply-To: <1371659287-14331-2-git-send-email-kwolf@redhat.com>
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...)
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()?
def get_expr(fp):
expr = ""
for line in fp:
if line.startswith('#') or line == '\n':
continue
if line.startswith(' '):
expr += line
elif expr:
yield expr
expr = line
else:
expr += line
yield expr
def parse_schema(fp):
exprs = []
expr_eval
for expr in get_expr(fp):
expr_eval = evaluate(expr)
if expr_eval.has_key('enum'):
add_enum(expr_eval['enum'])
...
return exprs
>
> def parse_schema(fp):
> exprs = []
> expr = ''
> - expr_eval = None
>
> for line in fp:
> if line.startswith('#') or line == '\n':
> @@ -90,23 +96,13 @@ def parse_schema(fp):
> if line.startswith(' '):
> expr += line
> elif expr:
> - expr_eval = evaluate(expr)
> - if expr_eval.has_key('enum'):
> - add_enum(expr_eval['enum'])
> - elif expr_eval.has_key('union'):
> - add_enum('%sKind' % expr_eval['union'])
> - exprs.append(expr_eval)
> + exprs.append(evaluate(expr))
> expr = line
> else:
> expr += line
>
> if expr:
> - expr_eval = evaluate(expr)
> - if expr_eval.has_key('enum'):
> - add_enum(expr_eval['enum'])
> - elif expr_eval.has_key('union'):
> - add_enum('%sKind' % expr_eval['union'])
> - exprs.append(expr_eval)
> + exprs.append(evaluate(expr))
>
> return exprs
>
> --
> 1.8.1.4
>
>
next prev parent reply other threads:[~2013-06-21 16:40 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 [this message]
2013-06-24 15:17 ` Kevin Wolf
2013-06-24 16:06 ` mdroth
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=20130621163957.GD12685@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).