mirror of
https://github.com/python/cpython.git
synced 2026-06-10 20:01:28 +00:00
gh-150942: Speed up re.findall and re.sub/subn result building (gh-150943)
This commit is contained in:
parent
253904f752
commit
0f7dc2fefa
2 changed files with 8 additions and 8 deletions
|
|
@ -0,0 +1,3 @@
|
|||
Speed up :func:`re.findall`, :func:`re.sub` and :func:`re.subn` by appending
|
||||
result items to the output list without an extra reference-count round-trip
|
||||
(using the internal reference-stealing list append helper).
|
||||
|
|
@ -42,6 +42,7 @@ static const char copyright[] =
|
|||
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION
|
||||
#include "pycore_dict.h" // _PyDict_Next()
|
||||
#include "pycore_long.h" // _PyLong_GetZero()
|
||||
#include "pycore_list.h" // _PyList_AppendTakeRef()
|
||||
#include "pycore_moduleobject.h" // _PyModule_GetState()
|
||||
#include "pycore_tuple.h" // _PyTuple_FromPairSteal
|
||||
#include "pycore_unicodeobject.h" // _PyUnicode_Copy
|
||||
|
|
@ -986,8 +987,7 @@ _sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string,
|
|||
break;
|
||||
}
|
||||
|
||||
status = PyList_Append(list, item);
|
||||
Py_DECREF(item);
|
||||
status = _PyList_AppendTakeRef((PyListObject *)list, item);
|
||||
if (status < 0)
|
||||
goto error;
|
||||
|
||||
|
|
@ -1333,8 +1333,7 @@ pattern_subx(_sremodulestate* module_state,
|
|||
string, i, b);
|
||||
if (!item)
|
||||
goto error;
|
||||
status = PyList_Append(list, item);
|
||||
Py_DECREF(item);
|
||||
status = _PyList_AppendTakeRef((PyListObject *)list, item);
|
||||
if (status < 0)
|
||||
goto error;
|
||||
|
||||
|
|
@ -1363,8 +1362,7 @@ pattern_subx(_sremodulestate* module_state,
|
|||
|
||||
/* add to list */
|
||||
if (item != Py_None) {
|
||||
status = PyList_Append(list, item);
|
||||
Py_DECREF(item);
|
||||
status = _PyList_AppendTakeRef((PyListObject *)list, item);
|
||||
if (status < 0)
|
||||
goto error;
|
||||
}
|
||||
|
|
@ -1381,8 +1379,7 @@ pattern_subx(_sremodulestate* module_state,
|
|||
string, i, state.endpos);
|
||||
if (!item)
|
||||
goto error;
|
||||
status = PyList_Append(list, item);
|
||||
Py_DECREF(item);
|
||||
status = _PyList_AppendTakeRef((PyListObject *)list, item);
|
||||
if (status < 0)
|
||||
goto error;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue