• Eric Blake's avatar
    qapi: Add new visit_free() function · 2c0ef9f4
    Eric Blake authored
    Making each visitor provide its own (awkwardly-named) FOO_cleanup()
    is unusual, when we can instead have a polymorphic visit_free()
    interface.  Over the next few patches, we can use the polymorphic
    functions to eliminate the need for a FOO_get_visitor() function
    for accessing specific visitor functionality, once everything can
    be accessed directly through the Visitor* interfaces.
    
    The dealloc visitor is the first one converted to completely use
    the new entry point, since qapi_dealloc_visitor_cleanup() was the
    only reason that qapi_dealloc_get_visitor() existed, and only
    generated and testsuite code was even using it.  With the new
    visit_free() entry point in place, we no longer need to expose
    the QapiDeallocVisitor subtype through qapi_dealloc_visitor_new(),
    and can get by with less generated code, with diffs that look like:
    
    | void qapi_free_ACPIOSTInfo(ACPIOSTInfo *obj)
    | {
    |-    QapiDeallocVisitor *qdv;
    |     Visitor *v;
    |
    |     if (!obj) {
    |         return;
    |     }
    |
    |-    qdv = qapi_dealloc_visitor_new();
    |-    v = qapi_dealloc_get_visitor(qdv);
    |+    v = qapi_dealloc_visitor_new();
    |     visit_type_ACPIOSTInfo(v, NULL, &obj, NULL);
    |-    qapi_dealloc_visitor_cleanup(qdv);
    |+    visit_free(v);
    |}
    Signed-off-by: 's avatarEric Blake <eblake@redhat.com>
    Message-Id: <1465490926-28625-5-git-send-email-eblake@redhat.com>
    Reviewed-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    2c0ef9f4
qapi-dealloc-visitor.c 3.55 KB