From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zr54M-0002ga-Cp for qemu-devel@nongnu.org; Tue, 27 Oct 2015 10:17:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zr54I-0002LF-0y for qemu-devel@nongnu.org; Tue, 27 Oct 2015 10:17:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38958) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zr54H-0002L8-PA for qemu-devel@nongnu.org; Tue, 27 Oct 2015 10:17:41 -0400 References: <1445898903-12082-1-git-send-email-eblake@redhat.com> <1445898903-12082-10-git-send-email-eblake@redhat.com> <87wpu8iwiv.fsf@blackfin.pond.sub.org> From: Eric Blake Message-ID: <562F877F.2080604@redhat.com> Date: Tue, 27 Oct 2015 08:17:35 -0600 MIME-Version: 1.0 In-Reply-To: <87wpu8iwiv.fsf@blackfin.pond.sub.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="An4uer8fsC2H6bsd0k2GlMXWBn3g9b7VB" Subject: Re: [Qemu-devel] [PATCH v11 09/24] qapi: Prefer typesafe upcasts to qapi base classes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: qemu-devel@nongnu.org, Michael Roth This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --An4uer8fsC2H6bsd0k2GlMXWBn3g9b7VB Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 10/27/2015 01:46 AM, Markus Armbruster wrote: > Eric Blake writes: >=20 >> A previous patch (commit 1e6c1616) made it possible to >> directly cast from a qapi flat union type to its base type. >> However, it requires the use of a C cast, which turns off >> compiler type-safety checks. Add inline type-safe wrappers >> named qapi_FOO_base() for any union type FOO that has a base, >> which can be used for a safer upcast, and enhance the >> testsuite to cover the new functionality. A future patch >> will extend the upcast support to structs. >> >> Note that C makes const-correct upcasts annoying because >> it lacks overloads; these functions cast away const so that >> they can accept user pointers whether const or not, and the >> result in turn can be assigned to normal or const pointers. >> Alternatively, this could have been done with macros, but >> those tend to not have quite as much type safety. >=20 > Well, the macros can be made just as type-safe, but the result is eithe= r > somewhat ugly and using gcc-isms, or very ugly and unhygienic. >=20 > I'd write something like "type-safe macros are hairy, and not worthwhil= e > here." Sure, that works for me. >=20 >> This patch just adds upcasts. None of our code needed to >> downcast from a base qapi class to a child. >=20 > Actually, none of our code needs to upcast unions, either. Only the ne= w > tests do. Code that updasts structs exist, but it doesn't use this > patch's upcasts until later. >=20 > Suggest to amend the first paragraph: >=20 > A previous patch (commit 1e6c1616) made it possible to directly cas= t > from a qapi flat union type to its base type. However, it requires= > the use of a C cast, which turns off compiler type-safety checks. > Fortunately, no such casts exist just, yet. s/ just,/, just/ >=20 > Regardless, add inline type-safe wrappers named qapi_FOO_base() for= > any union type FOO that has a base, which can be used for a safer > upcast, and enhance the testsuite to cover the new functionality. >=20 > A future patch will extend the upcast support to structs, where suc= h > casts do exist already. >=20 Maybe s/casts/conversions/ - because as of this patch, it is still a conversion via foo->base rather than (Base *)foo (it's the next patch that gets rid of base, and therefore needs either the cast or the wrapper= ). >=20 > Patch looks good. I can touch up the commit message in my tree. Sure, your proposed wording + touchups is fine. --=20 Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --An4uer8fsC2H6bsd0k2GlMXWBn3g9b7VB 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/ iQEcBAEBCAAGBQJWL4d/AAoJEKeha0olJ0Nqn8MH/RMV5AhHjIkCg+P1Ynxjagwb hGwvOY/jSppqmge3t0yRJIsKUHkR54lRwkfzAQ16OCsAxMbV2qHPYTroFTIeIJ82 l7dAvlgZpsVBYnMHgVhQRXsjniBwPuTGfu8+p9gNUsRRjL1Nl8w3rIoBI63H03Sb 4aFVwGpeKUzQk7jiLdRBBpVnuQtva6Y59CtV/pWhSs7f5IyDdBkCYeuz9bSatg1M 6q0S+dwNtow5bxxeulTWv1uyRkbWcxAXGLvl9R1sR6gIH6OCDiC1fWOG2ILl/eHt MW6CrMOsRGe9IWTCO8qa33ufv2SQ3MhRHq/e5iIBOkQQ/1nbhr4kO1DPYWOTLXA= =ySPs -----END PGP SIGNATURE----- --An4uer8fsC2H6bsd0k2GlMXWBn3g9b7VB--