[Mesa-dev] [PATCH 11/26] python: Fix rich comparisons
Dylan Baker
dylan at pnwbakers.com
Thu Jul 5 16:08:04 UTC 2018
Quoting Mathieu Bridon (2018-07-05 06:17:42)
> Python 3 lost the cmp() builtin, and doesn't call objects __cmp__()
> methods any more to compare them.
>
> Instead, Python 3 requires implementing the rich comparison methods
> explicitly: __eq__(), __ne(), __lt__(), __le__(), __gt__() and __ge__().
>
> Fortunately those are trivial to implement by just calling the existing
> __cmp__() method, which makes the code compatible with both Python 2 and
> Python 3.
Noooooooooo. Kill __cmp__ with fire and death. Python 2 supports rich comparison
methods as well, so please, please, please, please just get rid of __cmp__.
It also gets rid of all of the try/except madness.
>
> This commit only implements the comparison methods which are actually
> used by the build scripts.
>
> In addition, this commit brings back to Python 3 the cmp() builtin
> method as required.
>
> Signed-off-by: Mathieu Bridon <bochecha at daitauha.fr>
> ---
> src/amd/vulkan/radv_extensions.py | 6 +++++-
> src/intel/vulkan/anv_extensions.py | 6 +++++-
> src/mapi/mapi_abi.py | 13 +++++++++++++
> 3 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py
> index a0f1038110..7f48d77629 100644
> --- a/src/amd/vulkan/radv_extensions.py
> +++ b/src/amd/vulkan/radv_extensions.py
> @@ -150,7 +150,11 @@ class VkVersion:
> other = copy.copy(other)
> other.patch = self.patch
>
> - return self.__int_ver().__cmp__(other.__int_ver())
> + return self.__int_ver() - other.__int_ver()
> +
> + def __gt__(self, other):
> + return self.__cmp__(other) > 0
> +
>
> MAX_API_VERSION = VkVersion(MAX_API_VERSION)
>
> diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py
> index 0f99f58ecb..213cfdc551 100644
> --- a/src/intel/vulkan/anv_extensions.py
> +++ b/src/intel/vulkan/anv_extensions.py
> @@ -162,7 +162,11 @@ class VkVersion:
> other = copy.copy(other)
> other.patch = self.patch
>
> - return self.__int_ver().__cmp__(other.__int_ver())
> + return self.__int_ver() - other.__int_ver()
> +
> + def __gt__(self, other):
> + return self.__cmp__(other) > 0
> +
>
>
> MAX_API_VERSION = VkVersion('0.0.0')
> diff --git a/src/mapi/mapi_abi.py b/src/mapi/mapi_abi.py
> index be1d15d922..67fdb10650 100644
> --- a/src/mapi/mapi_abi.py
> +++ b/src/mapi/mapi_abi.py
> @@ -38,6 +38,15 @@ import gl_XML
> import glX_XML
>
>
> +try:
> + cmp
> +
> +except NameError:
> + # Python 3 does not have cmp()
> + def cmp(a, b):
> + return ((a > b) - (a < b))
> +
> +
> # number of dynamic entries
> ABI_NUM_DYNAMIC_ENTRIES = 256
>
> @@ -135,6 +144,10 @@ class ABIEntry(object):
>
> return res
>
> + def __lt__(self, other):
> + return self.__cmp__(other) < 0
> +
> +
> def abi_parse_xml(xml):
> """Parse a GLAPI XML file for ABI entries."""
> api = gl_XML.parse_GL_API(xml, glX_XML.glx_item_factory())
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180705/9b54da95/attachment.sig>
More information about the mesa-dev
mailing list