[Python-checkins] python/dist/src/Modules _sre.c,2.102,2.103
niemeyer at users.sourceforge.net
niemeyer at users.sourceforge.net
Sat Dec 13 15:32:21 EST 2003
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv22912/Modules
Modified Files:
_sre.c
Log Message:
Cleaning up recursive pieces left in the reorganization.
Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.102
retrieving revision 2.103
diff -C2 -d -r2.102 -r2.103
*** _sre.c 18 Oct 2003 20:54:44 -0000 2.102
--- _sre.c 13 Dec 2003 20:32:08 -0000 2.103
***************
*** 65,99 ****
/* optional features */
- /* prevent run-away recursion (bad patterns on long strings) */
-
- #if !defined(USE_STACKCHECK)
- #if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64)
- /* require smaller recursion limit for a number of 64-bit platforms:
- Win64 (MS_WIN64), Linux64 (__LP64__), Monterey (64-bit AIX) (_LP64) */
- /* FIXME: maybe the limit should be 40000 / sizeof(void*) ? */
- #define USE_RECURSION_LIMIT 7500
- #else
-
- #if defined(__GNUC__) && defined(WITH_THREAD) && defined(__FreeBSD__)
- /* the pthreads library on FreeBSD has a fixed 1MB stack size for the
- * initial (or "primary") thread, which is insufficient for the default
- * recursion limit. gcc 3.x at the default optimisation
- * level (-O3) uses stack space more aggressively than gcc 2.95.
- */
- #if (__GNUC__ > 2)
- #define USE_RECURSION_LIMIT 6500
- #else
- #define USE_RECURSION_LIMIT 7500
- #endif
-
- #else
- #define USE_RECURSION_LIMIT 10000
- #endif
- #endif
- #endif
-
- /* enables usage of recursive scheme */
- #undef USE_RECURSION
-
/* enables fast searching */
#define USE_FAST_SEARCH
--- 65,68 ----
***************
*** 537,544 ****
}
! LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level);
LOCAL(int)
! SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, int maxcount, int level)
{
SRE_CODE chr;
--- 506,513 ----
}
! LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern);
LOCAL(int)
! SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, int maxcount)
{
SRE_CODE chr;
***************
*** 610,614 ****
TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
while ((SRE_CHAR*) state->ptr < end) {
! i = SRE_MATCH(state, pattern, level);
if (i < 0)
return i;
--- 579,583 ----
TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
while ((SRE_CHAR*) state->ptr < end) {
! i = SRE_MATCH(state, pattern);
if (i < 0)
return i;
***************
*** 828,832 ****
error, 0 for failure, and 1 for success */
LOCAL(int)
! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level)
{
SRE_CHAR* end = state->end;
--- 797,801 ----
error, 0 for failure, and 1 for success */
LOCAL(int)
! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
{
SRE_CHAR* end = state->end;
***************
*** 838,852 ****
SRE_MATCH_CONTEXT* nextctx;
! TRACE(("|%p|%p|ENTER %d\n", pattern, state->ptr, level));
!
! #if defined(USE_STACKCHECK)
! if (level % 10 == 0 && PyOS_CheckStack())
! return SRE_ERROR_RECURSION_LIMIT;
! #endif
!
! #if defined(USE_RECURSION_LIMIT)
! if (level > USE_RECURSION_LIMIT)
! return SRE_ERROR_RECURSION_LIMIT;
! #endif
DATA_ALLOC(SRE_MATCH_CONTEXT, ctx);
--- 807,811 ----
SRE_MATCH_CONTEXT* nextctx;
! TRACE(("|%p|%p|ENTER\n", pattern, state->ptr));
DATA_ALLOC(SRE_MATCH_CONTEXT, ctx);
***************
*** 1030,1038 ****
continue;
state->ptr = ctx->ptr;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+1, level+1);
- #else
DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1);
- #endif
if (ret) {
if (ctx->u.rep)
--- 989,993 ----
***************
*** 1067,1072 ****
state->ptr = ctx->ptr;
! ctx->count = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2],
! level+1);
RETURN_ON_ERROR(ctx->count);
--- 1022,1026 ----
state->ptr = ctx->ptr;
! ctx->count = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]);
RETURN_ON_ERROR(ctx->count);
***************
*** 1102,1112 ****
break;
state->ptr = ctx->ptr;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+ctx->pattern[0],
- level+1);
- #else
DO_JUMP(JUMP_REPEAT_ONE_1, jump_repeat_one_1,
ctx->pattern+ctx->pattern[0]);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1056,1061 ----
***************
*** 1124,1134 ****
while (ctx->count >= (int) ctx->pattern[1]) {
state->ptr = ctx->ptr;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+ctx->pattern[0],
- level+1);
- #else
DO_JUMP(JUMP_REPEAT_ONE_2, jump_repeat_one_2,
ctx->pattern+ctx->pattern[0]);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1073,1078 ----
***************
*** 1165,1169 ****
/* count using pattern min as the maximum */
ctx->count = SRE_COUNT(state, ctx->pattern+3,
! ctx->pattern[1], level+1);
RETURN_ON_ERROR(ctx->count);
if (ctx->count < (int) ctx->pattern[1])
--- 1109,1113 ----
/* count using pattern min as the maximum */
ctx->count = SRE_COUNT(state, ctx->pattern+3,
! ctx->pattern[1]);
RETURN_ON_ERROR(ctx->count);
if (ctx->count < (int) ctx->pattern[1])
***************
*** 1185,1195 ****
|| ctx->count <= (int)ctx->pattern[2]) {
state->ptr = ctx->ptr;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+ctx->pattern[0],
- level+1);
- #else
DO_JUMP(JUMP_MIN_REPEAT_ONE,jump_min_repeat_one,
ctx->pattern+ctx->pattern[0]);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1129,1134 ----
***************
*** 1197,1201 ****
}
state->ptr = ctx->ptr;
! ret = SRE_COUNT(state, ctx->pattern+3, 1, level+1);
RETURN_ON_ERROR(ret);
if (ret == 0)
--- 1136,1140 ----
}
state->ptr = ctx->ptr;
! ret = SRE_COUNT(state, ctx->pattern+3, 1);
RETURN_ON_ERROR(ret);
if (ret == 0)
***************
*** 1225,1233 ****
state->ptr = ctx->ptr;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+ctx->pattern[0], level+1);
- #else
DO_JUMP(JUMP_REPEAT, jump_repeat, ctx->pattern+ctx->pattern[0]);
- #endif
state->repeat = ctx->u.rep->prev;
free(ctx->u.rep);
--- 1164,1168 ----
***************
*** 1260,1270 ****
/* not enough matches */
ctx->u.rep->count = ctx->count;
- #ifdef USE_RECURSION
- /* RECURSIVE */
- ret = SRE_MATCH(state, ctx->u.rep->pattern+3, level+1);
- #else
DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1,
ctx->u.rep->pattern+3);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1195,1200 ----
***************
*** 1287,1297 ****
DATA_PUSH(&ctx->u.rep->last_ptr);
ctx->u.rep->last_ptr = state->ptr;
- #ifdef USE_RECURSION
- /* RECURSIVE */
- ret = SRE_MATCH(state, ctx->u.rep->pattern+3, level+1);
- #else
DO_JUMP(JUMP_MAX_UNTIL_2, jump_max_until_2,
ctx->u.rep->pattern+3);
- #endif
DATA_POP(&ctx->u.rep->last_ptr);
if (ret) {
--- 1217,1222 ----
***************
*** 1309,1317 ****
tail matches */
state->repeat = ctx->u.rep->prev;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern, level+1);
- #else
DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, ctx->pattern);
- #endif
RETURN_ON_SUCCESS(ret);
state->repeat = ctx->u.rep;
--- 1234,1238 ----
***************
*** 1337,1347 ****
/* not enough matches */
ctx->u.rep->count = ctx->count;
- #ifdef USE_RECURSION
- /* RECURSIVE */
- ret = SRE_MATCH(state, ctx->u.rep->pattern+3, level+1);
- #else
DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1,
ctx->u.rep->pattern+3);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1258,1263 ----
***************
*** 1357,1365 ****
/* see if the tail matches */
state->repeat = ctx->u.rep->prev;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern, level+1);
- #else
DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, ctx->pattern);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1273,1277 ----
***************
*** 1377,1387 ****
ctx->u.rep->count = ctx->count;
- #ifdef USE_RECURSION
- /* RECURSIVE */
- ret = SRE_MATCH(state, ctx->u.rep->pattern+3, level+1);
- #else
DO_JUMP(JUMP_MIN_UNTIL_3,jump_min_until_3,
ctx->u.rep->pattern+3);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1289,1294 ----
***************
*** 1471,1479 ****
if (state->ptr < state->beginning)
RETURN_FAILURE;
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+2, level+1);
- #else
DO_JUMP(JUMP_ASSERT, jump_assert, ctx->pattern+2);
- #endif
RETURN_ON_FAILURE(ret);
ctx->pattern += ctx->pattern[0];
--- 1378,1382 ----
***************
*** 1487,1495 ****
state->ptr = ctx->ptr - ctx->pattern[1];
if (state->ptr >= state->beginning) {
- #ifdef USE_RECURSION
- ret = SRE_MATCH(state, ctx->pattern+2, level+1);
- #else
DO_JUMP(JUMP_ASSERT_NOT, jump_assert_not, ctx->pattern+2);
- #endif
if (ret) {
RETURN_ON_ERROR(ret);
--- 1390,1394 ----
***************
*** 1520,1524 ****
DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
- #ifndef USE_RECURSION
switch (jump) {
case JUMP_MAX_UNTIL_2:
--- 1419,1422 ----
***************
*** 1565,1569 ****
break;
}
- #endif
return ret; /* should never get here */
--- 1463,1466 ----
***************
*** 1636,1640 ****
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
! status = SRE_MATCH(state, pattern + 2*prefix_skip, 1);
if (status != 0)
return status;
--- 1533,1537 ----
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
! status = SRE_MATCH(state, pattern + 2*prefix_skip);
if (status != 0)
return status;
***************
*** 1667,1671 ****
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
! status = SRE_MATCH(state, pattern + 2, 1);
if (status != 0)
break;
--- 1564,1568 ----
if (flags & SRE_INFO_LITERAL)
return 1; /* we got all of it */
! status = SRE_MATCH(state, pattern + 2);
if (status != 0)
break;
***************
*** 1682,1686 ****
state->start = ptr;
state->ptr = ptr;
! status = SRE_MATCH(state, pattern, 1);
if (status != 0)
break;
--- 1579,1583 ----
state->start = ptr;
state->ptr = ptr;
! status = SRE_MATCH(state, pattern);
if (status != 0)
break;
***************
*** 1692,1696 ****
TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
state->start = state->ptr = ptr++;
! status = SRE_MATCH(state, pattern, 1);
if (status != 0)
break;
--- 1589,1593 ----
TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
state->start = state->ptr = ptr++;
! status = SRE_MATCH(state, pattern);
if (status != 0)
break;
***************
*** 2115,2122 ****
if (state.charsize == 1) {
! status = sre_match(&state, PatternObject_GetCode(self), 1);
} else {
#if defined(HAVE_UNICODE)
! status = sre_umatch(&state, PatternObject_GetCode(self), 1);
#endif
}
--- 2012,2019 ----
if (state.charsize == 1) {
! status = sre_match(&state, PatternObject_GetCode(self));
} else {
#if defined(HAVE_UNICODE)
! status = sre_umatch(&state, PatternObject_GetCode(self));
#endif
}
***************
*** 3312,3319 ****
if (state->charsize == 1) {
! status = sre_match(state, PatternObject_GetCode(self->pattern), 1);
} else {
#if defined(HAVE_UNICODE)
! status = sre_umatch(state, PatternObject_GetCode(self->pattern), 1);
#endif
}
--- 3209,3216 ----
if (state->charsize == 1) {
! status = sre_match(state, PatternObject_GetCode(self->pattern));
} else {
#if defined(HAVE_UNICODE)
! status = sre_umatch(state, PatternObject_GetCode(self->pattern));
#endif
}
More information about the Python-checkins
mailing list