[Python-checkins] python/dist/src/Modules _sre.c,2.99.8.1,2.99.8.2

tim_one at users.sourceforge.net tim_one at users.sourceforge.net
Fri Nov 21 22:46:32 EST 2003


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv14020/Modules
Modified Files:
 Tag: release23-maint
	_sre.c 
Log Message:
Indented and repaired the maze of #ifdefs setting USE_RECURSION_LIMIT.
Indented because it was incomprehensible. "Repaired" means someone
checked in a change that screwed up the multiple nesting levels, causing
USE_RECURSION_LIMIT to stop getting defined on all non-LP64 boxes other
than FreeBSD. Tried to repair that in a more-robust way. That error
in turn caused a bogus change to get checked in to test_re.py, which I
repaired earlier.
This needs fresh testing on all non-Win32 platforms (Win32 never used
USE_RECURSION_LIMIT, and still doesn't). Running the standard test_re.py
is an adequate test.
Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.99.8.1
retrieving revision 2.99.8.2
diff -C2 -d -r2.99.8.1 -r2.99.8.2
*** _sre.c	20 Oct 2003 20:59:45 -0000	2.99.8.1
--- _sre.c	22 Nov 2003 03:46:30 -0000	2.99.8.2
***************
*** 66,99 ****
 /* 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
 
! #elif defined(__FreeBSD__)
! /* FreeBSD/amd64 and /sparc64 require even smaller limits */
! #if defined(__amd64__)
! #define USE_RECURSION_LIMIT 6000
! #elif defined(__sparc64__)
! #define USE_RECURSION_LIMIT 3000
! #elif defined(__GNUC__) && defined(WITH_THREAD)
! /* 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 fast searching */
--- 66,102 ----
 /* prevent run-away recursion (bad patterns on long strings) */
 
! #ifndef 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
 
! #elif defined(__FreeBSD__)
! /* FreeBSD/amd64 and /sparc64 require even smaller limits */
! #if defined(__amd64__)
! #define USE_RECURSION_LIMIT 6000
! #elif defined(__sparc64__)
! #define USE_RECURSION_LIMIT 3000
! #elif defined(__GNUC__) && defined(WITH_THREAD)
! /* 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
! #endif
! #endif 	/* special cases for USE_RECURSION_LIMIT */
 
! #ifndef USE_RECURSION_LIMIT		/* default if not overriden above */
! #define USE_RECURSION_LIMIT 10000
! #endif
! #endif	/* !USE_STACKCHECK */
 
 /* enables fast searching */
***************
*** 210,214 ****
 }
 
! #endif
 
 LOCAL(int)
--- 213,217 ----
 }
 
! #endif	/* HAVE_UNICODE */
 
 LOCAL(int)
***************
*** 526,530 ****
 return ok;
 set += 16;
! } 
 else {
 /* <CHARSET> <bitmap> (32 bits per code word) */
--- 529,533 ----
 return ok;
 set += 16;
! }
 else {
 /* <CHARSET> <bitmap> (32 bits per code word) */
***************
*** 554,558 ****
 block = -1;
 set += 64;
! if (block >=0 && 
 (set[block*8 + ((ch & 255)>>5)] & (1 << (ch & 31))))
 return ok;
--- 557,561 ----
 block = -1;
 set += 64;
! if (block >=0 &&
 (set[block*8 + ((ch & 255)>>5)] & (1 << (ch & 31))))
 return ok;
***************
*** 637,641 ****
 ptr++;
 break;
! 
 case SRE_OP_NOT_LITERAL_IGNORE:
 /* repeated non-literal */
--- 640,644 ----
 ptr++;
 break;
! 
 case SRE_OP_NOT_LITERAL_IGNORE:
 /* repeated non-literal */
***************
*** 720,724 ****
 * outside 'for' loop: must be protected when breaking, since the next
 * OP could potentially depend on lastmark;
! * 
 * - Recursive SRE_MATCH() returned false, and will be called again
 * inside a local for/while loop: must be protected between each
--- 723,727 ----
 * outside 'for' loop: must be protected when breaking, since the next
 * OP could potentially depend on lastmark;
! *
 * - Recursive SRE_MATCH() returned false, and will be called again
 * inside a local for/while loop: must be protected between each
***************
*** 1108,1112 ****
 return count; /* exception */
 if (count < (int) pattern[1])
! return 0; /* did not match minimum number of times */ 
 ptr += count; /* advance past minimum matches of repeat */
 }
--- 1111,1115 ----
 return count; /* exception */
 if (count < (int) pattern[1])
! return 0; /* did not match minimum number of times */
 ptr += count; /* advance past minimum matches of repeat */
 }
***************
*** 1358,1362 ****
 break;
 }
! 
 }
 ptr++;
--- 1361,1365 ----
 break;
 }
! 
 }
 ptr++;
***************
*** 1413,1417 ****
 return status;
 }
! 
 LOCAL(int)
 SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, int len)
--- 1416,1420 ----
 return status;
 }
! 
 LOCAL(int)
 SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, int len)
***************
*** 1535,1539 ****
 characters), and a character size. return NULL if the object
 is not a string (or not compatible) */
! 
 PyBufferProcs *buffer;
 int size, bytes, charsize;
--- 1538,1542 ----
 characters), and a character size. return NULL if the object
 is not a string (or not compatible) */
! 
 PyBufferProcs *buffer;
 int size, bytes, charsize;
***************
*** 2011,2015 ****
 
 PyObject* item;
! 
 state_reset(&state);
 
--- 2014,2018 ----
 
 PyObject* item;
! 
 state_reset(&state);
 
***************
*** 2030,2034 ****
 goto error;
 }
! 
 /* don't bother to build a match object */
 switch (self->groups) {
--- 2033,2037 ----
 goto error;
 }
! 
 /* don't bother to build a match object */
 switch (self->groups) {
***************
*** 2079,2083 ****
 state_fini(&state);
 return NULL;
! 
 }
 
--- 2082,2086 ----
 state_fini(&state);
 return NULL;
! 
 }
 
***************
*** 2157,2161 ****
 goto error;
 }
! 
 if (state.start == state.ptr) {
 if (last == state.end)
--- 2160,2164 ----
 goto error;
 }
! 
 if (state.start == state.ptr) {
 if (last == state.end)
***************
*** 2213,2217 ****
 state_fini(&state);
 return NULL;
! 
 }
 
--- 2216,2220 ----
 state_fini(&state);
 return NULL;
! 
 }
 
***************
*** 2304,2308 ****
 goto error;
 }
! 
 b = STATE_OFFSET(&state, state.start);
 e = STATE_OFFSET(&state, state.ptr);
--- 2307,2311 ----
 goto error;
 }
! 
 b = STATE_OFFSET(&state, state.start);
 e = STATE_OFFSET(&state, state.ptr);
***************
*** 2350,2354 ****
 goto error;
 }
! 
 i = e;
 n = n + 1;
--- 2353,2357 ----
 goto error;
 }
! 
 i = e;
 n = n + 1;
***************
*** 2394,2398 ****
 Py_DECREF(filter);
 return NULL;
! 
 }
 
--- 2397,2401 ----
 Py_DECREF(filter);
 return NULL;
! 
 }
 
***************
*** 2434,2438 ****
 if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
 return NULL;
! 
 copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize);
 if (!copy)
--- 2437,2441 ----
 if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
 return NULL;
! 
 copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize);
 if (!copy)
***************
*** 2460,2464 ****
 #ifdef USE_BUILTIN_COPY
 PatternObject* copy;
! 
 PyObject* memo;
 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
--- 2463,2467 ----
 #ifdef USE_BUILTIN_COPY
 PatternObject* copy;
! 
 PyObject* memo;
 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
***************
*** 2498,2502 ****
 };
 
! static PyObject* 
 pattern_getattr(PatternObject* self, char* name)
 {
--- 2501,2505 ----
 };
 
! static PyObject*
 pattern_getattr(PatternObject* self, char* name)
 {
***************
*** 2859,2863 ****
 MatchObject* copy;
 int slots, offset;
! 
 if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
 return NULL;
--- 2862,2866 ----
 MatchObject* copy;
 int slots, offset;
! 
 if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
 return NULL;
***************
*** 2892,2896 ****
 #ifdef USE_BUILTIN_COPY
 MatchObject* copy;
! 
 PyObject* memo;
 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
--- 2895,2899 ----
 #ifdef USE_BUILTIN_COPY
 MatchObject* copy;
! 
 PyObject* memo;
 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
***************
*** 2927,2931 ****
 };
 
! static PyObject* 
 match_getattr(MatchObject* self, char* name)
 {
--- 2930,2934 ----
 };
 
! static PyObject*
 match_getattr(MatchObject* self, char* name)
 {
***************
*** 3085,3089 ****
 };
 
! static PyObject* 
 scanner_getattr(ScannerObject* self, char* name)
 {
--- 3088,3092 ----
 };
 
! static PyObject*
 scanner_getattr(ScannerObject* self, char* name)
 {
***************
*** 3122,3126 ****
 };
 
! #if PY_VERSION_HEX < 0x02030000 
 DL_EXPORT(void) init_sre(void)
 #else
--- 3125,3129 ----
 };
 
! #if PY_VERSION_HEX < 0x02030000
 DL_EXPORT(void) init_sre(void)
 #else


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /