Message ID | 1438679896-5077-3-git-send-email-armbru@redhat.com |
---|---|
State | New |
Headers | show |
Markus Armbruster <armbru@redhat.com> writes: > Commit 05dfb26 added eatspace stripping to mcgen(). Move it to > cgen(), just in case somebody gets tempted to use cgen() directly > instead of via mcgen(). > > cgen() indents blank lines. No such lines get generated right now, > but fix it anyway. > > We use triple-quoted strings for program text, like this: > > ''' > Program text > any number of lines > ''' > > Keeps the program text relatively readable, but puts an extra newline > at either end. mcgen() "fixes" that by dropping the first and last > line outright. Drop only the newlines. > > This unmasks a bug in qapi-commands.py: four quotes instead of three. > Fix it up. > > Output doesn't change > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > scripts/qapi-commands.py | 2 +- > scripts/qapi.py | 19 ++++++++++++------- > 2 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py > index ca22acc..ce51408 100644 > --- a/scripts/qapi-commands.py > +++ b/scripts/qapi-commands.py > @@ -56,7 +56,7 @@ def gen_sync_call(name, args, ret_type, indent=0): > name=c_name(name), args=arglist, retval=retval).rstrip() > if ret_type: > ret += "\n" + gen_err_check('local_err') > - ret += "\n" + mcgen('''' > + ret += "\n" + mcgen(''' > %(marshal_output_call)s > ''', > marshal_output_call=gen_marshal_output_call(name, ret_type)).rstrip() > diff --git a/scripts/qapi.py b/scripts/qapi.py > index 06d7fc2..20383ef 100644 > --- a/scripts/qapi.py > +++ b/scripts/qapi.py > @@ -943,16 +943,21 @@ def pop_indent(indent_amount=4): > global indent_level > indent_level -= indent_amount > > +# Generate @code with @kwds interpolated. > +# Obey indent_level, and strip eatspace. > def cgen(code, **kwds): > - indent = genindent(indent_level) > - lines = code.split('\n') > - lines = map(lambda x: indent + x, lines) > - return '\n'.join(lines) % kwds + '\n' > - > -def mcgen(code, **kwds): > - raw = cgen('\n'.join(code.split('\n')[1:-1]), **kwds) > + raw = code % kwds > + if indent_level: > + indent = genindent(indent_level) > + raw = re.subn("^.", indent + '\g<0>', raw, 0, re.MULTILINE) pylint wants us to use r'\g<0>'. If nothing else comes up, I'll fix this up for my pull. > + raw = raw[0] > return re.sub(re.escape(eatspace) + ' *', '', raw) > > +def mcgen(code, **kwds): > + if code[0] == '\n': > + code = code[1:] > + return cgen(code, **kwds) > + > def basename(filename): > return filename.split("/")[-1]
On 08/04/2015 09:44 AM, Markus Armbruster wrote: > Markus Armbruster <armbru@redhat.com> writes: > >> Commit 05dfb26 added eatspace stripping to mcgen(). Move it to >> cgen(), just in case somebody gets tempted to use cgen() directly >> instead of via mcgen(). >> >> Output doesn't change >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> --- >> scripts/qapi-commands.py | 2 +- >> scripts/qapi.py | 19 ++++++++++++------- >> 2 files changed, 13 insertions(+), 8 deletions(-) >> -def mcgen(code, **kwds): >> - raw = cgen('\n'.join(code.split('\n')[1:-1]), **kwds) >> + raw = code % kwds >> + if indent_level: >> + indent = genindent(indent_level) >> + raw = re.subn("^.", indent + '\g<0>', raw, 0, re.MULTILINE) > > pylint wants us to use r'\g<0>'. If nothing else comes up, I'll fix > this up for my pull. > Goes to show that I've never (yet) used pylint. I probably ought to :) Fine by me to make that tweak and keep my R-b.
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py index ca22acc..ce51408 100644 --- a/scripts/qapi-commands.py +++ b/scripts/qapi-commands.py @@ -56,7 +56,7 @@ def gen_sync_call(name, args, ret_type, indent=0): name=c_name(name), args=arglist, retval=retval).rstrip() if ret_type: ret += "\n" + gen_err_check('local_err') - ret += "\n" + mcgen('''' + ret += "\n" + mcgen(''' %(marshal_output_call)s ''', marshal_output_call=gen_marshal_output_call(name, ret_type)).rstrip() diff --git a/scripts/qapi.py b/scripts/qapi.py index 06d7fc2..20383ef 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -943,16 +943,21 @@ def pop_indent(indent_amount=4): global indent_level indent_level -= indent_amount +# Generate @code with @kwds interpolated. +# Obey indent_level, and strip eatspace. def cgen(code, **kwds): - indent = genindent(indent_level) - lines = code.split('\n') - lines = map(lambda x: indent + x, lines) - return '\n'.join(lines) % kwds + '\n' - -def mcgen(code, **kwds): - raw = cgen('\n'.join(code.split('\n')[1:-1]), **kwds) + raw = code % kwds + if indent_level: + indent = genindent(indent_level) + raw = re.subn("^.", indent + '\g<0>', raw, 0, re.MULTILINE) + raw = raw[0] return re.sub(re.escape(eatspace) + ' *', '', raw) +def mcgen(code, **kwds): + if code[0] == '\n': + code = code[1:] + return cgen(code, **kwds) + def basename(filename): return filename.split("/")[-1]