From 58100644763c172253925c1883ae43a69cfebae9 Mon Sep 17 00:00:00 2001 From: Fredrik Lundh Date: Wed, 9 Aug 2000 09:14:35 +0000 Subject: [PATCH] -- changed findall to return empty strings instead of None for undefined groups --- Lib/test/test_sre.py | 1 + Modules/_sre.c | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Lib/test/test_sre.py b/Lib/test/test_sre.py index 2f16d291d8..29fafda838 100644 --- a/Lib/test/test_sre.py +++ b/Lib/test/test_sre.py @@ -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" diff --git a/Modules/_sre.c b/Modules/_sre.c index a0e284dd17..b87282c119 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -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 -- 2.40.0