maintenance release:

- reorganized some code to get rid of -Wall and -W4
  warnings

- fixed default argument handling for sub/subn/split
  methods (reported by Peter Schneider-Kamp).
This commit is contained in:
Fredrik Lundh 2000-07-05 21:14:16 +00:00
parent 1f46860a29
commit 2855290b84
2 changed files with 34 additions and 33 deletions

View File

@ -16,8 +16,10 @@ from sre_constants import *
MAXCODE = 65535
def _charset(charset, fixup):
def _charset(charset, fixup=None):
# internal: optimize character set
if not fixup:
fixup = lambda x: x
out = []
charmap = [0]*256
try:

View File

@ -63,6 +63,7 @@ char copyright[] = " SRE 0.9.5 Copyright (c) 1997-2000 by Secret Labs AB ";
#if defined(_MSC_VER)
#pragma optimize("agtw", on) /* doesn't seem to make much difference... */
#pragma warning(disable: 4710) /* who cares if functions are not inlined ;-) */
/* fastest possible local call under MSVC */
#define LOCAL(type) static __inline type __fastcall
#else
@ -240,8 +241,8 @@ stack_extend(SRE_STATE* state, int lo, int hi)
/* grow the stack (typically by a factor of two) */
while (stacksize < lo)
stacksize = 2 * stacksize;
/* FIXME: <fl> could trim size if it's larger than lo, and
much larger than hi */
/* FIXME: <fl> could trim size if it's much larger than hi,
as long it's larger than lo */
TRACE(("grow stack to %d\n", stacksize));
stack = realloc(state->stack, sizeof(SRE_STACK) * stacksize);
}
@ -816,22 +817,6 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
points to the stack */
while (pattern[2] == 65535 || count < (int) pattern[2]) {
void *mark0, *mark1;
if (pattern[3] != 65535) {
mark0 = state->mark[pattern[3]];
mark1 = state->mark[pattern[3]+1];
}
state->stackbase = stack;
i = SRE_MATCH(state, pattern + 4);
state->stackbase = stackbase; /* rewind */
if (i < 0)
return i;
if (!i)
break;
if (state->ptr == ptr) {
count = (int) pattern[2];
break;
}
/* this position was valid; add it to the retry
stack */
if (stack >= state->stacksize) {
@ -840,16 +825,29 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
if (i < 0)
return i; /* out of memory */
}
TRACE(("%8d: stack[%d] = %d\n", PTR(ptr), stack, PTR(ptr)));
TRACE(("%8d: stack[%d]\n", PTR(ptr), stack));
TRACE((" ptr %d mark %d %d %d\n",
PTR(ptr), pattern[3], PTR(mark0), PTR(mark1)));
sp = state->stack + stack;
sp->ptr = ptr;
sp->pattern = pattern + pattern[0];
sp->mark = pattern[3];
if (pattern[3] != 65535) {
sp->mark0 = mark0;
sp->mark1 = mark1;
sp->mark0 = state->mark[pattern[3]];
sp->mark1 = state->mark[pattern[3]+1];
}
stack++;
state->stackbase = stack;
i = SRE_MATCH(state, pattern + 4);
state->stackbase = stackbase;
if (i < 0)
return i;
if (!i)
break;
if (state->ptr == ptr) {
count = (int) pattern[2];
break;
}
/* move forward */
ptr = state->ptr;
count++;
@ -954,6 +952,7 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
failure:
TRACE(("%8d: leave (failure)\n", PTR(ptr)));
if (stack-- > stackbase) {
TRACE(("%8d: pop stack[%d]\n", stack));
sp = state->stack + stack;
ptr = sp->ptr;
pattern = sp->pattern;
@ -982,7 +981,7 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
SRE_CHAR* ptr = state->start;
SRE_CHAR* end = state->end;
int status = 0;
int prefix_len;
int prefix_len = 0;
SRE_CODE* prefix = NULL;
SRE_CODE* charset = NULL;
SRE_CODE* overlap = NULL;
@ -1015,7 +1014,7 @@ SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
}
#if defined(USE_FAST_SEARCH)
if (prefix && overlap && prefix_len > 1) {
if (prefix_len > 1) {
/* pattern starts with a known prefix. use the overlap
table to skip forward as fast as we possibly can */
int i = 0;
@ -1467,8 +1466,8 @@ pattern_sub(PatternObject* self, PyObject* args)
{
PyObject* template;
PyObject* string;
PyObject* count;
if (!PyArg_ParseTuple(args, "OOO", &template, &string, &count))
PyObject* count = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "OO|O", &template, &string, &count))
return NULL;
/* delegate to Python code */
@ -1480,8 +1479,8 @@ pattern_subn(PatternObject* self, PyObject* args)
{
PyObject* template;
PyObject* string;
PyObject* count;
if (!PyArg_ParseTuple(args, "OOO", &template, &string, &count))
PyObject* count = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "OO|O", &template, &string, &count))
return NULL;
/* delegate to Python code */
@ -1492,8 +1491,8 @@ static PyObject*
pattern_split(PatternObject* self, PyObject* args)
{
PyObject* string;
PyObject* maxsplit;
if (!PyArg_ParseTuple(args, "OO", &string, &maxsplit))
PyObject* maxsplit = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "O|O", &string, &maxsplit))
return NULL;
/* delegate to Python code */
@ -1830,7 +1829,7 @@ match_start(MatchObject* self, PyObject* args)
{
int index;
PyObject* index_ = Py_False;
PyObject* index_ = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "|O", &index_))
return NULL;
@ -1857,7 +1856,7 @@ match_end(MatchObject* self, PyObject* args)
{
int index;
PyObject* index_ = Py_False;
PyObject* index_ = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "|O", &index_))
return NULL;
@ -1884,7 +1883,7 @@ match_span(MatchObject* self, PyObject* args)
{
int index;
PyObject* index_ = Py_False;
PyObject* index_ = Py_False; /* zero */
if (!PyArg_ParseTuple(args, "|O", &index_))
return NULL;