changeset: 105336:c2cb70c97163 branch: 3.6 user: Victor Stinner date: Tue Nov 22 15:30:38 2016 +0100 files: Lib/test/test_re.py Modules/_sre.c description: Issue #28727: Optimize pattern_richcompare() for a==a A pattern is equal to itself. diff -r 6b43d15fd2d7 -r c2cb70c97163 Lib/test/test_re.py --- a/Lib/test/test_re.py Tue Nov 22 15:23:00 2016 +0100 +++ b/Lib/test/test_re.py Tue Nov 22 15:30:38 2016 +0100 @@ -1781,6 +1781,10 @@ def test_pattern_compare(self): pattern1 = re.compile('abc', re.IGNORECASE) + # equal to itself + self.assertEqual(pattern1, pattern1) + self.assertFalse(pattern1 != pattern1) + # equal re.purge() pattern2 = re.compile('abc', re.IGNORECASE) diff -r 6b43d15fd2d7 -r c2cb70c97163 Modules/_sre.c --- a/Modules/_sre.c Tue Nov 22 15:23:00 2016 +0100 +++ b/Modules/_sre.c Tue Nov 22 15:30:38 2016 +0100 @@ -2683,6 +2683,12 @@ if (Py_TYPE(lefto) != &Pattern_Type || Py_TYPE(righto) != &Pattern_Type) { Py_RETURN_NOTIMPLEMENTED; } + + if (lefto == righto) { + /* a pattern is equal to itself */ + return PyBool_FromLong(op == Py_EQ); + } + left = (PatternObject *)lefto; right = (PatternObject *)righto;