diff -r add40e9f7cbe Lib/test/test_re.py --- a/Lib/test/test_re.py Wed Oct 16 12:46:28 2013 +0300 +++ b/Lib/test/test_re.py Wed Oct 16 17:25:05 2013 +0300 @@ -1104,6 +1104,38 @@ self.assertEqual(re.compile(pattern, re.S).findall(b'xyz'), [b'xyz'], msg=pattern) + def test_match_repr(self): + match1 = re.search("test", "testrepr") + match2 = re.search("testrepr", "testtestreprtest") + match3 = re.search("a" * 51, + "a" * 52) + + self.assertEqual(repr(match1), + "") + self.assertEqual(repr(match2), + "") + self.assertEqual(repr(match3), + "") + + for match in (bytes_match, memoryview_match, bytearray_match): + self.assertEqual(repr(match), + "") def test_bug_2537(self): # issue 2537: empty submatches diff -r add40e9f7cbe Modules/_sre.c --- a/Modules/_sre.c Wed Oct 16 12:46:28 2013 +0300 +++ b/Modules/_sre.c Wed Oct 16 17:25:05 2013 +0300 @@ -3636,6 +3636,50 @@ return match_regs(self); } +static PyObject * +match_repr(MatchObject *self) +{ + void* ptr; + int start = self->mark[0]; + int end = self->mark[1]; + int logical_charsize, charsize; + + Py_ssize_t length; + Py_buffer view; + PyObject* seq; + PyObject* result; + + if ((PyBytes_Check(self->string)) || + PyMemoryView_Check(self->string) || + PyByteArray_Check(self->string)) + { + + ptr = getstring(self->string, &length, + &logical_charsize, &charsize, &view); + if (ptr == NULL) + return NULL; + + seq = getslice(logical_charsize, ptr, + self->string, self->mark[start * 2], + self->mark[(start * 2) + 1]); + if (logical_charsize == 1 && view.buf != NULL) + PyBuffer_Release(&view); + } + else + seq = getslice(4, Py_None, self->string, start, end); + + result = PyUnicode_FromFormat("", + self->groups, + start, + end, + seq); + Py_DECREF(seq); + return result; + +} + + static PyGetSetDef match_getset[] = { {"lastindex", (getter)match_lastindex_get, (setter)NULL}, {"lastgroup", (getter)match_lastgroup_get, (setter)NULL}, @@ -3664,7 +3708,7 @@ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ - 0, /* tp_repr */ + (reprfunc)match_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ @@ -3965,3 +4009,4 @@ /* vim:ts=4:sw=4:et */ +