]> granicus.if.org Git - python/commitdiff
-- changed findall to return empty strings instead of None
authorFredrik Lundh <fredrik@pythonware.com>
Wed, 9 Aug 2000 09:14:35 +0000 (09:14 +0000)
committerFredrik Lundh <fredrik@pythonware.com>
Wed, 9 Aug 2000 09:14:35 +0000 (09:14 +0000)
   for undefined groups

Lib/test/test_sre.py
Modules/_sre.c

index 2f16d291d8b7e049b1bc03be8421f12f3679b762..29fafda8384cab8dfd90a50e25fc0752419b1eac 100644 (file)
@@ -177,6 +177,7 @@ try:
     assert sre.findall("(:)(:*)", "a:b::c:::d") == [(":", ""),
                                                    (":", ":"),
                                                    (":", "::")]
+    assert sre.findall("(a)|(b)", "abc") == [("a", ""), ("", "b")]
 except AssertionError:
     raise TestFailed, "sre.findall"
 
index a0e284dd176e8e188a95787d97c04ebf8e7c6ed5..b87282c1191f69b73d048facfe0a815a472aeb86 100644 (file)
@@ -15,6 +15,7 @@
  * 00-08-01 fl  fixes for 1.6b1 (0.9.8)
  * 00-08-03 fl  added recursion limit
  * 00-08-07 fl  use PyOS_CheckStack() if available
+ * 00-08-08 fl  changed findall to return empty strings instead of None
  *
  * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
  *
@@ -568,9 +569,8 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level)
     TRACE(("|%p|%p|ENTER %d\n", pattern, ptr, level));
 
 #if defined(USE_STACKCHECK)
-    if (level % 10 == 0 && PyOS_CheckStack()) {
+    if (level % 10 == 0 && PyOS_CheckStack())
         return SRE_ERROR_RECURSION_LIMIT;
-    }
 #endif
 
 #if defined(USE_RECURSION_LIMIT)
@@ -1352,20 +1352,20 @@ state_fini(SRE_STATE* state)
 LOCAL(PyObject*)
 state_getslice(SRE_STATE* state, int index, PyObject* string)
 {
+    int i, j;
+
     index = (index - 1) * 2;
 
     if (string == Py_None || !state->mark[index] || !state->mark[index+1]) {
-        Py_INCREF(Py_None);
-        return Py_None;
+        i = j = 0;
+    } else {
+        i = ((char*)state->mark[index] - (char*)state->beginning) /
+            state->charsize;
+        j = ((char*)state->mark[index+1] - (char*)state->beginning) /
+            state->charsize;
     }
 
-    return PySequence_GetSlice(
-        string,
-        ((char*)state->mark[index] - (char*)state->beginning) /
-        state->charsize,
-        ((char*)state->mark[index+1] - (char*)state->beginning) /
-        state->charsize
-        );
+    return PySequence_GetSlice(string, i, j);
 }
 
 static void