Markus Armbruster <arm...@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 <arm...@redhat.com> > Reviewed-by: Eric Blake <ebl...@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]