Eric Blake <ebl...@redhat.com> writes: > Move code from gen_union() into gen_struct_fields() in order for > a later patch to share code when enumerating inherited fields > for struct types. > > No change to generated code. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > > --- > v10: new patch, split off of 5/17 > --- > scripts/qapi-types.py | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py > index 4fe618e..a97cc10 100644 > --- a/scripts/qapi-types.py > +++ b/scripts/qapi-types.py > @@ -51,9 +51,19 @@ def gen_struct_field(name, typ, optional): > return ret > > > -def gen_struct_fields(members): > +def gen_struct_fields(members, base=None): > ret = '' > > + if base: > + ret += mcgen(''' > + /* Members inherited from %(c_name)s: */ > +''', > + c_name=base.c_name()) > + ret += gen_struct_fields(base.members) > + ret += mcgen(''' > + /* Own members: */ > +''') > + > for memb in members: > ret += gen_struct_field(memb.name, memb.type, memb.optional) > return ret > @@ -126,14 +136,7 @@ struct %(c_name)s { > ''', > c_name=c_name(name)) > if base: > - ret += mcgen(''' > - /* Members inherited from %(c_name)s: */ > -''', > - c_name=c_name(base.name)) > - ret += gen_struct_fields(base.members) > - ret += mcgen(''' > - /* Own members: */ > -''') > + ret += gen_struct_fields([], base) > else: > ret += mcgen(''' > %(c_type)s kind;
One baby step towards gen_struct_fields(members, base); which is where we want both gen_struct() and gen_union() to go. Slightly confusing: members are *local* members, while base.members are *all* members. But the same exists elsewhere already, so let's not worry about it. I kind of dislike gen_struct_fields() taking two parameters and calling itself for one, but I guess we can reconsider after gen_struct() and gen_union() are unified. gen_struct_fields() might have just one caller then.