From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49299) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bAQJ1-0000B4-UE for qemu-devel@nongnu.org; Tue, 07 Jun 2016 19:21:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bAQIz-0002Sa-J1 for qemu-devel@nongnu.org; Tue, 07 Jun 2016 19:21:06 -0400 References: <1463632874-28559-1-git-send-email-eblake@redhat.com> <1463632874-28559-5-git-send-email-eblake@redhat.com> <87y46oq5ug.fsf@dusky.pond.sub.org> From: Eric Blake Message-ID: <575756D8.1050704@redhat.com> Date: Tue, 7 Jun 2016 17:20:56 -0600 MIME-Version: 1.0 In-Reply-To: <87y46oq5ug.fsf@dusky.pond.sub.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="DcJf5GH2UqrXW96TlLMW1QlEWmrOmbksN" Subject: Re: [Qemu-devel] [PATCH v4 04/28] qapi: Add parameter to visit_end_* List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: qemu-devel@nongnu.org, Kevin Wolf , "open list:Block layer core" , "Michael S. Tsirkin" , Michael Roth , Alexander Graf , "open list:sPAPR" , Max Reitz , =?UTF-8?Q?Andreas_F=c3=a4rber?= , David Gibson This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --DcJf5GH2UqrXW96TlLMW1QlEWmrOmbksN Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 06/01/2016 09:36 AM, Markus Armbruster wrote: > Eric Blake writes: >=20 >> Rather than making the dealloc visitor track of stack of pointers >> remembered during visit_start_* in order to free them during >> visit_end_*, it's a lot easier to just make all callers pass the >> same pointer to visit_end_*. The generated code has access to the >> same pointer, while all other users are doing virtual walks and >> can pass NULL. The dealloc visitor is then greatly simplified. >> >> All three visit_end_*() functions intentionally take a void**, >> even though the visit_start_*() functions differ between void**, >> GenericList**, and GenericAlternate**. This is done for several >> reasons: when doing a virtual walk, passing NULL doesn't care >> what the type is, but when doing a generated walk, we already >> have to cast the caller's specific FOO* to call visit_start, >> while using void** lets us use visit_end without a cast. Also, >> an upcoming patch will add a clone visitor that wants to use >> the same implementation for all three visit_end callbacks, >> which is made easier if all three share the same signature. >> >> Signed-off-by: Eric Blake > [...] >> diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c >> index aea90a1..84f32fc 100644 >> --- a/qapi/qmp-input-visitor.c >> +++ b/qapi/qmp-input-visitor.c >> @@ -145,7 +145,7 @@ static void qmp_input_check_struct(Visitor *v, Err= or **errp) >> } >> } >> >> -static void qmp_input_pop(Visitor *v) >> +static void qmp_input_pop(Visitor *v, void **obj) >> { >> QmpInputVisitor *qiv =3D to_qiv(v); >> StackObject *tos =3D &qiv->stack[qiv->nb_stack - 1]; >=20 > You could assert @obj matches tos->obj. Same for the other visitors > that still need a stack. Adding a stack to the ones that don't just fo= r > the assertion seems excessive, though. At this point, only the QMP visitors track a stack (the OptsVisitor does not, and we just got rid of the dealloc visitor stack); but since the string visitors only support a top-level visit with no struct or nested list, those can also support an assert. That makes 4 of the 6 visitors at this stage in the series; and only 4/8 when the clone and json visitors are added. I'll go ahead and add it in, though. --=20 Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --DcJf5GH2UqrXW96TlLMW1QlEWmrOmbksN Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Public key at http://people.redhat.com/eblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCAAGBQJXV1bYAAoJEKeha0olJ0Nqgd0H/0k0AvtV1gosOg+yElWyeyrd +uXPP2tbKAIXO+MB8NlwphHj6AGo+YHQ9k7AyhIOyRwwF6D1GOvomfPvb4XHO5EJ H7066Gl5TjrBqsnomWplnHhHLdksLyEWoE7Gjsxp2nCO0rx1k0G7QdZ1xySCIfNO 4FCHJKY11HCGeKkZXsZMSQY4IkLpJXPUu2r0JStYIelKDBJFlgjiP5tkr1QhWmSO gaR68mBGPdxKdPCk7UGFq3mvAZHrrGzYEjTzU4cS8Dxmkm0a9s12WWx5q0IMaH3F Z7/m8kFm32GFR7VYj2AGz/pFlxP3Z42wt0jUjb+XpGCVd2ESqu5MotfHl+gl0Ok= =Zphd -----END PGP SIGNATURE----- --DcJf5GH2UqrXW96TlLMW1QlEWmrOmbksN--