All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v2 17/54] qapi: add 'if' condition on entity objects
Date: Tue, 5 Sep 2017 11:38:00 -0400 (EDT)	[thread overview]
Message-ID: <80558265.8663807.1504625880216.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <87h8wicuhc.fsf@dusky.pond.sub.org>

Hi

----- Original Message -----
> Marc-André Lureau <marcandre.lureau@redhat.com> writes:
> 
> > Take 'if' from expression, and use it to construct entity objects.
> > Shared implicit objects must share the same 'if' condition.
> 
> Shared by what?

Shared by various make_implicit_object_type() users.

> 
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> >  scripts/qapi.py | 81
> >  +++++++++++++++++++++++++++++++++++++--------------------
> >  1 file changed, 53 insertions(+), 28 deletions(-)
> >
> > diff --git a/scripts/qapi.py b/scripts/qapi.py
> > index a94d93ada4..dc40d74abb 100644
> > --- a/scripts/qapi.py
> > +++ b/scripts/qapi.py
> > @@ -992,7 +992,7 @@ def check_exprs(exprs):
> >  #
> >  
> >  class QAPISchemaEntity(object):
> > -    def __init__(self, name, info, doc):
> > +    def __init__(self, name, info, doc, ifcond=None):
> >          assert isinstance(name, str)
> >          self.name = name
> >          # For explicitly defined entities, info points to the (explicit)
> 
> Not visible here: QAPISchemaType inherits this.
> 
> > @@ -1002,6 +1002,7 @@ class QAPISchemaEntity(object):
> >          # such place).
> >          self.info = info
> >          self.doc = doc
> > +        self.ifcond = ifcond
> >  
> >      def c_name(self):
> >          return c_name(self.name)
> > @@ -1118,8 +1119,8 @@ class QAPISchemaBuiltinType(QAPISchemaType):
> >  
> >  
> >  class QAPISchemaEnumType(QAPISchemaType):
> > -    def __init__(self, name, info, doc, values, prefix):
> > -        QAPISchemaType.__init__(self, name, info, doc)
> > +    def __init__(self, name, info, doc, values, prefix, ifcond=None):
> > +        QAPISchemaType.__init__(self, name, info, doc, ifcond)
> >          for v in values:
> >              assert isinstance(v, QAPISchemaMember)
> >              v.set_owner(name)
> > @@ -1162,6 +1163,7 @@ class QAPISchemaArrayType(QAPISchemaType):
> >      def check(self, schema):
> >          self.element_type = schema.lookup_type(self._element_type_name)
> >          assert self.element_type
> > +        self.ifcond = self.element_type.ifcond
> 
> This is subtler than it looks on first glance.
> 
> All the other entities set self.ifcond in their constructor to the true
> value passed in as argument.
> 
> QAPISchemaArrayType doesn't take such an argument.  Instead, it inherits
> its .ifcond from its .element_type.  However, .element_type isn't known
> at construction time if it's a forward reference.  We therefore delay
> setting it until .check() time.  You do the same for .ifcond (no
> choice).
> 
> Before .check(), .ifcond is None, because the constructor sets it that
> way: it calls QAPISchemaType.__init__() without passing a ifcond
> argument, which then sets self.ifcond to its default argument None.
> 
> Pitfall: accessing ent.ifcond before ent.check() works *except* when ent
> is an array type.  Hmm.
> 
> >  
> >      def is_implicit(self):
> >          return True
> > @@ -1183,11 +1185,12 @@ class QAPISchemaArrayType(QAPISchemaType):
> >  
> >  
> >  class QAPISchemaObjectType(QAPISchemaType):
> > -    def __init__(self, name, info, doc, base, local_members, variants):
> > +    def __init__(self, name, info, doc, base, local_members, variants,
> > +                 ifcond=None):
> >          # struct has local_members, optional base, and no variants
> >          # flat union has base, variants, and no local_members
> >          # simple union has local_members, variants, and no base
> > -        QAPISchemaType.__init__(self, name, info, doc)
> > +        QAPISchemaType.__init__(self, name, info, doc, ifcond)
> >          assert base is None or isinstance(base, str)
> >          for m in local_members:
> >              assert isinstance(m, QAPISchemaObjectTypeMember)
> > @@ -1375,8 +1378,8 @@ class
> > QAPISchemaObjectTypeVariant(QAPISchemaObjectTypeMember):
> >  
> >  
> >  class QAPISchemaAlternateType(QAPISchemaType):
> > -    def __init__(self, name, info, doc, variants):
> > -        QAPISchemaType.__init__(self, name, info, doc)
> > +    def __init__(self, name, info, doc, variants, ifcond):
> > +        QAPISchemaType.__init__(self, name, info, doc, ifcond)
> >          assert isinstance(variants, QAPISchemaObjectTypeVariants)
> >          assert variants.tag_member
> >          variants.set_owner(name)
> > @@ -1413,8 +1416,8 @@ class QAPISchemaAlternateType(QAPISchemaType):
> >  
> >  class QAPISchemaCommand(QAPISchemaEntity):
> >      def __init__(self, name, info, doc, arg_type, ret_type,
> > -                 gen, success_response, boxed):
> > -        QAPISchemaEntity.__init__(self, name, info, doc)
> > +                 gen, success_response, boxed, ifcond):
> > +        QAPISchemaEntity.__init__(self, name, info, doc, ifcond)
> >          assert not arg_type or isinstance(arg_type, str)
> >          assert not ret_type or isinstance(ret_type, str)
> >          self._arg_type_name = arg_type
> > @@ -1451,8 +1454,8 @@ class QAPISchemaCommand(QAPISchemaEntity):
> >  
> >  
> >  class QAPISchemaEvent(QAPISchemaEntity):
> > -    def __init__(self, name, info, doc, arg_type, boxed):
> > -        QAPISchemaEntity.__init__(self, name, info, doc)
> > +    def __init__(self, name, info, doc, arg_type, boxed, ifcond):
> > +        QAPISchemaEntity.__init__(self, name, info, doc, ifcond)
> >          assert not arg_type or isinstance(arg_type, str)
> >          self._arg_type_name = arg_type
> >          self.arg_type = None
> 
> Hmm.  You're adding parameter ifcond to all entity constructors.  The
> entity constructors' signatures all look like this:
> 
>     def __init__(<common parameters>, <specific parameters>)
> 
> where <common parameters> is self, name, info, doc.
> 
> Since ifcond is common, let's add it to <common parameters>.  Pick a
> position you like.
> 

ok

> > @@ -1547,11 +1550,11 @@ class QAPISchema(object):
> >      def _make_enum_members(self, values):
> >          return [QAPISchemaMember(v) for v in values]
> >  
> > -    def _make_implicit_enum_type(self, name, info, values):
> > +    def _make_implicit_enum_type(self, name, info, values, ifcond):
> >          # See also QAPISchemaObjectTypeMember._pretty_owner()
> >          name = name + 'Kind'   # Use namespace reserved by add_name()
> >          self._def_entity(QAPISchemaEnumType(
> > -            name, info, None, self._make_enum_members(values), None))
> > +            name, info, None, self._make_enum_members(values), None,
> > ifcond))
> >          return name
> 
> Called by _def_union_type() to create the implicit tag enum, with the
> same ifcond it passes to QAPISchemaObjectType().  Thus, the implicit
> type's ifcond matches the ifcond of its only user.  Good.
> 
> >  
> >      def _make_array_type(self, element_type, info):
> > @@ -1560,22 +1563,29 @@ class QAPISchema(object):
> >              self._def_entity(QAPISchemaArrayType(name, info,
> >              element_type))
> >          return name
> >  
> > -    def _make_implicit_object_type(self, name, info, doc, role, members):
> > +    def _make_implicit_object_type(self, name, info, doc, role, members,
> > +                                   ifcond=None):
> >          if not members:
> >              return None
> >          # See also QAPISchemaObjectTypeMember._pretty_owner()
> >          name = 'q_obj_%s-%s' % (name, role)
> > -        if not self.lookup_entity(name, QAPISchemaObjectType):
> > +        typ = self.lookup_entity(name, QAPISchemaObjectType)
> > +        if typ:
> > +            # FIXME: generating the disjunction of all conditions
> 
> What are "all conditions"?  I hope I can shed some light on that below.
> 
> > +            assert ifcond == typ.ifcond
> > +        else:
> >              self._def_entity(QAPISchemaObjectType(name, info, doc, None,
> > -                                                  members, None))
> > +                                                  members, None, ifcond))
> >          return name
> 
> Several callers:
> 
> * _make_simple_variant() to create a wrapper type, with the wrapped
>   type's ifcond.  The wrapped type's ifcond is necessary for the wrapper
>   type to compile.  It's not sufficient for it to be needed.  The
>   "needed" condition is the disjunction of all users' ifcond.
> 
>   In other words, your code generates condition that is correct, but not
>   tight.  Your FIXME is about tightening it.  I'd make it a TODO,
>   because nothing is actually broken now.
> 
>   Need a comment explaining this.  Perhaps:
> 
>         if typ:
>             # The implicit object type has multiple users.  This can
>             # happen only for simple unions' implicit wrapper types.
>             # Its ifcond should be the disjunction of its user's
>             # ifconds.  Not implemented.  Instead, we always pass the
>             # wrapped type's ifcond, which is trivially the same for all
>             # users.  It's also necessary for the wrapper to compile.
>             # But it's not tight: the disjunction need not imply it.  We
>             # may end up compiling useless wrapper types.
>             # TODO kill simple unions or implement the disjunction
> 
>   I hate simple unions.

ok

> 
> * _def_union_type() to create an implicit base type, with same ifcond it
>   passes to QAPISchemaObjectType().  Thus, the implicit base type's
>   ifcond matches the ifcond of its only user.  Good.
> 
> * _def_command() to create an implicit argument type, with the same
>   ifcond it passes to QAPISchemaCommand().  Thus, the implicit argument
>   type's ifcond matches the ifcond of its only user.  Good.
> 
> * _def_event() likewise.
> 
> I still can't make sense of the commit message's "Shared implicit
> objects must share the same 'if' condition."
> 
> >  
> >      def _def_enum_type(self, expr, info, doc):
> >          name = expr['enum']
> >          data = expr['data']
> >          prefix = expr.get('prefix')
> > +        ifcond = expr.get('if')
> >          self._def_entity(QAPISchemaEnumType(
> > -            name, info, doc, self._make_enum_members(data), prefix))
> > +            name, info, doc, self._make_enum_members(data), prefix,
> > +            ifcond))
> >  
> >      def _make_member(self, name, typ, info):
> >          optional = False
> > @@ -1595,9 +1605,10 @@ class QAPISchema(object):
> >          name = expr['struct']
> >          base = expr.get('base')
> >          data = expr['data']
> > +        ifcond = expr.get('if')
> >          self._def_entity(QAPISchemaObjectType(name, info, doc, base,
> >                                                self._make_members(data,
> >                                                info),
> > -                                              None))
> > +                                              None, ifcond))
> >  
> >      def _make_variant(self, case, typ):
> >          return QAPISchemaObjectTypeVariant(case, typ)
> > @@ -1606,19 +1617,23 @@ class QAPISchema(object):
> >          if isinstance(typ, list):
> >              assert len(typ) == 1
> >              typ = self._make_array_type(typ[0], info)
> > +        type_entity = self.lookup_type(typ)
> >          typ = self._make_implicit_object_type(
> > -            typ, info, None, 'wrapper', [self._make_member('data', typ,
> > info)])
> > +            typ, info, None, 'wrapper',
> > +            [self._make_member('data', typ, info)], type_entity.ifcond)
> >          return QAPISchemaObjectTypeVariant(case, typ)
> 
> This is where you create the wrapper type with the wrapped type's
> ifcond.
> 
> I don't like the name type_entity.  I'd simply eliminate the variable.
> 

ok

> >  
> >      def _def_union_type(self, expr, info, doc):
> >          name = expr['union']
> >          data = expr['data']
> >          base = expr.get('base')
> > +        ifcond = expr.get('if')
> >          tag_name = expr.get('discriminator')
> >          tag_member = None
> >          if isinstance(base, dict):
> > -            base = (self._make_implicit_object_type(
> > -                name, info, doc, 'base', self._make_members(base, info)))
> > +            base = self._make_implicit_object_type(
> > +                name, info, doc, 'base', self._make_members(base, info),
> > +                ifcond)
> >          if tag_name:
> >              variants = [self._make_variant(key, value)
> >                          for (key, value) in data.iteritems()]
> 
> This is where you create a union's implicit base type with the union's
> ifcond.
> 
> > @@ -1627,18 +1642,21 @@ class QAPISchema(object):
> >              variants = [self._make_simple_variant(key, value, info)
> >                          for (key, value) in data.iteritems()]
> >              typ = self._make_implicit_enum_type(name, info,
> > -                                                [v.name for v in
> > variants])
> > +                                                [v.name for v in
> > variants],
> > +                                                ifcond)
> >              tag_member = QAPISchemaObjectTypeMember('type', typ, False)
> >              members = [tag_member]
> 
> This is where you create a union's implicit tag enum with the union's ifcond.
> 
> >          self._def_entity(
> >              QAPISchemaObjectType(name, info, doc, base, members,
> >                                   QAPISchemaObjectTypeVariants(tag_name,
> >                                                                tag_member,
> > -                                                              variants)))
> > +                                                              variants),
> > +                                 ifcond))
> >  
> >      def _def_alternate_type(self, expr, info, doc):
> >          name = expr['alternate']
> >          data = expr['data']
> > +        ifcond = expr.get('if')
> >          variants = [self._make_variant(key, value)
> >                      for (key, value) in data.iteritems()]
> >          tag_member = QAPISchemaObjectTypeMember('type', 'QType', False)
> > @@ -1646,7 +1664,8 @@ class QAPISchema(object):
> >              QAPISchemaAlternateType(name, info, doc,
> >                                      QAPISchemaObjectTypeVariants(None,
> >                                                                   tag_member,
> > -
> > variants)))
> > +
> > variants),
> > +                                    ifcond))
> >  
> >      def _def_command(self, expr, info, doc):
> >          name = expr['command']
> > @@ -1655,23 +1674,29 @@ class QAPISchema(object):
> >          gen = expr.get('gen', True)
> >          success_response = expr.get('success-response', True)
> >          boxed = expr.get('boxed', False)
> > +        ifcond = expr.get('if')
> >          if isinstance(data, OrderedDict):
> >              data = self._make_implicit_object_type(
> > -                name, info, doc, 'arg', self._make_members(data, info))
> > +                name, info, doc, 'arg', self._make_members(data, info),
> > +                ifcond)
> 
> This is where you create a command's implicit argument type with the
> command's ifcond.
> 
> >          if isinstance(rets, list):
> >              assert len(rets) == 1
> >              rets = self._make_array_type(rets[0], info)
> >          self._def_entity(QAPISchemaCommand(name, info, doc, data, rets,
> > -                                           gen, success_response, boxed))
> > +                                           gen, success_response, boxed,
> > +                                           ifcond))
> >  
> >      def _def_event(self, expr, info, doc):
> >          name = expr['event']
> >          data = expr.get('data')
> >          boxed = expr.get('boxed', False)
> > +        ifcond = expr.get('if')
> >          if isinstance(data, OrderedDict):
> >              data = self._make_implicit_object_type(
> > -                name, info, doc, 'arg', self._make_members(data, info))
> > -        self._def_entity(QAPISchemaEvent(name, info, doc, data, boxed))
> > +                name, info, doc, 'arg', self._make_members(data, info),
> > +                ifcond)
> 
> This is where you create an event's implicit argument type with the
> event's ifcond.
> 
> > +        self._def_entity(QAPISchemaEvent(name, info, doc, data, boxed,
> > +                                         ifcond))
> >  
> >      def _def_exprs(self):
> >          for expr_elem in self.exprs:
> 

  reply	other threads:[~2017-09-05 15:38 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-22 13:22 [Qemu-devel] [PATCH v2 00/54] qapi: add #if pre-processor conditions to generated code Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 01/54] qapi: fix type_seen key error Marc-André Lureau
2017-08-22 15:00   ` Markus Armbruster
2017-08-22 15:50     ` Marc-André Lureau
2017-08-22 16:40       ` Markus Armbruster
2017-08-25  6:02   ` Markus Armbruster
2017-08-25 12:57     ` Eduardo Habkost
2017-08-25 14:12       ` Marc-André Lureau
2017-08-28 10:52         ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 02/54] qdict: add qdict_put_null() helper Marc-André Lureau
2017-08-22 15:09   ` Markus Armbruster
2017-08-25 15:46     ` Eric Blake
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 03/54] qobject: add literal qobject type Marc-André Lureau
2017-08-22 15:31   ` Markus Armbruster
2017-08-22 15:42     ` Marc-André Lureau
2017-08-22 16:24       ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 04/54] qlit: add qobject_form_qlit() Marc-André Lureau
2017-08-22 15:40   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 05/54] qapi: generate a literal qobject for introspection Marc-André Lureau
2017-08-22 16:33   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 06/54] qapi: introduce qapi_enum_lookup() Marc-André Lureau
2017-08-22 18:10   ` John Snow
2017-08-23  8:02   ` Markus Armbruster
2017-08-23 10:10     ` Marc-André Lureau
2017-08-24 11:14       ` Dr. David Alan Gilbert
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 07/54] tpm: simplify driver registration & lookup Marc-André Lureau
2017-08-23  9:04   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 08/54] hmp: use qapi_enum_parse() in hmp_migrate_set_capability Marc-André Lureau
2017-08-23  9:34   ` Markus Armbruster
2017-08-24 11:29   ` Dr. David Alan Gilbert
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 09/54] hmp: use qapi_enum_parse() in hmp_migrate_set_parameter Marc-André Lureau
2017-08-23  9:43   ` Markus Armbruster
2017-08-24 13:16     ` Dr. David Alan Gilbert
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 10/54] block: use qemu_enum_parse() in blkdebug_debug_breakpoint Marc-André Lureau
2017-08-23 10:05   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 11/54] quorum: use qapi_enum_parse() in quorum_open Marc-André Lureau
2017-08-22 13:40   ` Alberto Garcia
2017-08-23 11:15     ` Markus Armbruster
2017-08-23 11:24   ` Markus Armbruster
2017-08-23 11:53     ` Alberto Garcia
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 12/54] qapi: change enum lookup structure Marc-André Lureau
2017-08-23 12:09   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 13/54] qapi: drop the sentinel in enum array Marc-André Lureau
2017-08-23 12:37   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 14/54] qapi2texi: minor python code simplification Marc-André Lureau
2017-08-22 13:56   ` Philippe Mathieu-Daudé
2017-09-01 15:49   ` Markus Armbruster
2017-09-04  8:18     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 15/54] qapi: add 'if' to top-level expressions Marc-André Lureau
2017-09-04 13:27   ` Markus Armbruster
2017-09-05 13:58     ` Marc-André Lureau
2017-09-06 11:36       ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 16/54] qapi: add a test for invalid 'if' Marc-André Lureau
2017-09-04 13:31   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 17/54] qapi: add 'if' condition on entity objects Marc-André Lureau
2017-09-04 16:13   ` Markus Armbruster
2017-09-05 15:38     ` Marc-André Lureau [this message]
2017-09-05 16:31       ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 18/54] qapi: add 'ifcond' to visitor methods Marc-André Lureau
2017-09-04 16:47   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 19/54] qapi: add #if/#endif helpers Marc-André Lureau
2017-09-05  9:32   ` Markus Armbruster
2017-09-06 15:19     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 20/54] qapi-introspect: modify to_qlit() to take an optional suffix Marc-André Lureau
2017-09-05  9:42   ` Markus Armbruster
2017-09-06 14:02     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 21/54] qapi-introspect: modify to_qlit() to generate #if code Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 22/54] qapi-introspect: add preprocessor conditions to generated QLit Marc-André Lureau
2017-09-05 14:24   ` Markus Armbruster
2017-09-05 16:24     ` Marc-André Lureau
2017-09-06 11:38   ` Markus Armbruster
2017-09-06 14:26     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 23/54] qapi-commands: add #if conditions to commands Marc-André Lureau
2017-09-05 14:53   ` Markus Armbruster
2017-09-05 15:05     ` Marc-André Lureau
2017-09-05 15:08       ` Marc-André Lureau
2017-09-05 16:34         ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 24/54] qapi-event: add #if conditions to events Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 25/54] qapi-visit: add #if conditions to visitors Marc-André Lureau
2017-09-06 10:54   ` Markus Armbruster
2017-09-06 14:22     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 26/54] qapi-types: refactor variants handling Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 27/54] qapi-types: add #if conditions to types Marc-André Lureau
2017-09-06 11:43   ` Markus Armbruster
2017-09-06 14:56     ` Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 28/54] qapi: do not define enumeration value explicitely Marc-André Lureau
2017-08-22 14:00   ` Philippe Mathieu-Daudé
2017-09-05 17:45   ` Markus Armbruster
2017-09-06 12:09     ` Marc-André Lureau
2017-09-06 13:39       ` Markus Armbruster
2017-09-06 13:55         ` Marc-André Lureau
2017-09-06 15:20           ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 29/54] qapi: add 'if' to enum members Marc-André Lureau
2017-09-06 13:01   ` Markus Armbruster
2017-09-07 14:11     ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 30/54] qapi: add #if conditions on generated enum values Marc-André Lureau
2017-09-06 15:38   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 31/54] tests: add some enum members tests Marc-André Lureau
2017-09-06 15:41   ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 32/54] qapi: add 'if' to struct members Marc-André Lureau
2017-09-07 14:26   ` Markus Armbruster
2017-09-07 15:30     ` Marc-André Lureau
2017-09-07 15:52       ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 33/54] qapi: add some struct member tests Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 34/54] qapi: add #if conditions to generated struct members Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 35/54] qapi: add 'if' on union variants Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 36/54] qapi: add #if conditions to generated variants Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 37/54] qapi: 'if' to alternate variant Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 38/54] qapi: add tests for invalid alternate Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 39/54] qapi: add #if conditions to generated alternate variants Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 40/54] docs: document schema configuration Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 41/54] qapi2texi: add 'If:' section to generated documentation Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 42/54] qapi2texi: add 'If:' condition to enum values Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 43/54] qapi2texi: add 'If:' condition to struct members Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 44/54] qapi2texi: add condition to variants Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 45/54] qapi: add conditions to VNC type/commands/events on the schema Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 46/54] qapi: add conditions to SPICE " Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 47/54] qapi: add conditions to REPLICATION type/commands " Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 48/54] tests/qmp-test: add query-qmp-schema test Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 49/54] build-sys: make qemu qapi objects per-target Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 50/54] qapi: make rtc-reset-reinjection depend on TARGET_I386 Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 51/54] qapi: make s390 commands depend on TARGET_S390X Marc-André Lureau
2017-08-22 14:24   ` Cornelia Huck
2017-08-22 14:25     ` David Hildenbrand
2017-08-22 14:41       ` Marc-André Lureau
2017-08-22 15:14         ` Cornelia Huck
2017-08-22 15:46           ` Marc-André Lureau
2017-08-22 15:58       ` Markus Armbruster
2017-08-22 16:01         ` David Hildenbrand
2017-08-22 16:25           ` Markus Armbruster
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 52/54] qapi: make query-gic-capabilities depend on TARGET_ARM Marc-André Lureau
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 53/54] qapi: make query-cpu-model-expansion depend on s390 or x86 Marc-André Lureau
2017-08-22 18:42   ` Eduardo Habkost
2017-08-23 10:21     ` Marc-André Lureau
2017-08-23 12:57       ` Eduardo Habkost
2017-08-23 13:58         ` Marc-André Lureau
2017-08-23 14:13           ` Eduardo Habkost
2017-08-22 13:22 ` [Qemu-devel] [PATCH v2 54/54] qapi: make query-cpu-definitions depend on specific targets Marc-André Lureau
2017-08-22 13:22   ` Marc-André Lureau
2017-08-22 14:47 ` [Qemu-devel] [PATCH v2 00/54] qapi: add #if pre-processor conditions to generated code no-reply
2017-08-23 12:46 ` Markus Armbruster

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=80558265.8663807.1504625880216.JavaMail.zimbra@redhat.com \
    --to=marcandre.lureau@redhat.com \
    --cc=armbru@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /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.