@@ -41,6 +41,8 @@ struct %(c_name)s {
def gen_struct_members(members):
ret = ''
for memb in members:
+ if memb.type.c_type() is None:
+ continue
if memb.optional:
ret += mcgen('''
bool has_%(c_name)s;
@@ -123,6 +125,8 @@ def gen_variants(variants):
c_name=c_name(variants.tag_member.name))
for var in variants.variants:
+ if var.type.c_unboxed_type() is None:
+ continue
ret += mcgen('''
%(c_type)s %(c_name)s;
''',
@@ -208,6 +212,8 @@ class QAPISchemaGenTypeVisitor(QAPISchemaVisitor):
def visit_array_type(self, name, info, element_type):
if isinstance(element_type, QAPISchemaBuiltinType):
+ if element_type.c_type() is None:
+ return
self._btin += gen_fwd_object_or_array(name)
self._btin += gen_array(name, element_type)
self._btin += gen_type_cleanup_decl(name)
@@ -187,6 +187,8 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
c_name=c_name(name), promote_int=promote_int)
for var in variants.variants:
+ if var.type.c_type() is None:
+ continue
ret += mcgen('''
case %(case)s:
''',
@@ -301,6 +303,8 @@ class QAPISchemaGenVisitVisitor(QAPISchemaVisitor):
self.defn += gen_visit_enum(name)
def visit_array_type(self, name, info, element_type):
+ if element_type.c_type() is None:
+ return
decl = gen_visit_decl(name)
defn = gen_visit_list(name, element_type)
if isinstance(element_type, QAPISchemaBuiltinType):
@@ -34,6 +34,7 @@ builtin_types = {
'uint64': 'QTYPE_QINT',
'size': 'QTYPE_QINT',
'any': None, # any QType possible, actually
+ 'null': 'QTYPE_QNULL',
'QType': 'QTYPE_QSTRING',
}
@@ -1094,7 +1095,8 @@ class QAPISchemaType(QAPISchemaEntity):
'number': 'QTYPE_QFLOAT',
'int': 'QTYPE_QINT',
'boolean': 'QTYPE_QBOOL',
- 'object': 'QTYPE_QDICT'
+ 'object': 'QTYPE_QDICT',
+ 'null': 'QTYPE_QNULL'
}
return json2qtype.get(self.json_type())
@@ -1525,7 +1527,8 @@ class QAPISchema(object):
('uint64', 'int', 'uint64_t'),
('size', 'int', 'uint64_t'),
('bool', 'boolean', 'bool'),
- ('any', 'value', 'QObject' + pointer_suffix)]:
+ ('any', 'value', 'QObject' + pointer_suffix),
+ ('null', 'null', None)]:
self._def_builtin_type(*t)
self.the_empty_object_type = QAPISchemaObjectType('q_empty', None,
None, [], None)
@@ -392,3 +392,9 @@
'data': { 'a': ['__org.qemu_x-Enum'], 'b': ['__org.qemu_x-Struct'],
'c': '__org.qemu_x-Union2', 'd': '__org.qemu_x-Alt' },
'returns': '__org.qemu_x-Union1' }
+
+##
+# @str-or-null:
+##
+{ 'alternate': 'str-or-null',
+ 'data': { 's': 'str', 'n': 'null' } }