Re: [Qemu-devel] [PATCH v2 16/29] qapi: Generate in source order
Quoting Markus Armbruster (2018-02-11 03:35:54) > The generators' conversion to visitors (merge commit 9e72681d16) > changed the processing order of entities from source order to > alphabetical order. The next commit needs source order, so change it > back. > > Signed-off-by: Markus Armbruster> Reviewed-by: Marc-André Lureau Reviewed-by: Michael Roth > --- > scripts/qapi/common.py | 6 +- > tests/qapi-schema/comments.out | 2 +- > tests/qapi-schema/doc-bad-section.out| 4 +- > tests/qapi-schema/doc-good.out | 32 ++-- > tests/qapi-schema/empty.out | 2 +- > tests/qapi-schema/event-case.out | 2 +- > tests/qapi-schema/ident-with-escape.out | 6 +- > tests/qapi-schema/include-relpath.out| 2 +- > tests/qapi-schema/include-repetition.out | 2 +- > tests/qapi-schema/include-simple.out | 2 +- > tests/qapi-schema/indented-expr.out | 2 +- > tests/qapi-schema/qapi-schema-test.out | 320 > +++ > 12 files changed, 192 insertions(+), 190 deletions(-) > > diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py > index 6d49709784..b531ab519f 100644 > --- a/scripts/qapi/common.py > +++ b/scripts/qapi/common.py > @@ -1475,6 +1475,7 @@ class QAPISchema(object): > parser = QAPISchemaParser(open(fname, 'r')) > exprs = check_exprs(parser.exprs) > self.docs = parser.docs > +self._entity_list = [] > self._entity_dict = {} > self._predefining = True > self._def_predefineds() > @@ -1486,6 +1487,7 @@ class QAPISchema(object): > # Only the predefined types are allowed to not have info > assert ent.info or self._predefining > assert ent.name not in self._entity_dict > +self._entity_list.append(ent) > self._entity_dict[ent.name] = ent > > def lookup_entity(self, name, typ=None): > @@ -1684,12 +1686,12 @@ class QAPISchema(object): > assert False > > def check(self): > -for (name, ent) in sorted(self._entity_dict.items()): > +for ent in self._entity_list: > ent.check(self) > > def visit(self, visitor): > visitor.visit_begin(self) > -for (name, entity) in sorted(self._entity_dict.items()): > +for entity in self._entity_list: > if visitor.visit_needed(entity): > entity.visit(visitor) > visitor.visit_end() > diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out > index 17e652535c..0261ddf202 100644 > --- a/tests/qapi-schema/comments.out > +++ b/tests/qapi-schema/comments.out > @@ -1,4 +1,4 @@ > +object q_empty > enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] > prefix QTYPE > enum Status ['good', 'bad', 'ugly'] > -object q_empty > diff --git a/tests/qapi-schema/doc-bad-section.out > b/tests/qapi-schema/doc-bad-section.out > index 089bde1381..23bf8c71ab 100644 > --- a/tests/qapi-schema/doc-bad-section.out > +++ b/tests/qapi-schema/doc-bad-section.out > @@ -1,7 +1,7 @@ > -enum Enum ['one', 'two'] > +object q_empty > enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] > prefix QTYPE > -object q_empty > +enum Enum ['one', 'two'] > doc symbol=Enum > body= > == Produces *invalid* texinfo > diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out > index 1d2c250527..0c07301f07 100644 > --- a/tests/qapi-schema/doc-good.out > +++ b/tests/qapi-schema/doc-good.out > @@ -1,35 +1,35 @@ > +object q_empty > +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] > +prefix QTYPE > +enum Enum ['one', 'two'] > object Base > member base1: Enum optional=False > -enum Enum ['one', 'two'] > +object Variant1 > +member var1: str optional=False > +object Variant2 > object Object > base Base > tag base1 > case one: Variant1 > case two: Variant2 > -enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] > -prefix QTYPE > +object q_obj_Variant1-wrapper > +member data: Variant1 optional=False > +object q_obj_Variant2-wrapper > +member data: Variant2 optional=False > +enum SugaredUnionKind ['one', 'two'] > object SugaredUnion > member type: SugaredUnionKind optional=False > tag type > case one: q_obj_Variant1-wrapper > case two: q_obj_Variant2-wrapper > -enum SugaredUnionKind ['one', 'two'] > -object Variant1 > -member var1: str optional=False > -object Variant2 > -command cmd q_obj_cmd-arg -> Object > - gen=True success_response=True boxed=False > -command cmd-boxed Object -> None > - gen=True success_response=True boxed=True > -object q_empty > -object q_obj_Variant1-wrapper > -member data: Variant1 optional=False > -object q_obj_Variant2-wrapper > -member data: Variant2 optional=False
Re: [Qemu-devel] [PATCH v2 16/29] qapi: Generate in source order
On 02/11/2018 03:35 AM, Markus Armbruster wrote: The generators' conversion to visitors (merge commit 9e72681d16) changed the processing order of entities from source order to alphabetical order. The next commit needs source order, so change it back. Signed-off-by: Markus ArmbrusterReviewed-by: Marc-André Lureau --- Reviewed-by: Eric Blake -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
[Qemu-devel] [PATCH v2 16/29] qapi: Generate in source order
The generators' conversion to visitors (merge commit 9e72681d16) changed the processing order of entities from source order to alphabetical order. The next commit needs source order, so change it back. Signed-off-by: Markus ArmbrusterReviewed-by: Marc-André Lureau --- scripts/qapi/common.py | 6 +- tests/qapi-schema/comments.out | 2 +- tests/qapi-schema/doc-bad-section.out| 4 +- tests/qapi-schema/doc-good.out | 32 ++-- tests/qapi-schema/empty.out | 2 +- tests/qapi-schema/event-case.out | 2 +- tests/qapi-schema/ident-with-escape.out | 6 +- tests/qapi-schema/include-relpath.out| 2 +- tests/qapi-schema/include-repetition.out | 2 +- tests/qapi-schema/include-simple.out | 2 +- tests/qapi-schema/indented-expr.out | 2 +- tests/qapi-schema/qapi-schema-test.out | 320 +++ 12 files changed, 192 insertions(+), 190 deletions(-) diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 6d49709784..b531ab519f 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -1475,6 +1475,7 @@ class QAPISchema(object): parser = QAPISchemaParser(open(fname, 'r')) exprs = check_exprs(parser.exprs) self.docs = parser.docs +self._entity_list = [] self._entity_dict = {} self._predefining = True self._def_predefineds() @@ -1486,6 +1487,7 @@ class QAPISchema(object): # Only the predefined types are allowed to not have info assert ent.info or self._predefining assert ent.name not in self._entity_dict +self._entity_list.append(ent) self._entity_dict[ent.name] = ent def lookup_entity(self, name, typ=None): @@ -1684,12 +1686,12 @@ class QAPISchema(object): assert False def check(self): -for (name, ent) in sorted(self._entity_dict.items()): +for ent in self._entity_list: ent.check(self) def visit(self, visitor): visitor.visit_begin(self) -for (name, entity) in sorted(self._entity_dict.items()): +for entity in self._entity_list: if visitor.visit_needed(entity): entity.visit(visitor) visitor.visit_end() diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out index 17e652535c..0261ddf202 100644 --- a/tests/qapi-schema/comments.out +++ b/tests/qapi-schema/comments.out @@ -1,4 +1,4 @@ +object q_empty enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE enum Status ['good', 'bad', 'ugly'] -object q_empty diff --git a/tests/qapi-schema/doc-bad-section.out b/tests/qapi-schema/doc-bad-section.out index 089bde1381..23bf8c71ab 100644 --- a/tests/qapi-schema/doc-bad-section.out +++ b/tests/qapi-schema/doc-bad-section.out @@ -1,7 +1,7 @@ -enum Enum ['one', 'two'] +object q_empty enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE -object q_empty +enum Enum ['one', 'two'] doc symbol=Enum body= == Produces *invalid* texinfo diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out index 1d2c250527..0c07301f07 100644 --- a/tests/qapi-schema/doc-good.out +++ b/tests/qapi-schema/doc-good.out @@ -1,35 +1,35 @@ +object q_empty +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] +prefix QTYPE +enum Enum ['one', 'two'] object Base member base1: Enum optional=False -enum Enum ['one', 'two'] +object Variant1 +member var1: str optional=False +object Variant2 object Object base Base tag base1 case one: Variant1 case two: Variant2 -enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] -prefix QTYPE +object q_obj_Variant1-wrapper +member data: Variant1 optional=False +object q_obj_Variant2-wrapper +member data: Variant2 optional=False +enum SugaredUnionKind ['one', 'two'] object SugaredUnion member type: SugaredUnionKind optional=False tag type case one: q_obj_Variant1-wrapper case two: q_obj_Variant2-wrapper -enum SugaredUnionKind ['one', 'two'] -object Variant1 -member var1: str optional=False -object Variant2 -command cmd q_obj_cmd-arg -> Object - gen=True success_response=True boxed=False -command cmd-boxed Object -> None - gen=True success_response=True boxed=True -object q_empty -object q_obj_Variant1-wrapper -member data: Variant1 optional=False -object q_obj_Variant2-wrapper -member data: Variant2 optional=False object q_obj_cmd-arg member arg1: int optional=False member arg2: str optional=True member arg3: bool optional=False +command cmd q_obj_cmd-arg -> Object + gen=True success_response=True boxed=False +command cmd-boxed Object -> None + gen=True success_response=True boxed=True doc freeform body= = Section diff --git