]> granicus.if.org Git - python/commitdiff
Speedup of makeresult() by keeping a filler of (-1, -1) around.
authorGuido van Rossum <guido@python.org>
Tue, 8 Oct 1996 14:18:42 +0000 (14:18 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 8 Oct 1996 14:18:42 +0000 (14:18 +0000)
Modules/regexmodule.c

index 1c553ea81c7c5d6382f4b15c1f259e93eba732c1..6f566c31f1478ab97fc64b61802aae4ad8529189 100644 (file)
@@ -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;
 }