[Mesa-dev] [PATCH 11/26] python: Fix rich comparisons
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. 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 --- 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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 11/26] python: Fix rich comparisons
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. 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 --- 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 c36559f48e..13a05fa21d 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -151,7 +151,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 adc1d75898..47dba164ef 100644 --- a/src/intel/vulkan/anv_extensions.py +++ b/src/intel/vulkan/anv_extensions.py @@ -166,7 +166,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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 11/26] python: Fix rich comparisons
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. Noo. 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 > --- > 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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev signature.asc Description: signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev