diff -r da042eec6743 Lib/sre_compile.py --- a/Lib/sre_compile.py Mon Nov 21 16:45:54 2016 +0100 +++ b/Lib/sre_compile.py Mon Nov 21 16:54:56 2016 +0100 @@ -576,5 +576,5 @@ def compile(p, flags=0): return _sre.compile( pattern, flags | p.pattern.flags, code, p.pattern.groups-1, - groupindex, indexgroup + groupindex, tuple(indexgroup) ) diff -r da042eec6743 Lib/test/test_re.py --- a/Lib/test/test_re.py Mon Nov 21 16:45:54 2016 +0100 +++ b/Lib/test/test_re.py Mon Nov 21 16:54:56 2016 +0100 @@ -1506,7 +1506,7 @@ class ReTests(unittest.TestCase): long_overflow = 2**128 self.assertRaises(TypeError, re.finditer, "a", {}) with self.assertRaises(OverflowError): - _sre.compile("abc", 0, [long_overflow], 0, [], []) + _sre.compile("abc", 0, [long_overflow], 0, {}, ()) with self.assertRaises(TypeError): _sre.compile({}, 0, [], 0, [], []) diff -r da042eec6743 Modules/_sre.c --- a/Modules/_sre.c Mon Nov 21 16:45:54 2016 +0100 +++ b/Modules/_sre.c Mon Nov 21 16:54:56 2016 +0100 @@ -1438,8 +1438,8 @@ static int _validate(PatternObject *self flags: int code: object(subclass_of='&PyList_Type') groups: Py_ssize_t - groupindex: object - indexgroup: object + groupindex: object(subclass_of='&PyDict_Type') + indexgroup: object(subclass_of='&PyTuple_Type') [clinic start generated code]*/ @@ -1447,7 +1447,7 @@ static PyObject * _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup) -/*[clinic end generated code: output=ef9c2b3693776404 input=7d059ec8ae1edb85]*/ +/*[clinic end generated code: output=ef9c2b3693776404 input=0a68476dbbe5db30]*/ { /* "compile" pattern descriptor to pattern object */ diff -r da042eec6743 Modules/clinic/_sre.c.h --- a/Modules/clinic/_sre.c.h Mon Nov 21 16:45:54 2016 +0100 +++ b/Modules/clinic/_sre.c.h Mon Nov 21 16:54:56 2016 +0100 @@ -438,7 +438,7 @@ static PyObject * { PyObject *return_value = NULL; static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; - static _PyArg_Parser _parser = {"OiO!nOO:compile", _keywords, 0}; + static _PyArg_Parser _parser = {"OiO!nO!O!:compile", _keywords, 0}; PyObject *pattern; int flags; PyObject *code; @@ -447,7 +447,7 @@ static PyObject * PyObject *indexgroup; if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, - &pattern, &flags, &PyList_Type, &code, &groups, &groupindex, &indexgroup)) { + &pattern, &flags, &PyList_Type, &code, &groups, &PyDict_Type, &groupindex, &PyTuple_Type, &indexgroup)) { goto exit; } return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup); @@ -728,4 +728,4 @@ static PyObject * { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=a4a246bca1963bc9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b74b16d90f207358 input=a9049054013a1b77]*/ diff -r da042eec6743 Modules/sre.h --- a/Modules/sre.h Mon Nov 21 16:45:54 2016 +0100 +++ b/Modules/sre.h Mon Nov 21 16:54:56 2016 +0100 @@ -27,8 +27,8 @@ typedef struct { PyObject_VAR_HEAD Py_ssize_t groups; /* must be first! */ - PyObject* groupindex; - PyObject* indexgroup; + PyObject* groupindex; /* dict */ + PyObject* indexgroup; /* tuple */ /* compatibility */ PyObject* pattern; /* pattern source (or None) */ int flags; /* flags used when compiling pattern source */