qapi: Fix generation of 'size' builtin type

We were missing the 'size' builtin type (which means that QAPI using
[ 'size' ] would fail to compile).

Backports commit cb17f79eef0d161e81ac457e4c1f124405be2a18 from qemu
This commit is contained in:
Eric Blake 2018-02-19 13:16:16 -05:00 committed by Lioncash
parent 9d5a99b029
commit 79c351d3e6
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
5 changed files with 51 additions and 0 deletions

View file

@ -135,6 +135,21 @@ void qapi_free_int8List(int8List *obj)
qapi_dealloc_visitor_cleanup(md);
}
void qapi_free_sizeList(sizeList *obj)
{
QapiDeallocVisitor *md;
Visitor *v;
if (!obj) {
return;
}
md = qapi_dealloc_visitor_new();
v = qapi_dealloc_get_visitor(md);
visit_type_sizeList(v, &obj, NULL, NULL);
qapi_dealloc_visitor_cleanup(md);
}
void qapi_free_uint64List(uint64List *obj)
{
QapiDeallocVisitor *md;

View file

@ -77,6 +77,15 @@ typedef struct int8List
struct int8List *next;
} int8List;
typedef struct sizeList
{
union {
uint64_t value;
uint64_t padding;
};
struct sizeList *next;
} sizeList;
typedef struct uint64List
{
union {
@ -199,6 +208,7 @@ void qapi_free_intList(intList *obj);
void qapi_free_uint8List(uint8List *obj);
void qapi_free_numberList(numberList *obj);
void qapi_free_int8List(int8List *obj);
void qapi_free_sizeList(sizeList *obj);
void qapi_free_uint64List(uint64List *obj);
void qapi_free_uint16List(uint16List *obj);
void qapi_free_boolList(boolList *obj);

View file

@ -160,6 +160,30 @@ out:
error_propagate(errp, err);
}
void visit_type_sizeList(Visitor *m, sizeList **obj, const char *name, Error **errp)
{
Error *err = NULL;
GenericList *i, **prev;
visit_start_list(m, name, &err);
if (err) {
goto out;
}
for (prev = (GenericList **)obj;
!err && (i = visit_next_list(m, prev)) != NULL;
prev = &i) {
sizeList *native_i = (sizeList *)i;
visit_type_size(m, &native_i->value, NULL, &err);
}
error_propagate(errp, err);
err = NULL;
visit_end_list(m);
out:
error_propagate(errp, err);
}
void visit_type_uint64List(Visitor *m, uint64List **obj, const char *name, Error **errp)
{
Error *err = NULL;

View file

@ -29,6 +29,7 @@ void visit_type_intList(Visitor *m, intList **obj, const char *name, Error **err
void visit_type_uint8List(Visitor *m, uint8List **obj, const char *name, Error **errp);
void visit_type_numberList(Visitor *m, numberList **obj, const char *name, Error **errp);
void visit_type_int8List(Visitor *m, int8List **obj, const char *name, Error **errp);
void visit_type_sizeList(Visitor *m, sizeList **obj, const char *name, Error **errp);
void visit_type_uint64List(Visitor *m, uint64List **obj, const char *name, Error **errp);
void visit_type_uint16List(Visitor *m, uint16List **obj, const char *name, Error **errp);
void visit_type_boolList(Visitor *m, boolList **obj, const char *name, Error **errp);

View file

@ -29,6 +29,7 @@ builtin_types = {
'uint16': 'QTYPE_QINT',
'uint32': 'QTYPE_QINT',
'uint64': 'QTYPE_QINT',
'size': 'QTYPE_QINT',
}
def error_path(parent):