From c196202e3d809be6d457b1ad06f13f4361e868aa Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 8 Oct 1996 14:18:42 +0000 Subject: [PATCH] Speedup of makeresult() by keeping a filler of (-1, -1) around. --- Modules/regexmodule.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c index 1c553ea81c..6f566c31f1 100644 --- a/Modules/regexmodule.c +++ b/Modules/regexmodule.c @@ -68,19 +68,32 @@ static PyObject * makeresult(regs) struct re_registers *regs; { - PyObject *v = PyTuple_New(RE_NREGS); - if (v != NULL) { - int i; - for (i = 0; i < RE_NREGS; i++) { - PyObject *w; - w = Py_BuildValue("(ii)", regs->start[i], regs->end[i]); - if (w == NULL) { - Py_XDECREF(v); - v = NULL; - break; - } - PyTuple_SetItem(v, i, w); + PyObject *v; + int i; + static PyObject *filler = NULL; + if (filler == NULL) { + filler = Py_BuildValue("(ii)", -1, -1); + if (filler == NULL) + return NULL; + } + v = PyTuple_New(RE_NREGS); + if (v == NULL) + return NULL; + for (i = 0; i < RE_NREGS; i++) { + int lo = regs->start[i]; + int hi = regs->end[i]; + PyObject *w; + if (lo == -1 && hi == -1) { + w = filler; + Py_INCREF(w); + } + else + w = Py_BuildValue("(ii)", lo, hi); + if (w == NULL) { + Py_XDECREF(v); + return NULL; } + PyTuple_SetItem(v, i, w); } return v; } -- 2.50.1