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 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.