Re: [Qemu-devel] [PATCH v2 05/29] qapi: New classes QAPIGenC, QAPIGenH, QAPIGenDoc

2018-02-23 Thread Markus Armbruster
Michael Roth  writes:

> Quoting Markus Armbruster (2018-02-11 03:35:43)
>> These classes encapsulate accumulating and writing output.
>> 
>> Convert C code generation to QAPIGenC and QAPIGenH.  The conversion is
>> rather shallow: most of the output accumulation is not converted.
>> Left for later.
>> 
>> The indentation machinery uses a single global variable indent_level,
>> even though we generally interleave creation of a .c and its .h.  It
>> should become instance variable of QAPIGenC.  Also left for later.
>> 
>> Documentation generation isn't converted, and QAPIGenDoc isn't used.
>> This will change shortly.
>> 
>> Signed-off-by: Markus Armbruster 
>> Reviewed-by: Eric Blake 
>> Reviewed-by: Marc-André Lureau 
>
> 2 minor nits below, but in any case:
>
> Reviewed-by: Michael Roth 
>
>> ---
>>  scripts/qapi-commands.py   | 23 +--
>>  scripts/qapi-event.py  | 22 ++-
>>  scripts/qapi-introspect.py | 18 +
>>  scripts/qapi-types.py  | 22 ++-
>>  scripts/qapi-visit.py  | 22 ++-
>>  scripts/qapi.py| 99 
>> +-
>>  6 files changed, 112 insertions(+), 94 deletions(-)
>> 
>> diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
>> index c3aa52fce1..8d38ade076 100644
>> --- a/scripts/qapi-commands.py
>> +++ b/scripts/qapi-commands.py
>> @@ -260,12 +260,10 @@ blurb = '''
>>   * Schema-defined QAPI/QMP commands
>>  '''
>> 
>> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
>> -'qmp-marshal.c', 'qmp-commands.h',
>> -blurb, __doc__)
>> -
>> -fdef.write(mcgen('''
>> +genc = QAPIGenC(blurb, __doc__)
>> +genh = QAPIGenH(blurb, __doc__)
>> 
>> +genc.add(mcgen('''
>>  #include "qemu/osdep.h"
>>  #include "qemu-common.h"
>>  #include "qemu/module.h"
>> @@ -280,20 +278,23 @@ fdef.write(mcgen('''
>>  #include "%(prefix)sqmp-commands.h"
>> 
>>  ''',
>> - prefix=prefix))
>> +   prefix=prefix))
>> 
>> -fdecl.write(mcgen('''
>> +genh.add(mcgen('''
>>  #include "%(prefix)sqapi-types.h"
>>  #include "qapi/qmp/dispatch.h"
>> 
>>  void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
>>  ''',
>> -  prefix=prefix, c_prefix=c_name(prefix, protect=False)))
>> +   prefix=prefix, c_prefix=c_name(prefix, protect=False)))
>> 
>>  schema = QAPISchema(input_file)
>>  vis = QAPISchemaGenCommandVisitor()
>>  schema.visit(vis)
>> -fdef.write(vis.defn)
>> -fdecl.write(vis.decl)
>> +genc.add(vis.defn)
>> +genh.add(vis.decl)
>> 
>> -close_output(fdef, fdecl)
>> +if do_c:
>> +genc.write(output_dir, prefix + 'qmp-marshal.c')
>> +if do_h:
>> +genh.write(output_dir, prefix + 'qmp-commands.h')
>> diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
>> index edb9ddb650..bd7a9be3dc 100644
>> --- a/scripts/qapi-event.py
>> +++ b/scripts/qapi-event.py
>> @@ -176,11 +176,10 @@ blurb = '''
>>   * Schema-defined QAPI/QMP events
>>  '''
>> 
>> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
>> -'qapi-event.c', 'qapi-event.h',
>> -blurb, __doc__)
>> +genc = QAPIGenC(blurb, __doc__)
>> +genh = QAPIGenH(blurb, __doc__)
>> 
>> -fdef.write(mcgen('''
>> +genc.add(mcgen('''
>>  #include "qemu/osdep.h"
>>  #include "qemu-common.h"
>>  #include "%(prefix)sqapi-event.h"
>> @@ -191,21 +190,24 @@ fdef.write(mcgen('''
>>  #include "qapi/qmp-event.h"
>> 
>>  ''',
>> - prefix=prefix))
>> +   prefix=prefix))
>> 
>> -fdecl.write(mcgen('''
>> +genh.add(mcgen('''
>>  #include "qapi/util.h"
>>  #include "%(prefix)sqapi-types.h"
>> 
>>  ''',
>> -  prefix=prefix))
>> +   prefix=prefix))
>> 
>>  event_enum_name = c_name(prefix + 'QAPIEvent', protect=False)
>> 
>>  schema = QAPISchema(input_file)
>>  vis = QAPISchemaGenEventVisitor()
>>  schema.visit(vis)
>> -fdef.write(vis.defn)
>> -fdecl.write(vis.decl)
>> +genc.add(vis.defn)
>> +genh.add(vis.decl)
>> 
>> -close_output(fdef, fdecl)
>> +if do_c:
>> +genc.write(output_dir, prefix + 'qapi-event.c')
>> +if do_h:
>> +genh.write(output_dir, prefix + 'qapi-event.h')
>> diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py
>> index ebe8706f41..3d65690fe3 100644
>> --- a/scripts/qapi-introspect.py
>> +++ b/scripts/qapi-introspect.py
>> @@ -181,21 +181,23 @@ blurb = '''
>>   * QAPI/QMP schema introspection
>>  '''
>> 
>> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
>> -'qmp-introspect.c', 'qmp-introspect.h',
>> -blurb, __doc__)
>> +genc = QAPIGenC(blurb, __doc__)
>> +genh = QAPIGenH(blurb, __doc__)
>> 
>> -fdef.write(mcgen('''
>> +genc.add(mcgen('''
>>  #include "qemu/osdep.h"
>>  #include "%(prefix)sqmp-introspect.h"
>> 
>>  ''',
>> -

Re: [Qemu-devel] [PATCH v2 05/29] qapi: New classes QAPIGenC, QAPIGenH, QAPIGenDoc

2018-02-19 Thread Michael Roth
Quoting Markus Armbruster (2018-02-11 03:35:43)
> These classes encapsulate accumulating and writing output.
> 
> Convert C code generation to QAPIGenC and QAPIGenH.  The conversion is
> rather shallow: most of the output accumulation is not converted.
> Left for later.
> 
> The indentation machinery uses a single global variable indent_level,
> even though we generally interleave creation of a .c and its .h.  It
> should become instance variable of QAPIGenC.  Also left for later.
> 
> Documentation generation isn't converted, and QAPIGenDoc isn't used.
> This will change shortly.
> 
> Signed-off-by: Markus Armbruster 
> Reviewed-by: Eric Blake 
> Reviewed-by: Marc-André Lureau 

2 minor nits below, but in any case:

Reviewed-by: Michael Roth 

> ---
>  scripts/qapi-commands.py   | 23 +--
>  scripts/qapi-event.py  | 22 ++-
>  scripts/qapi-introspect.py | 18 +
>  scripts/qapi-types.py  | 22 ++-
>  scripts/qapi-visit.py  | 22 ++-
>  scripts/qapi.py| 99 
> +-
>  6 files changed, 112 insertions(+), 94 deletions(-)
> 
> diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
> index c3aa52fce1..8d38ade076 100644
> --- a/scripts/qapi-commands.py
> +++ b/scripts/qapi-commands.py
> @@ -260,12 +260,10 @@ blurb = '''
>   * Schema-defined QAPI/QMP commands
>  '''
> 
> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
> -'qmp-marshal.c', 'qmp-commands.h',
> -blurb, __doc__)
> -
> -fdef.write(mcgen('''
> +genc = QAPIGenC(blurb, __doc__)
> +genh = QAPIGenH(blurb, __doc__)
> 
> +genc.add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
>  #include "qemu/module.h"
> @@ -280,20 +278,23 @@ fdef.write(mcgen('''
>  #include "%(prefix)sqmp-commands.h"
> 
>  ''',
> - prefix=prefix))
> +   prefix=prefix))
> 
> -fdecl.write(mcgen('''
> +genh.add(mcgen('''
>  #include "%(prefix)sqapi-types.h"
>  #include "qapi/qmp/dispatch.h"
> 
>  void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
>  ''',
> -  prefix=prefix, c_prefix=c_name(prefix, protect=False)))
> +   prefix=prefix, c_prefix=c_name(prefix, protect=False)))
> 
>  schema = QAPISchema(input_file)
>  vis = QAPISchemaGenCommandVisitor()
>  schema.visit(vis)
> -fdef.write(vis.defn)
> -fdecl.write(vis.decl)
> +genc.add(vis.defn)
> +genh.add(vis.decl)
> 
> -close_output(fdef, fdecl)
> +if do_c:
> +genc.write(output_dir, prefix + 'qmp-marshal.c')
> +if do_h:
> +genh.write(output_dir, prefix + 'qmp-commands.h')
> diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
> index edb9ddb650..bd7a9be3dc 100644
> --- a/scripts/qapi-event.py
> +++ b/scripts/qapi-event.py
> @@ -176,11 +176,10 @@ blurb = '''
>   * Schema-defined QAPI/QMP events
>  '''
> 
> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
> -'qapi-event.c', 'qapi-event.h',
> -blurb, __doc__)
> +genc = QAPIGenC(blurb, __doc__)
> +genh = QAPIGenH(blurb, __doc__)
> 
> -fdef.write(mcgen('''
> +genc.add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
>  #include "%(prefix)sqapi-event.h"
> @@ -191,21 +190,24 @@ fdef.write(mcgen('''
>  #include "qapi/qmp-event.h"
> 
>  ''',
> - prefix=prefix))
> +   prefix=prefix))
> 
> -fdecl.write(mcgen('''
> +genh.add(mcgen('''
>  #include "qapi/util.h"
>  #include "%(prefix)sqapi-types.h"
> 
>  ''',
> -  prefix=prefix))
> +   prefix=prefix))
> 
>  event_enum_name = c_name(prefix + 'QAPIEvent', protect=False)
> 
>  schema = QAPISchema(input_file)
>  vis = QAPISchemaGenEventVisitor()
>  schema.visit(vis)
> -fdef.write(vis.defn)
> -fdecl.write(vis.decl)
> +genc.add(vis.defn)
> +genh.add(vis.decl)
> 
> -close_output(fdef, fdecl)
> +if do_c:
> +genc.write(output_dir, prefix + 'qapi-event.c')
> +if do_h:
> +genh.write(output_dir, prefix + 'qapi-event.h')
> diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py
> index ebe8706f41..3d65690fe3 100644
> --- a/scripts/qapi-introspect.py
> +++ b/scripts/qapi-introspect.py
> @@ -181,21 +181,23 @@ blurb = '''
>   * QAPI/QMP schema introspection
>  '''
> 
> -(fdef, fdecl) = open_output(output_dir, do_c, do_h, prefix,
> -'qmp-introspect.c', 'qmp-introspect.h',
> -blurb, __doc__)
> +genc = QAPIGenC(blurb, __doc__)
> +genh = QAPIGenH(blurb, __doc__)
> 
> -fdef.write(mcgen('''
> +genc.add(mcgen('''
>  #include "qemu/osdep.h"
>  #include "%(prefix)sqmp-introspect.h"
> 
>  ''',
> - prefix=prefix))
> +   prefix=prefix))
> 
>  schema = QAPISchema(input_file)
>  vis = QAPISchemaGenIntrospectVisitor(opt_unmask)
>  schema.visit(vis)
> -fdef.write(vis.defn)
>