diff -r e3bb87952c62 Lib/test/test_re.py --- a/Lib/test/test_re.py Wed Jun 15 01:05:27 2016 +0000 +++ b/Lib/test/test_re.py Wed Jun 15 14:56:11 2016 +0800 @@ -388,22 +388,29 @@ [("a", ""),("b", "b"),("a", "")]) def test_re_match(self): + class Zero: + def __index__(self): + return 0 + for string in 'a', S('a'): self.assertEqual(re.match('a', string).groups(), ()) self.assertEqual(re.match('(a)', string).groups(), ('a',)) self.assertEqual(re.match('(a)', string).group(0), 'a') + self.assertEqual(re.match('(a)', string).group(Zero()), 'a') self.assertEqual(re.match('(a)', string).group(1), 'a') self.assertEqual(re.match('(a)', string).group(1, 1), ('a', 'a')) for string in b'a', B(b'a'), bytearray(b'a'), memoryview(b'a'): self.assertEqual(re.match(b'a', string).groups(), ()) self.assertEqual(re.match(b'(a)', string).groups(), (b'a',)) self.assertEqual(re.match(b'(a)', string).group(0), b'a') + self.assertEqual(re.match(b'(a)', string).group(Zero()), b'a') self.assertEqual(re.match(b'(a)', string).group(1), b'a') self.assertEqual(re.match(b'(a)', string).group(1, 1), (b'a', b'a')) for a in ("\xe0", "\u0430", "\U0001d49c"): self.assertEqual(re.match(a, a).groups(), ()) self.assertEqual(re.match('(%s)' % a, a).groups(), (a,)) self.assertEqual(re.match('(%s)' % a, a).group(0), a) + self.assertEqual(re.match('(%s)' % a, a).group(Zero()), a) self.assertEqual(re.match('(%s)' % a, a).group(1), a) self.assertEqual(re.match('(%s)' % a, a).group(1, 1), (a, a)) @@ -417,7 +424,7 @@ # A single group m = re.match('(a)', 'a') self.assertEqual(m.group(0), 'a') - self.assertEqual(m.group(0), 'a') + self.assertEqual(m.group(Zero()), 'a') self.assertEqual(m.group(1), 'a') self.assertEqual(m.group(1, 1), ('a', 'a')) diff -r e3bb87952c62 Modules/_sre.c --- a/Modules/_sre.c Wed Jun 15 01:05:27 2016 +0000 +++ b/Modules/_sre.c Wed Jun 15 14:56:11 2016 +0800 @@ -2049,8 +2049,8 @@ /* Default value */ return 0; - if (PyLong_Check(index)) - return PyLong_AsSsize_t(index); + if (PyIndex_Check(index)) + return PyNumber_AsSsize_t(index, PyExc_IndexError); i = -1;