Commit fbf09a2f authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Markus Armbruster
Browse files

qapi: add 'ifcond' to visitor methods



Modify the test visitor to check correct passing of values.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <20180703155648.11933-5-marcandre.lureau@redhat.com>
[Accidental change to roms/seabios dropped]
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 4fca21c1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
                       c_prefix=c_name(self._prefix, protect=False)))
        genc.add(gen_registry(self._regy, self._prefix))

    def visit_command(self, name, info, arg_type, ret_type, gen,
    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
                      success_response, boxed, allow_oob, allow_preconfig):
        if not gen:
            return
+17 −14
Original line number Diff line number Diff line
@@ -1062,26 +1062,26 @@ class QAPISchemaVisitor(object):
    def visit_builtin_type(self, name, info, json_type):
        pass

    def visit_enum_type(self, name, info, values, prefix):
    def visit_enum_type(self, name, info, ifcond, values, prefix):
        pass

    def visit_array_type(self, name, info, element_type):
    def visit_array_type(self, name, info, ifcond, element_type):
        pass

    def visit_object_type(self, name, info, base, members, variants):
    def visit_object_type(self, name, info, ifcond, base, members, variants):
        pass

    def visit_object_type_flat(self, name, info, members, variants):
    def visit_object_type_flat(self, name, info, ifcond, members, variants):
        pass

    def visit_alternate_type(self, name, info, variants):
    def visit_alternate_type(self, name, info, ifcond, variants):
        pass

    def visit_command(self, name, info, arg_type, ret_type, gen,
    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
                      success_response, boxed, allow_oob, allow_preconfig):
        pass

    def visit_event(self, name, info, arg_type, boxed):
    def visit_event(self, name, info, ifcond, arg_type, boxed):
        pass


@@ -1191,7 +1191,7 @@ class QAPISchemaEnumType(QAPISchemaType):
        return 'string'

    def visit(self, visitor):
        visitor.visit_enum_type(self.name, self.info,
        visitor.visit_enum_type(self.name, self.info, self.ifcond,
                                self.member_names(), self.prefix)


@@ -1225,7 +1225,8 @@ class QAPISchemaArrayType(QAPISchemaType):
        return 'array of ' + elt_doc_type

    def visit(self, visitor):
        visitor.visit_array_type(self.name, self.info, self.element_type)
        visitor.visit_array_type(self.name, self.info, self.ifcond,
                                 self.element_type)


class QAPISchemaObjectType(QAPISchemaType):
@@ -1307,9 +1308,9 @@ class QAPISchemaObjectType(QAPISchemaType):
        return 'object'

    def visit(self, visitor):
        visitor.visit_object_type(self.name, self.info,
        visitor.visit_object_type(self.name, self.info, self.ifcond,
                                  self.base, self.local_members, self.variants)
        visitor.visit_object_type_flat(self.name, self.info,
        visitor.visit_object_type_flat(self.name, self.info, self.ifcond,
                                       self.members, self.variants)


@@ -1462,7 +1463,8 @@ class QAPISchemaAlternateType(QAPISchemaType):
        return 'value'

    def visit(self, visitor):
        visitor.visit_alternate_type(self.name, self.info, self.variants)
        visitor.visit_alternate_type(self.name, self.info, self.ifcond,
                                     self.variants)

    def is_empty(self):
        return False
@@ -1505,7 +1507,7 @@ class QAPISchemaCommand(QAPISchemaEntity):
            assert isinstance(self.ret_type, QAPISchemaType)

    def visit(self, visitor):
        visitor.visit_command(self.name, self.info,
        visitor.visit_command(self.name, self.info, self.ifcond,
                              self.arg_type, self.ret_type,
                              self.gen, self.success_response,
                              self.boxed, self.allow_oob,
@@ -1538,7 +1540,8 @@ class QAPISchemaEvent(QAPISchemaEntity):
            raise QAPISemError(self.info, "Use of 'boxed' requires 'data'")

    def visit(self, visitor):
        visitor.visit_event(self.name, self.info, self.arg_type, self.boxed)
        visitor.visit_event(self.name, self.info, self.ifcond,
                            self.arg_type, self.boxed)


class QAPISchema(object):

scripts/qapi/doc.py

100644 → 100755
+5 −5
Original line number Diff line number Diff line
@@ -204,14 +204,14 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
    def write(self, output_dir):
        self._gen.write(output_dir, self._prefix + 'qapi-doc.texi')

    def visit_enum_type(self, name, info, values, prefix):
    def visit_enum_type(self, name, info, ifcond, values, prefix):
        doc = self.cur_doc
        self._gen.add(TYPE_FMT(type='Enum',
                               name=doc.symbol,
                               body=texi_entity(doc, 'Values',
                                                member_func=texi_enum_value)))

    def visit_object_type(self, name, info, base, members, variants):
    def visit_object_type(self, name, info, ifcond, base, members, variants):
        doc = self.cur_doc
        if base and base.is_implicit():
            base = None
@@ -220,13 +220,13 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
                               body=texi_entity(doc, 'Members',
                                                base, variants)))

    def visit_alternate_type(self, name, info, variants):
    def visit_alternate_type(self, name, info, ifcond, variants):
        doc = self.cur_doc
        self._gen.add(TYPE_FMT(type='Alternate',
                               name=doc.symbol,
                               body=texi_entity(doc, 'Members')))

    def visit_command(self, name, info, arg_type, ret_type, gen,
    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
                      success_response, boxed, allow_oob, allow_preconfig):
        doc = self.cur_doc
        if boxed:
@@ -240,7 +240,7 @@ class QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
                              name=doc.symbol,
                              body=body))

    def visit_event(self, name, info, arg_type, boxed):
    def visit_event(self, name, info, ifcond, arg_type, boxed):
        doc = self.cur_doc
        self._gen.add(MSG_FMT(type='Event',
                              name=doc.symbol,
+1 −1
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
        genh.add(gen_enum(self._enum_name, self._event_names))
        genc.add(gen_enum_lookup(self._enum_name, self._event_names))

    def visit_event(self, name, info, arg_type, boxed):
    def visit_event(self, name, info, ifcond, arg_type, boxed):
        self._genh.add(gen_event_send_decl(name, arg_type, boxed))
        self._genc.add(gen_event_send(name, arg_type, boxed, self._enum_name))
        self._event_names.append(name)
+6 −6
Original line number Diff line number Diff line
@@ -149,26 +149,26 @@ const QLitObject %(c_name)s = %(c_string)s;
    def visit_builtin_type(self, name, info, json_type):
        self._gen_qlit(name, 'builtin', {'json-type': json_type})

    def visit_enum_type(self, name, info, values, prefix):
    def visit_enum_type(self, name, info, ifcond, values, prefix):
        self._gen_qlit(name, 'enum', {'values': values})

    def visit_array_type(self, name, info, element_type):
    def visit_array_type(self, name, info, ifcond, element_type):
        element = self._use_type(element_type)
        self._gen_qlit('[' + element + ']', 'array', {'element-type': element})

    def visit_object_type_flat(self, name, info, members, variants):
    def visit_object_type_flat(self, name, info, ifcond, members, variants):
        obj = {'members': [self._gen_member(m) for m in members]}
        if variants:
            obj.update(self._gen_variants(variants.tag_member.name,
                                          variants.variants))
        self._gen_qlit(name, 'object', obj)

    def visit_alternate_type(self, name, info, variants):
    def visit_alternate_type(self, name, info, ifcond, variants):
        self._gen_qlit(name, 'alternate',
                       {'members': [{'type': self._use_type(m.type)}
                                    for m in variants.variants]})

    def visit_command(self, name, info, arg_type, ret_type, gen,
    def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
                      success_response, boxed, allow_oob, allow_preconfig):
        arg_type = arg_type or self._schema.the_empty_object_type
        ret_type = ret_type or self._schema.the_empty_object_type
@@ -178,7 +178,7 @@ const QLitObject %(c_name)s = %(c_string)s;
                        'allow-oob': allow_oob,
                        'allow-preconfig': allow_preconfig})

    def visit_event(self, name, info, arg_type, boxed):
    def visit_event(self, name, info, ifcond, arg_type, boxed):
        arg_type = arg_type or self._schema.the_empty_object_type
        self._gen_qlit(name, 'event', {'arg-type': self._use_type(arg_type)})

Loading