|
|
|
@ -152,11 +152,11 @@ class QAPISchemaModule: |
|
|
|
|
|
|
|
class QAPISchemaInclude(QAPISchemaEntity): |
|
|
|
def __init__(self, sub_module, info): |
|
|
|
QAPISchemaEntity.__init__(self, None, info, None) |
|
|
|
super().__init__(None, info, None) |
|
|
|
self._sub_module = sub_module |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaEntity.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_include(self._sub_module.name, self.info) |
|
|
|
|
|
|
|
|
|
|
|
@ -202,7 +202,7 @@ class QAPISchemaBuiltinType(QAPISchemaType): |
|
|
|
meta = 'built-in' |
|
|
|
|
|
|
|
def __init__(self, name, json_type, c_type): |
|
|
|
QAPISchemaType.__init__(self, name, None, None) |
|
|
|
super().__init__(name, None, None) |
|
|
|
assert not c_type or isinstance(c_type, str) |
|
|
|
assert json_type in ('string', 'number', 'int', 'boolean', 'null', |
|
|
|
'value') |
|
|
|
@ -227,7 +227,7 @@ class QAPISchemaBuiltinType(QAPISchemaType): |
|
|
|
return self.json_type() |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaType.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_builtin_type(self.name, self.info, self.json_type()) |
|
|
|
|
|
|
|
|
|
|
|
@ -235,7 +235,7 @@ class QAPISchemaEnumType(QAPISchemaType): |
|
|
|
meta = 'enum' |
|
|
|
|
|
|
|
def __init__(self, name, info, doc, ifcond, members, prefix): |
|
|
|
QAPISchemaType.__init__(self, name, info, doc, ifcond) |
|
|
|
super().__init__(name, info, doc, ifcond) |
|
|
|
for m in members: |
|
|
|
assert isinstance(m, QAPISchemaEnumMember) |
|
|
|
m.set_defined_in(name) |
|
|
|
@ -244,7 +244,7 @@ class QAPISchemaEnumType(QAPISchemaType): |
|
|
|
self.prefix = prefix |
|
|
|
|
|
|
|
def check(self, schema): |
|
|
|
QAPISchemaType.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
seen = {} |
|
|
|
for m in self.members: |
|
|
|
m.check_clash(self.info, seen) |
|
|
|
@ -269,7 +269,7 @@ class QAPISchemaEnumType(QAPISchemaType): |
|
|
|
return 'string' |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaType.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_enum_type(self.name, self.info, self.ifcond, |
|
|
|
self.members, self.prefix) |
|
|
|
|
|
|
|
@ -278,13 +278,13 @@ class QAPISchemaArrayType(QAPISchemaType): |
|
|
|
meta = 'array' |
|
|
|
|
|
|
|
def __init__(self, name, info, element_type): |
|
|
|
QAPISchemaType.__init__(self, name, info, None, None) |
|
|
|
super().__init__(name, info, None, None) |
|
|
|
assert isinstance(element_type, str) |
|
|
|
self._element_type_name = element_type |
|
|
|
self.element_type = None |
|
|
|
|
|
|
|
def check(self, schema): |
|
|
|
QAPISchemaType.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
self.element_type = schema.resolve_type( |
|
|
|
self._element_type_name, self.info, |
|
|
|
self.info and self.info.defn_meta) |
|
|
|
@ -314,7 +314,7 @@ class QAPISchemaArrayType(QAPISchemaType): |
|
|
|
return 'array of ' + elt_doc_type |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaType.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_array_type(self.name, self.info, self.ifcond, |
|
|
|
self.element_type) |
|
|
|
|
|
|
|
@ -329,7 +329,7 @@ class QAPISchemaObjectType(QAPISchemaType): |
|
|
|
# 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, ifcond, features) |
|
|
|
super().__init__(name, info, doc, ifcond, features) |
|
|
|
self.meta = 'union' if variants else 'struct' |
|
|
|
assert base is None or isinstance(base, str) |
|
|
|
for m in local_members: |
|
|
|
@ -356,7 +356,7 @@ class QAPISchemaObjectType(QAPISchemaType): |
|
|
|
raise QAPISemError(self.info, |
|
|
|
"object %s contains itself" % self.name) |
|
|
|
|
|
|
|
QAPISchemaType.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
assert self._checked and self.members is None |
|
|
|
|
|
|
|
seen = OrderedDict() |
|
|
|
@ -419,7 +419,7 @@ class QAPISchemaObjectType(QAPISchemaType): |
|
|
|
|
|
|
|
def c_name(self): |
|
|
|
assert self.name != 'q_empty' |
|
|
|
return QAPISchemaType.c_name(self) |
|
|
|
return super().c_name() |
|
|
|
|
|
|
|
def c_type(self): |
|
|
|
assert not self.is_implicit() |
|
|
|
@ -432,7 +432,7 @@ class QAPISchemaObjectType(QAPISchemaType): |
|
|
|
return 'object' |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaType.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_object_type(self.name, self.info, self.ifcond, |
|
|
|
self.base, self.local_members, self.variants, |
|
|
|
self.features) |
|
|
|
@ -506,7 +506,7 @@ class QAPISchemaFeature(QAPISchemaMember): |
|
|
|
|
|
|
|
class QAPISchemaObjectTypeMember(QAPISchemaMember): |
|
|
|
def __init__(self, name, info, typ, optional, ifcond=None): |
|
|
|
QAPISchemaMember.__init__(self, name, info, ifcond) |
|
|
|
super().__init__(name, info, ifcond) |
|
|
|
assert isinstance(typ, str) |
|
|
|
assert isinstance(optional, bool) |
|
|
|
self._type_name = typ |
|
|
|
@ -614,15 +614,14 @@ class QAPISchemaObjectTypeVariant(QAPISchemaObjectTypeMember): |
|
|
|
role = 'branch' |
|
|
|
|
|
|
|
def __init__(self, name, info, typ, ifcond=None): |
|
|
|
QAPISchemaObjectTypeMember.__init__(self, name, info, typ, |
|
|
|
False, ifcond) |
|
|
|
super().__init__(name, info, typ, False, ifcond) |
|
|
|
|
|
|
|
|
|
|
|
class QAPISchemaAlternateType(QAPISchemaType): |
|
|
|
meta = 'alternate' |
|
|
|
|
|
|
|
def __init__(self, name, info, doc, ifcond, variants): |
|
|
|
QAPISchemaType.__init__(self, name, info, doc, ifcond) |
|
|
|
super().__init__(name, info, doc, ifcond) |
|
|
|
assert isinstance(variants, QAPISchemaObjectTypeVariants) |
|
|
|
assert variants.tag_member |
|
|
|
variants.set_defined_in(name) |
|
|
|
@ -630,7 +629,7 @@ class QAPISchemaAlternateType(QAPISchemaType): |
|
|
|
self.variants = variants |
|
|
|
|
|
|
|
def check(self, schema): |
|
|
|
QAPISchemaType.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
self.variants.tag_member.check(schema) |
|
|
|
# Not calling self.variants.check_clash(), because there's nothing |
|
|
|
# to clash with |
|
|
|
@ -680,7 +679,7 @@ class QAPISchemaAlternateType(QAPISchemaType): |
|
|
|
return 'value' |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaType.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_alternate_type(self.name, self.info, self.ifcond, |
|
|
|
self.variants) |
|
|
|
|
|
|
|
@ -691,7 +690,7 @@ class QAPISchemaCommand(QAPISchemaEntity): |
|
|
|
def __init__(self, name, info, doc, ifcond, arg_type, ret_type, |
|
|
|
gen, success_response, boxed, allow_oob, allow_preconfig, |
|
|
|
features): |
|
|
|
QAPISchemaEntity.__init__(self, name, info, doc, ifcond, features) |
|
|
|
super().__init__(name, info, doc, ifcond, features) |
|
|
|
assert not arg_type or isinstance(arg_type, str) |
|
|
|
assert not ret_type or isinstance(ret_type, str) |
|
|
|
self._arg_type_name = arg_type |
|
|
|
@ -705,7 +704,7 @@ class QAPISchemaCommand(QAPISchemaEntity): |
|
|
|
self.allow_preconfig = allow_preconfig |
|
|
|
|
|
|
|
def check(self, schema): |
|
|
|
QAPISchemaEntity.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
if self._arg_type_name: |
|
|
|
self.arg_type = schema.resolve_type( |
|
|
|
self._arg_type_name, self.info, "command's 'data'") |
|
|
|
@ -740,7 +739,7 @@ class QAPISchemaCommand(QAPISchemaEntity): |
|
|
|
self.arg_type.connect_doc(doc) |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaEntity.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_command(self.name, self.info, self.ifcond, |
|
|
|
self.arg_type, self.ret_type, |
|
|
|
self.gen, self.success_response, |
|
|
|
@ -753,14 +752,14 @@ class QAPISchemaEvent(QAPISchemaEntity): |
|
|
|
meta = 'event' |
|
|
|
|
|
|
|
def __init__(self, name, info, doc, ifcond, arg_type, boxed): |
|
|
|
QAPISchemaEntity.__init__(self, name, info, doc, ifcond) |
|
|
|
super().__init__(name, info, doc, ifcond) |
|
|
|
assert not arg_type or isinstance(arg_type, str) |
|
|
|
self._arg_type_name = arg_type |
|
|
|
self.arg_type = None |
|
|
|
self.boxed = boxed |
|
|
|
|
|
|
|
def check(self, schema): |
|
|
|
QAPISchemaEntity.check(self, schema) |
|
|
|
super().check(schema) |
|
|
|
if self._arg_type_name: |
|
|
|
self.arg_type = schema.resolve_type( |
|
|
|
self._arg_type_name, self.info, "event's 'data'") |
|
|
|
@ -782,7 +781,7 @@ class QAPISchemaEvent(QAPISchemaEntity): |
|
|
|
self.arg_type.connect_doc(doc) |
|
|
|
|
|
|
|
def visit(self, visitor): |
|
|
|
QAPISchemaEntity.visit(self, visitor) |
|
|
|
super().visit(visitor) |
|
|
|
visitor.visit_event(self.name, self.info, self.ifcond, |
|
|
|
self.arg_type, self.boxed) |
|
|
|
|
|
|
|
|