1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/* Long (arbitrary precision) integer object implementation */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* XXX The functional organization of this file is terrible */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "Python.h" 
  
						 
					
						
							
								
									
										
										
										
											2020-06-08 16:30:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_bitutils.h"      // _Py_popcount32() 
  
						 
					
						
							
								
									
										
										
										
											2021-12-09 12:59:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_initconfig.h"    // _PyStatus_OK() 
  
						 
					
						
							
								
									
										
										
										
											2023-11-02 15:07:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_call.h"          // _PyObject_MakeTpCall 
  
						 
					
						
							
								
									
										
										
										
											2021-11-03 16:22:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_long.h"          // _Py_SmallInts 
  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_object.h"        // _PyObject_Init() 
  
						 
					
						
							
								
									
										
										
										
											2021-12-09 12:59:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_runtime.h"       // _PY_NSMALLPOSINTS 
  
						 
					
						
							
								
									
										
										
										
											2023-05-01 15:08:34 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "pycore_structseq.h"     // _PyStructSequence_FiniBuiltin() 
  
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-09-03 18:54:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <float.h>                // DBL_MANT_DIG 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <stddef.h>               // offsetof 
  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "clinic/longobject.c.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  int  " PyObject * "  " &PyLong_Type "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ec0275e3422a36e3]*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define medium_value(x) ((stwodigits)_PyLong_CompactValue(x)) 
  
						 
					
						
							
								
									
										
										
										
											2008-07-24 18:57:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-03 16:22:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define IS_SMALL_INT(ival) (-_PY_NSMALLNEGINTS <= (ival) && (ival) < _PY_NSMALLPOSINTS) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS) 
  
						 
					
						
							
								
									
										
										
										
											2019-08-24 10:19:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-12-12 03:39:54 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define _MAX_STR_DIGITS_ERROR_FMT_TO_INT "Exceeds the limit (%d digits) for integer string conversion: value has %zd digits; use sys.set_int_max_str_digits() to increase the limit" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define _MAX_STR_DIGITS_ERROR_FMT_TO_STR "Exceeds the limit (%d digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit" 
  
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* If defined, use algorithms from the _pylong.py module */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define WITH_PYLONG_MODULE 1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  inline  void  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_Py_DECREF_INT ( PyLongObject  * op )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_CheckExact ( op ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-20 11:15:45 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_SPECIALIZED ( ( PyObject  * ) op ,  ( destructor ) PyObject_Free ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  inline  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is_medium_int ( stwodigits  x )  
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Take care that we are comparing unsigned values. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  x_plus_mask  =  ( ( twodigits ) x )  +  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  x_plus_mask  <  ( ( twodigits ) PyLong_MASK )  +  PyLong_BASE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 55962-56019 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
  r55985 | neal.norwitz | 2007-06-14 20:14:38 -0700 (Thu, 14 Jun 2007) | 2 lines
  All these tests have been flaky wrt reporting leaks.  Disable them.
................
  r56003 | neal.norwitz | 2007-06-15 19:41:09 -0700 (Fri, 15 Jun 2007) | 1 line
  Fix typo (certain).
................
  r56004 | neal.norwitz | 2007-06-15 20:54:18 -0700 (Fri, 15 Jun 2007) | 4 lines
  Fix it so test_os no longer reports ref leaks by clearing all the caches
  the ABCMeta stores on the class.  Apply this to all the ABC collections
  as well as the class of os.environ which inherits from an ABC collection.
................
  r56013 | neal.norwitz | 2007-06-17 19:56:31 -0700 (Sun, 17 Jun 2007) | 4 lines
  This should make it a little easier when adding new collections which use ABCs.
  The new subclass won't need to be listed in regrtest.
  It will be even better when Guido adds weakrefs. :-)
................
  r56014 | martin.v.loewis | 2007-06-17 20:15:51 -0700 (Sun, 17 Jun 2007) | 1 line
  Drop inline, as it's not support by VS 2003.
................
  r56015 | martin.v.loewis | 2007-06-17 20:17:19 -0700 (Sun, 17 Jun 2007) | 1 line
  Expect long objects for DWORD values.
................
  r56016 | martin.v.loewis | 2007-06-17 20:18:01 -0700 (Sun, 17 Jun 2007) | 1 line
  Drop modules that have been deleted.
................
  r56017 | martin.v.loewis | 2007-06-17 20:18:55 -0700 (Sun, 17 Jun 2007) | 1 line
  Bump DLL version number to 30.
................
  r56018 | neal.norwitz | 2007-06-17 20:55:43 -0700 (Sun, 17 Jun 2007) | 62 lines
  Merged revisions 55951-56013 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk
  ........
    r55956 | thomas.heller | 2007-06-13 00:07:03 -0700 (Wed, 13 Jun 2007) | 2 lines
    Do not hardcode the buildbot's directory name.
  ........
    r55957 | thomas.heller | 2007-06-13 00:07:41 -0700 (Wed, 13 Jun 2007) | 2 lines
    Notes about building tcl/tk for windows/AMD64.
  ........
    r55958 | thomas.heller | 2007-06-13 00:54:57 -0700 (Wed, 13 Jun 2007) | 2 lines
    Build bzip2.
  ........
    r55962 | walter.doerwald | 2007-06-13 09:57:12 -0700 (Wed, 13 Jun 2007) | 8 lines
    Add T_PYSSIZET in structmember.h: This can be used for
    Py_ssize_t members.
    Simplify the implementation of UnicodeError objects:
    start and end attributes are now stored directly as
    Py_ssize_t members, which simplifies various get and
    set functions.
  ........
    r55975 | martin.v.loewis | 2007-06-14 13:46:25 -0700 (Thu, 14 Jun 2007) | 3 lines
    Patch #1734014: Use _I64_MAX instead of LLONG_MAX.
    Will backport to 2.5.
  ........
    r55984 | neal.norwitz | 2007-06-14 20:11:41 -0700 (Thu, 14 Jun 2007) | 4 lines
    urllib2_localnet says it leaks probably due to threads. So ignore it.
    popen2 is also complaining probably for similar reasons.
    make install always reports failure, so don't mail in this case.
  ........
    r56001 | andrew.kuchling | 2007-06-15 15:43:03 -0700 (Fri, 15 Jun 2007) | 1 line
    Add a word
  ........
    r56005 | martin.v.loewis | 2007-06-16 03:08:43 -0700 (Sat, 16 Jun 2007) | 2 lines
    Mention Senthil Kumaran.
  ........
    r56006 | georg.brandl | 2007-06-16 10:10:12 -0700 (Sat, 16 Jun 2007) | 2 lines
    Add missing \versionadded.
  ........
    r56009 | neal.norwitz | 2007-06-17 11:48:32 -0700 (Sun, 17 Jun 2007) | 1 line
    SF #1738670, make example in doc work
  ........
    r56011 | neal.norwitz | 2007-06-17 19:46:36 -0700 (Sun, 17 Jun 2007) | 1 line
    SF #1738754, remove extra backslash in string
  ........
    r56012 | neal.norwitz | 2007-06-17 19:50:15 -0700 (Sun, 17 Jun 2007) | 1 line
    Revert last change for SF #1738754, there's no print in there.
  ........
................
											 
										 
										
											2007-06-18 17:58:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2009-02-15 15:14:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								get_small_int ( sdigit  ival )  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( IS_SMALL_INT ( ival ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-22 15:39:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) & _PyLong_SMALL_INTS [ _PY_NSMALLNEGINTS  +  ival ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2008-07-24 18:57:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								maybe_small_long ( PyLongObject  * v )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( v  & &  _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        stwodigits  ival  =  medium_value ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            _Py_DECREF_INT ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  ( PyLongObject  * ) get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  v ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-24 18:57:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* For int multiplication, use the O(N**2) school algorithm unless
  
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  both  operands  contain  more  than  KARATSUBA_CUTOFF  digits  ( this 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  being  an  internal  Python  int  digit ,  in  base  BASE ) . 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-29 22:16:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define KARATSUBA_CUTOFF 70 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF) 
  
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* For exponentiation, use the binary left-to-right algorithm unless the
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 ^  exponent  contains  more  than  HUGE_EXP_CUTOFF  bits .   In  that  case ,  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ( no  more  than )  EXP_WINDOW_SIZE  bits  at  a  time .   The  potential  drawback  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  that  a  table  of  2 * * ( EXP_WINDOW_SIZE  -  1 )  intermediate  results  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  precomputed . 
							 
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define EXP_WINDOW_SIZE 5 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define EXP_TABLE_LEN (1 << (EXP_WINDOW_SIZE - 1)) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Suppose the exponent has bit length e. All ways of doing this
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  need  e  squarings .  The  binary  method  also  needs  a  multiply  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  each  bit  set .  In  a  k - ary  method  with  window  width  w ,  a  multiply 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  for  each  non - zero  window ,  so  at  worst  ( and  likely ! ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ceiling ( e / w ) .  The  k - ary  sliding  window  method  has  the  same 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  worst  case ,  but  the  window  slides  so  it  can  sometimes  skip 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  over  an  all - zero  window  that  the  fixed - window  method  can ' t 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  exploit .  In  addition ,  the  windowing  methods  need  multiplies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  to  precompute  a  table  of  small  powers . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  For  the  sliding  window  method  with  width  5 ,  16  precomputation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  multiplies  are  needed .  Assuming  about  half  the  exponent  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  are  set ,  then ,  the  binary  method  needs  about  e / 2  extra  mults 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  and  the  window  method  about  16  +  e / 5. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  The  latter  is  smaller  for  e  >  53  1 / 3.  We  don ' t  have  direct 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  access  to  the  bit  length ,  though ,  so  call  it  60 ,  which  is  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  multiple  of  a  long  digit ' s  max  bit  length  ( 15  or  30  so  far ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define HUGE_EXP_CUTOFF 60 
  
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define SIGCHECK(PyTryBlock)                    \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {                                         \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( PyErr_CheckSignals ( ) )  PyTryBlock     \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while ( 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Normalize (remove leading zeros from) an int object.
  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								   Doesn ' t  attempt  to  free  the  storage - - in  most  cases ,  due  to  the  nature 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   of  the  algorithms  used ,  this  could  save  at  most  be  one  word  anyway .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_normalize ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  j  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i  =  j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( i  >  0  & &  v - > long_value . ob_digit [ i - 1 ]  = =  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        - - i ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( i  ! =  j )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( i  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_SetSignAndDigitCount ( v ,  0 ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_SetDigitCount ( v ,  i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  v ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Allocate a new int object with size digits.
  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								   Return  NULL  and  set  exception  if  we  run  out  of  memory .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 11:04:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define MAX_LONG_DIGITS \ 
  
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( ( PY_SSIZE_T_MAX  -  offsetof ( PyLongObject ,  long_value . ob_digit ) ) / sizeof ( digit ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-15 11:04:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_PyLong_New ( Py_ssize_t  size )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( size  > =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size  >  ( Py_ssize_t ) MAX_LONG_DIGITS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " too many digits in integer " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Fast operations for single digit integers (including zero)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  assume  that  there  is  always  at  least  one  digit  present .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits  =  size  ?  size  :  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       sizeof ( digit ) * size .   Previous  incarnations  of  this  code  used 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       sizeof ( )  instead  of  the  offsetof ,  but  this  risks  being 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       incorrect  in  the  presence  of  padding  between  the  header 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       and  the  digits .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    result  =  PyObject_Malloc ( offsetof ( PyLongObject ,  long_value . ob_digit )  + 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                             ndigits * sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_NoMemory ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyLong_SetSignAndDigitCount ( result ,  size  ! =  0 ,  size ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _PyObject_Init ( ( PyObject * ) result ,  & PyLong_Type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-28 16:39:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* The digit has to be initialized explicitly to avoid
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  use - of - uninitialized - value .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result - > long_value . ob_digit [ 0 ]  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromDigits ( int  negative ,  Py_ssize_t  digit_count ,  digit  * digits )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( digit_count  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( digit_count  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-04 16:24:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( PyLongObject  * ) _PyLong_GetZero ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * result  =  _PyLong_New ( digit_count ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_NoMemory ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _PyLong_SetSignAndDigitCount ( result ,  negative ? - 1 : 1 ,  digit_count ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    memcpy ( result - > long_value . ob_digit ,  digits ,  digit_count  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-16 01:28:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-09-10 20:52:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Copy ( PyLongObject  * src )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( src  ! =  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( src ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        stwodigits  ival  =  medium_value ( src ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-24 10:19:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size  =  _PyLong_DigitCount ( src ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) _PyLong_FromDigits ( _PyLong_IsNegative ( src ) ,  size ,  src - > long_value . ob_digit ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-09-10 20:52:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromMedium ( sdigit  x )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( ! IS_SMALL_INT ( x ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( is_medium_int ( x ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* We could use a freelist here */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * v  =  PyObject_Malloc ( sizeof ( PyLongObject ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_NoMemory ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  abs_x  =  x  <  0  ?  - x  :  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyLong_SetSignAndDigitCount ( v ,  x < 0 ? - 1 : 1 ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _PyObject_Init ( ( PyObject * ) v ,  & PyLong_Type ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    v - > long_value . ob_digit [ 0 ]  =  abs_x ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject * ) v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromLarge ( stwodigits  ival )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    twodigits  abs_ival ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-10 20:17:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ! is_medium_int ( ival ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ival  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* negate: can't write this as abs_ival = -ival since that
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           invokes  undefined  behaviour  when  ival  is  LONG_MIN  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        abs_ival  =  0U - ( twodigits ) ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        abs_ival  =  ( twodigits ) ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Must be at least two digits */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( abs_ival  > >  PyLong_SHIFT  ! =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  t  =  abs_ival  > >  ( PyLong_SHIFT  *  2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits  =  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * v  =  _PyLong_New ( ndigits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * p  =  v - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( v ,  sign ,  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t  =  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p + +  =  Py_SAFE_DOWNCAST ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                t  &  PyLong_MASK ,  twodigits ,  digit ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Create a new int object from a C word-sized int */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  inline  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromSTwoDigits ( stwodigits  x )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( IS_SMALL_INT ( x ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  get_small_int ( ( sdigit ) x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( x  ! =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( is_medium_int ( x ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_FromMedium ( ( sdigit ) x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_FromLarge ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* If a freshly-allocated int is already shared, it must
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   be  a  small  integer ,  so  negating  it  must  go  to  PyLong_FromLong  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Py_LOCAL_INLINE ( void )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Negate ( PyLongObject  * * x_p )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  ( PyLongObject  * ) * x_p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( Py_REFCNT ( x )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         _PyLong_FlipSign ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * x_p  =  ( PyLongObject  * ) _PyLong_FromSTwoDigits ( - medium_value ( x ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Create a new int object from a C long int */  
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromLong ( long  ival )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  abs_ival ,  t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Handle small and medium cases. */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-24 10:19:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( - ( long ) PyLong_MASK  < =  ival  & &  ival  < =  ( long ) PyLong_MASK )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromMedium ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Count digits (at least two - smaller cases were handled above). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    abs_ival  =  ival  <  0  ?  0U - ( unsigned  long ) ival  :  ( unsigned  long ) ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Do shift in two steps to avoid possible undefined behavior. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t  =  abs_ival  > >  PyLong_SHIFT  > >  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ndigits  =  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Construct output value. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( v  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * p  =  v - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( v ,  ival  <  0  ?  - 1  :  1 ,  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t  =  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( t )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            * p + +  =  ( digit ) ( t  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) v ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-12 19:41:14 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define PYLONG_FROM_UINT(INT_TYPE, ival) \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( IS_SMALL_UINT ( ival ) )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2019-10-01 13:29:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  get_small_int ( ( sdigit ) ( ival ) ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2019-09-12 19:41:14 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Count the number of Python digits. */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  ndigits  =  0 ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        INT_TYPE  t  =  ( ival ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( t )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + ndigits ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  > > =  PyLong_SHIFT ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyLongObject  * v  =  _PyLong_New ( ndigits ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( v  = =  NULL )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  NULL ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  \
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * p  =  v - > long_value . ob_digit ;  \
							 
						 
					
						
							
								
									
										
										
										
											2019-09-12 19:41:14 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( ( ival ) )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p + +  =  ( digit ) ( ( ival )  &  PyLong_MASK ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ival )  > > =  PyLong_SHIFT ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( PyObject  * ) v ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while ( 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C unsigned long int */  
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_FromUnsignedLong ( unsigned  long  ival )  
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2019-09-12 19:41:14 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PYLONG_FROM_UINT ( unsigned  long ,  ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-12 19:41:14 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C unsigned long long int. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromUnsignedLongLong ( unsigned  long  long  ival )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PYLONG_FROM_UINT ( unsigned  long  long ,  ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Create a new int object from a C size_t. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromSize_t ( size_t  ival )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PYLONG_FROM_UINT ( size_t ,  ival ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C double */  
						 
					
						
							
								
									
										
										
										
											1991-06-03 10:58:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromDouble ( double  dval )  
						 
					
						
							
								
									
										
										
										
											1991-06-03 10:58:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2020-05-10 14:15:57 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Try to get out cheap if this fits in a long. When a finite value of real
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  floating  type  is  converted  to  an  integer  type ,  the  value  is  truncated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  toward  zero .  If  the  value  of  the  integral  part  cannot  be  represented  by 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  the  integer  type ,  the  behavior  is  undefined .  Thus ,  we  must  check  that 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  value  is  in  range  ( LONG_MIN  -  1 ,  LONG_MAX  +  1 ) .  If  a  long  has  more  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  of  precision  than  a  double ,  casting  LONG_MIN  -  1  to  double  may  yield  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  approximation ,  but  LONG_MAX  +  1  is  a  power  of  two  and  can  be  represented 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  as  double  exactly  ( assuming  FLT_RADIX  is  2  or  16 ) ,  so  for  simplicity 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  check  against  [ - ( LONG_MAX  +  1 ) ,  LONG_MAX  +  1 ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  double  int_max  =  ( unsigned  long ) LONG_MAX  +  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( - int_max  <  dval  & &  dval  <  int_max )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( ( long ) dval ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    double  frac ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  i ,  ndig ,  expo ,  neg ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    neg  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( Py_IS_INFINITY ( dval ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " cannot convert float infinity to integer " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( Py_IS_NAN ( dval ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " cannot convert float NaN to integer " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( dval  <  0.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        neg  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dval  =  - dval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    frac  =  frexp ( dval ,  & expo ) ;  /* dval = frac*2**expo; 0.0 <= frac < 1.0 */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 14:15:57 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( expo  >  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ndig  =  ( expo - 1 )  /  PyLong_SHIFT  +  1 ;  /* Number of 'digits' in result */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( ndig ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    frac  =  ldexp ( frac ,  ( expo - 1 )  %  PyLong_SHIFT  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  ndig ;  - - i  > =  0 ;  )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  bits  =  ( digit ) frac ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v - > long_value . ob_digit [ i ]  =  bits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        frac  =  frac  -  ( double ) bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        frac  =  ldexp ( frac ,  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( neg )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) v ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-06-03 10:58:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Four months of trunk changes (including a few releases...)
Merged revisions 51434-53004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r51434 | neal.norwitz | 2006-08-21 20:20:10 +0200 (Mon, 21 Aug 2006) | 1 line
  Fix a couple of ssize-t issues reported by Alexander Belopolsky on python-dev
........
  r51439 | neal.norwitz | 2006-08-21 21:47:08 +0200 (Mon, 21 Aug 2006) | 6 lines
  Patch #1542451: disallow continue anywhere under a finally
  I'm undecided if this should be backported to 2.5 or 2.5.1.
  Armin suggested to wait (I'm of the same opinion).  Thomas W thinks
  it's fine to go in 2.5.
........
  r51443 | neal.norwitz | 2006-08-21 22:16:24 +0200 (Mon, 21 Aug 2006) | 4 lines
  Handle a few more error conditions.
  Klocwork 301 and 302.  Will backport.
........
  r51450 | neal.norwitz | 2006-08-22 00:21:19 +0200 (Tue, 22 Aug 2006) | 5 lines
  Patch #1541585: fix buffer overrun when performing repr() on
  a unicode string in a build with wide unicode (UCS-4) support.
  This code could be improved, so add an XXX comment.
........
  r51456 | neal.norwitz | 2006-08-22 01:44:48 +0200 (Tue, 22 Aug 2006) | 1 line
  Try to get the windows bots working again with the new peephole.c
........
  r51461 | anthony.baxter | 2006-08-22 09:36:59 +0200 (Tue, 22 Aug 2006) | 1 line
  patch for documentation for recent uuid changes (from ping)
........
  r51473 | neal.norwitz | 2006-08-22 15:56:56 +0200 (Tue, 22 Aug 2006) | 1 line
  Alexander Belopolsky pointed out that pos is a size_t
........
  r51489 | jeremy.hylton | 2006-08-22 22:46:00 +0200 (Tue, 22 Aug 2006) | 2 lines
  Expose column offset information in parse trees.
........
  r51497 | andrew.kuchling | 2006-08-23 01:13:43 +0200 (Wed, 23 Aug 2006) | 1 line
  Move functional howto into trunk
........
  r51515 | jeremy.hylton | 2006-08-23 20:37:43 +0200 (Wed, 23 Aug 2006) | 2 lines
  Baby steps towards better tests for tokenize
........
  r51525 | alex.martelli | 2006-08-23 22:42:02 +0200 (Wed, 23 Aug 2006) | 6 lines
  x**2 should about equal x*x (including for a float x such that the result is
  inf) but didn't; added a test to test_float to verify that, and ignored the
  ERANGE value for errno in the pow operation to make the new test pass (with
  help from Marilyn Davis at the Google Python Sprint -- thanks!).
........
  r51526 | jeremy.hylton | 2006-08-23 23:14:03 +0200 (Wed, 23 Aug 2006) | 20 lines
  Bug fixes large and small for tokenize.
  Small: Always generate a NL or NEWLINE token following
         a COMMENT token.  The old code did not generate an NL token if
         the comment was on a line by itself.
  Large: The output of untokenize() will now match the
         input exactly if it is passed the full token sequence.  The
         old, crufty output is still generated if a limited input
         sequence is provided, where limited means that it does not
         include position information for tokens.
  Remaining bug: There is no CONTINUATION token (\) so there is no way
  for untokenize() to handle such code.
  Also, expanded the number of doctests in hopes of eventually removing
  the old-style tests that compare against a golden file.
  Bug fix candidate for Python 2.5.1. (Sigh.)
........
  r51527 | jeremy.hylton | 2006-08-23 23:26:46 +0200 (Wed, 23 Aug 2006) | 5 lines
  Replace dead code with an assert.
  Now that COMMENT tokens are reliably followed by NL or NEWLINE,
  there is never a need to add extra newlines in untokenize.
........
  r51530 | alex.martelli | 2006-08-24 00:17:59 +0200 (Thu, 24 Aug 2006) | 7 lines
  Reverting the patch that tried to fix the issue whereby x**2 raises
  OverflowError while x*x succeeds and produces infinity; apparently
  these inconsistencies cannot be fixed across ``all'' platforms and
  there's a widespread feeling that therefore ``every'' platform
  should keep suffering forevermore.  Ah well.
........
  r51565 | thomas.wouters | 2006-08-24 20:40:20 +0200 (Thu, 24 Aug 2006) | 6 lines
  Fix SF bug #1545837: array.array borks on deepcopy.
  array.__deepcopy__() needs to take an argument, even if it doesn't actually
  use it. Will backport to 2.5 and 2.4 (if applicable.)
........
  r51580 | martin.v.loewis | 2006-08-25 02:03:34 +0200 (Fri, 25 Aug 2006) | 3 lines
  Patch #1545507: Exclude ctypes package in Win64 MSI file.
  Will backport to 2.5.
........
  r51589 | neal.norwitz | 2006-08-25 03:52:49 +0200 (Fri, 25 Aug 2006) | 1 line
  importing types is not necessary if we use isinstance
........
  r51604 | thomas.heller | 2006-08-25 09:27:33 +0200 (Fri, 25 Aug 2006) | 3 lines
  Port _ctypes.pyd to win64 on AMD64.
........
  r51605 | thomas.heller | 2006-08-25 09:34:51 +0200 (Fri, 25 Aug 2006) | 3 lines
  Add missing file for _ctypes.pyd port to win64 on AMD64.
........
  r51606 | thomas.heller | 2006-08-25 11:26:33 +0200 (Fri, 25 Aug 2006) | 6 lines
  Build _ctypes.pyd for win AMD64 into the MSVC project file.
  Since MSVC doesn't know about .asm files, a helper batch file is needed
  to find ml64.exe in predefined locations.  The helper script hardcodes
  the path to the MS Platform SDK.
........
  r51608 | armin.rigo | 2006-08-25 14:44:28 +0200 (Fri, 25 Aug 2006) | 4 lines
  The regular expression engine in '_sre' can segfault when interpreting
  bogus bytecode.  It is unclear whether this is a real bug or a "won't
  fix" case like bogus_code_obj.py.
........
  r51617 | tim.peters | 2006-08-26 00:05:39 +0200 (Sat, 26 Aug 2006) | 2 lines
  Whitespace normalization.
........
  r51618 | tim.peters | 2006-08-26 00:06:44 +0200 (Sat, 26 Aug 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51619 | tim.peters | 2006-08-26 00:26:21 +0200 (Sat, 26 Aug 2006) | 3 lines
  A new test here relied on preserving invisible trailing
  whitespace in expected output.  Stop that.
........
  r51624 | jack.diederich | 2006-08-26 20:42:06 +0200 (Sat, 26 Aug 2006) | 4 lines
  - Move functions common to all path modules into genericpath.py and have the
    OS speicifc path modules import them.
  - Have os2emxpath import common functions fron ntpath instead of using copies
........
  r51642 | neal.norwitz | 2006-08-29 07:40:58 +0200 (Tue, 29 Aug 2006) | 1 line
  Fix a couple of typos.
........
  r51647 | marc-andre.lemburg | 2006-08-29 12:34:12 +0200 (Tue, 29 Aug 2006) | 5 lines
  Fix a buglet in the error reporting (SF bug report #1546372).
  This should probably go into Python 2.5 or 2.5.1 as well.
........
  r51663 | armin.rigo | 2006-08-31 10:51:06 +0200 (Thu, 31 Aug 2006) | 3 lines
  Doc fix: hashlib objects don't always return a digest of 16 bytes.
  Backport candidate for 2.5.
........
  r51664 | nick.coghlan | 2006-08-31 14:00:43 +0200 (Thu, 31 Aug 2006) | 1 line
  Fix the wrongheaded implementation of context management in the decimal module and add unit tests. (python-dev discussion is ongoing regarding what we do about Python 2.5)
........
  r51665 | nick.coghlan | 2006-08-31 14:51:25 +0200 (Thu, 31 Aug 2006) | 1 line
  Remove the old decimal context management tests from test_contextlib (guess who didn't run the test suite before committing...)
........
  r51669 | brett.cannon | 2006-08-31 20:54:26 +0200 (Thu, 31 Aug 2006) | 4 lines
  Make sure memory is properly cleaned up in file_init.
  Backport candidate.
........
  r51671 | brett.cannon | 2006-08-31 23:47:52 +0200 (Thu, 31 Aug 2006) | 2 lines
  Fix comment about indentation level in C files.
........
  r51674 | brett.cannon | 2006-09-01 00:42:37 +0200 (Fri, 01 Sep 2006) | 3 lines
  Have pre-existing C files use 8 spaces indents (to match old PEP 7 style), but
  have all new files use 4 spaces (to match current PEP 7 style).
........
  r51676 | fred.drake | 2006-09-01 05:57:19 +0200 (Fri, 01 Sep 2006) | 3 lines
  - SF patch #1550263: Enhance and correct unittest docs
  - various minor cleanups for improved consistency
........
  r51677 | georg.brandl | 2006-09-02 00:30:52 +0200 (Sat, 02 Sep 2006) | 2 lines
  evalfile() should be execfile().
........
  r51681 | neal.norwitz | 2006-09-02 04:43:17 +0200 (Sat, 02 Sep 2006) | 1 line
  SF #1547931, fix typo (missing and).  Will backport to 2.5
........
  r51683 | neal.norwitz | 2006-09-02 04:50:35 +0200 (Sat, 02 Sep 2006) | 1 line
  Bug #1548092: fix curses.tparm seg fault on invalid input.  Needs backport to 2.5.1 and earlier.
........
  r51684 | neal.norwitz | 2006-09-02 04:58:13 +0200 (Sat, 02 Sep 2006) | 4 lines
  Bug #1550714: fix SystemError from itertools.tee on negative value for n.
  Needs backport to 2.5.1 and earlier.
........
  r51685 | nick.coghlan | 2006-09-02 05:54:17 +0200 (Sat, 02 Sep 2006) | 1 line
  Make decimal.ContextManager a private implementation detail of decimal.localcontext()
........
  r51686 | nick.coghlan | 2006-09-02 06:04:18 +0200 (Sat, 02 Sep 2006) | 1 line
  Further corrections to the decimal module context management documentation
........
  r51688 | raymond.hettinger | 2006-09-02 19:07:23 +0200 (Sat, 02 Sep 2006) | 1 line
  Fix documentation nits for decimal context managers.
........
  r51690 | neal.norwitz | 2006-09-02 20:51:34 +0200 (Sat, 02 Sep 2006) | 1 line
  Add missing word in comment
........
  r51691 | neal.norwitz | 2006-09-02 21:40:19 +0200 (Sat, 02 Sep 2006) | 7 lines
  Hmm, this test has failed at least twice recently on the OpenBSD and
  Debian sparc buildbots.  Since this goes through a lot of tests
  and hits the disk a lot it could be slow (especially if NFS is involved).
  I'm not sure if that's the problem, but printing periodic msgs shouldn't hurt.
  The code was stolen from test_compiler.
........
  r51693 | nick.coghlan | 2006-09-03 03:02:00 +0200 (Sun, 03 Sep 2006) | 1 line
  Fix final documentation nits before backporting decimal module fixes to 2.5
........
  r51694 | nick.coghlan | 2006-09-03 03:06:07 +0200 (Sun, 03 Sep 2006) | 1 line
  Typo fix for decimal docs
........
  r51697 | nick.coghlan | 2006-09-03 03:20:46 +0200 (Sun, 03 Sep 2006) | 1 line
  NEWS entry on trunk for decimal module changes
........
  r51704 | raymond.hettinger | 2006-09-04 17:32:48 +0200 (Mon, 04 Sep 2006) | 1 line
  Fix endcase for str.rpartition()
........
  r51716 | tim.peters | 2006-09-05 04:18:09 +0200 (Tue, 05 Sep 2006) | 12 lines
  "Conceptual" merge of rev 51711 from the 2.5 branch.
  i_divmod():  As discussed on Python-Dev, changed the overflow
  checking to live happily with recent gcc optimizations that
  assume signed integer arithmetic never overflows.
  This differs from the corresponding change on the 2.5 and 2.4
  branches, using a less obscure approach, but one that /may/
  tickle platform idiocies in their definitions of LONG_MIN.
  The 2.4 + 2.5 change avoided introducing a dependence on
  LONG_MIN, at the cost of substantially goofier code.
........
  r51717 | tim.peters | 2006-09-05 04:21:19 +0200 (Tue, 05 Sep 2006) | 2 lines
  Whitespace normalization.
........
  r51719 | tim.peters | 2006-09-05 04:22:17 +0200 (Tue, 05 Sep 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51720 | neal.norwitz | 2006-09-05 04:24:03 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix SF bug #1546288, crash in dict_equal.
........
  r51721 | neal.norwitz | 2006-09-05 04:25:41 +0200 (Tue, 05 Sep 2006) | 1 line
  Fix SF #1552093, eval docstring typo (3 ps in mapping)
........
  r51724 | neal.norwitz | 2006-09-05 04:35:08 +0200 (Tue, 05 Sep 2006) | 1 line
  This was found by Guido AFAIK on p3yk (sic) branch.
........
  r51725 | neal.norwitz | 2006-09-05 04:36:20 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a NEWS entry for str.rpartition() change
........
  r51728 | neal.norwitz | 2006-09-05 04:57:01 +0200 (Tue, 05 Sep 2006) | 1 line
  Patch #1540470, for OpenBSD 4.0.  Backport candidate for 2.[34].
........
  r51729 | neal.norwitz | 2006-09-05 05:53:08 +0200 (Tue, 05 Sep 2006) | 12 lines
  Bug #1520864 (again): unpacking singleton tuples in list comprehensions and
  generator expressions (x for x, in ... ) works again.
  Sigh, I only fixed for loops the first time, not list comps and genexprs too.
  I couldn't find any more unpacking cases where there is a similar bug lurking.
  This code should be refactored to eliminate the duplication.  I'm sure
  the listcomp/genexpr code can be refactored.  I'm not sure if the for loop
  can re-use any of the same code though.
  Will backport to 2.5 (the only place it matters).
........
  r51731 | neal.norwitz | 2006-09-05 05:58:26 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a comment about some refactoring.  (There's probably more that should be done.)  I will reformat this file in the next checkin due to the inconsistent tabs/spaces.
........
  r51732 | neal.norwitz | 2006-09-05 06:00:12 +0200 (Tue, 05 Sep 2006) | 1 line
  M-x untabify
........
  r51737 | hyeshik.chang | 2006-09-05 14:07:09 +0200 (Tue, 05 Sep 2006) | 7 lines
  Fix a few bugs on cjkcodecs found by Oren Tirosh:
  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
    codepoints to conform the standard.
  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 2013:2
    codepoints now.
........
  r51738 | hyeshik.chang | 2006-09-05 14:14:57 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix a typo: 2013 -> 0213
........
  r51740 | georg.brandl | 2006-09-05 14:44:58 +0200 (Tue, 05 Sep 2006) | 3 lines
  Bug #1552618: change docs of dict.has_key() to reflect recommendation
  to use "in".
........
  r51742 | andrew.kuchling | 2006-09-05 15:02:40 +0200 (Tue, 05 Sep 2006) | 1 line
  Rearrange example a bit, and show rpartition() when separator is not found
........
  r51744 | andrew.kuchling | 2006-09-05 15:15:41 +0200 (Tue, 05 Sep 2006) | 1 line
  [Bug #1525469] SimpleXMLRPCServer still uses the sys.exc_{value,type} module-level globals instead of calling sys.exc_info().  Reported by Russell Warren
........
  r51745 | andrew.kuchling | 2006-09-05 15:19:18 +0200 (Tue, 05 Sep 2006) | 3 lines
  [Bug #1526834] Fix crash in pdb when you do 'b f(';
  the function name was placed into a regex pattern and the unbalanced paren
  caused re.compile() to report an error
........
  r51751 | kristjan.jonsson | 2006-09-05 19:58:12 +0200 (Tue, 05 Sep 2006) | 6 lines
  Update the PCBuild8 solution.
  Facilitate cross-compilation by having binaries in separate Win32 and x64 directories.
  Rationalized configs by making proper use of platforms/configurations.
  Remove pythoncore_pgo project.
  Add new PGIRelease and PGORelease configurations to perform Profile Guided Optimisation.
  Removed I64 support, but this can be easily added by copying the x64 platform settings.
........
  r51758 | gustavo.niemeyer | 2006-09-06 03:58:52 +0200 (Wed, 06 Sep 2006) | 3 lines
  Fixing #1531862: Do not close standard file descriptors in the
  subprocess module.
........
  r51760 | neal.norwitz | 2006-09-06 05:58:34 +0200 (Wed, 06 Sep 2006) | 1 line
  Revert 51758 because it broke all the buildbots
........
  r51762 | georg.brandl | 2006-09-06 08:03:59 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1551427: fix a wrong NULL pointer check in the win32 version
  of os.urandom().
........
  r51765 | georg.brandl | 2006-09-06 08:09:31 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1550983: emit better error messages for erroneous relative
  imports (if not in package and if beyond toplevel package).
........
  r51767 | neal.norwitz | 2006-09-06 08:28:06 +0200 (Wed, 06 Sep 2006) | 1 line
  with and as are now keywords.  There are some generated files I can't recreate.
........
  r51770 | georg.brandl | 2006-09-06 08:50:05 +0200 (Wed, 06 Sep 2006) | 5 lines
  Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
  Also make sure that every exception class has __module__ set to
  'exceptions'.
........
  r51785 | georg.brandl | 2006-09-06 22:05:58 +0200 (Wed, 06 Sep 2006) | 2 lines
  Fix missing import of the types module in logging.config.
........
  r51789 | marc-andre.lemburg | 2006-09-06 22:40:22 +0200 (Wed, 06 Sep 2006) | 3 lines
  Add news item for bug fix of SF bug report #1546372.
........
  r51797 | gustavo.niemeyer | 2006-09-07 02:48:33 +0200 (Thu, 07 Sep 2006) | 3 lines
  Fixed subprocess bug #1531862 again, after removing tests
  offending buildbot
........
  r51798 | raymond.hettinger | 2006-09-07 04:42:48 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix refcounts and add error checks.
........
  r51803 | nick.coghlan | 2006-09-07 12:50:34 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix the speed regression in inspect.py by adding another cache to speed up getmodule(). Patch #1553314
........
  r51805 | ronald.oussoren | 2006-09-07 14:03:10 +0200 (Thu, 07 Sep 2006) | 2 lines
  Fix a glaring error and update some version numbers.
........
  r51814 | andrew.kuchling | 2006-09-07 15:56:23 +0200 (Thu, 07 Sep 2006) | 1 line
  Typo fix
........
  r51815 | andrew.kuchling | 2006-09-07 15:59:38 +0200 (Thu, 07 Sep 2006) | 8 lines
  [Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout on the select()
  if an input hook has been defined.  Patch by Richard Boulton.
  This select() code is only executed with readline 2.1, or if
  READLINE_CALLBACKS is defined.
  Backport candidate for 2.5, 2.4, probably earlier versions too.
........
  r51816 | armin.rigo | 2006-09-07 17:06:00 +0200 (Thu, 07 Sep 2006) | 2 lines
  Add a warning notice on top of the generated grammar.txt.
........
  r51819 | thomas.heller | 2006-09-07 20:56:28 +0200 (Thu, 07 Sep 2006) | 5 lines
  Anonymous structure fields that have a bit-width specified did not work,
  and they gave a strange error message from PyArg_ParseTuple:
      function takes exactly 2 arguments (3 given).
  With tests.
........
  r51820 | thomas.heller | 2006-09-07 21:09:54 +0200 (Thu, 07 Sep 2006) | 4 lines
  The cast function did not accept c_char_p or c_wchar_p instances
  as first argument, and failed with a 'bad argument to internal function'
  error message.
........
  r51827 | nick.coghlan | 2006-09-08 12:04:38 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing NEWS entry for rev 51803
........
  r51828 | andrew.kuchling | 2006-09-08 15:25:23 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing word
........
  r51829 | andrew.kuchling | 2006-09-08 15:35:49 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51830 | andrew.kuchling | 2006-09-08 15:36:36 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51832 | andrew.kuchling | 2006-09-08 16:02:45 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51833 | andrew.kuchling | 2006-09-08 16:03:01 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51835 | andrew.kuchling | 2006-09-08 16:05:10 +0200 (Fri, 08 Sep 2006) | 1 line
  Fix typo in example
........
  r51837 | brett.cannon | 2006-09-09 09:11:46 +0200 (Sat, 09 Sep 2006) | 6 lines
  Remove the __unicode__ method from exceptions.  Allows unicode() to be called
  on exception classes.  Would require introducing a tp_unicode slot to make it
  work otherwise.
  Fixes bug #1551432 and will be backported.
........
  r51854 | neal.norwitz | 2006-09-11 06:24:09 +0200 (Mon, 11 Sep 2006) | 8 lines
  Forward port of 51850 from release25-maint branch.
  As mentioned on python-dev, reverting patch #1504333 because it introduced
  an infinite loop in rev 47154.
  This patch also adds a test to prevent the regression.
........
  r51855 | neal.norwitz | 2006-09-11 06:28:16 +0200 (Mon, 11 Sep 2006) | 5 lines
  Properly handle a NULL returned from PyArena_New().
  (Also fix some whitespace)
  Klocwork #364.
........
  r51856 | neal.norwitz | 2006-09-11 06:32:57 +0200 (Mon, 11 Sep 2006) | 1 line
  Add a "crasher" taken from the sgml bug report referenced in the comment
........
  r51858 | georg.brandl | 2006-09-11 11:38:35 +0200 (Mon, 11 Sep 2006) | 12 lines
  Forward-port of rev. 51857:
  Building with HP's cc on HP-UX turned up a couple of problems.
  _PyGILState_NoteThreadState was declared as static inconsistently.
  Make it static as it's not necessary outside of this module.
  Some tests failed because errno was reset to 0. (I think the tests
  that failed were at least: test_fcntl and test_mailbox).
  Ensure that errno doesn't change after a call to Py_END_ALLOW_THREADS.
  This only affected debug builds.
........
  r51865 | martin.v.loewis | 2006-09-12 21:49:20 +0200 (Tue, 12 Sep 2006) | 2 lines
  Forward-port 51862: Add sgml_input.html.
........
  r51866 | andrew.kuchling | 2006-09-12 22:50:23 +0200 (Tue, 12 Sep 2006) | 1 line
  Markup typo fix
........
  r51867 | andrew.kuchling | 2006-09-12 23:09:02 +0200 (Tue, 12 Sep 2006) | 1 line
  Some editing, markup fixes
........
  r51868 | andrew.kuchling | 2006-09-12 23:21:51 +0200 (Tue, 12 Sep 2006) | 1 line
  More wordsmithing
........
  r51877 | andrew.kuchling | 2006-09-14 13:22:18 +0200 (Thu, 14 Sep 2006) | 1 line
  Make --help mention that -v can be supplied multiple times
........
  r51878 | andrew.kuchling | 2006-09-14 13:28:50 +0200 (Thu, 14 Sep 2006) | 1 line
  Rewrite help message to remove some of the parentheticals.  (There were a lot of them.)
........
  r51883 | ka-ping.yee | 2006-09-15 02:34:19 +0200 (Fri, 15 Sep 2006) | 2 lines
  Fix grammar errors and improve clarity.
........
  r51885 | georg.brandl | 2006-09-15 07:22:24 +0200 (Fri, 15 Sep 2006) | 3 lines
  Correct elementtree module index entry.
........
  r51889 | fred.drake | 2006-09-15 17:18:04 +0200 (Fri, 15 Sep 2006) | 4 lines
  - fix module name in links in formatted documentation
  - minor markup cleanup
  (forward-ported from release25-maint revision 51888)
........
  r51891 | fred.drake | 2006-09-15 18:11:27 +0200 (Fri, 15 Sep 2006) | 3 lines
  revise explanation of returns_unicode to reflect bool values
  and to include the default value
  (merged from release25-maint revision 51890)
........
  r51897 | martin.v.loewis | 2006-09-16 19:36:37 +0200 (Sat, 16 Sep 2006) | 2 lines
  Patch #1557515: Add RLIMIT_SBSIZE.
........
  r51903 | ronald.oussoren | 2006-09-17 20:42:53 +0200 (Sun, 17 Sep 2006) | 2 lines
  Port of revision 51902 in release25-maint to the trunk
........
  r51904 | ronald.oussoren | 2006-09-17 21:23:27 +0200 (Sun, 17 Sep 2006) | 3 lines
  Tweak Mac/Makefile in to ensure that pythonw gets rebuild when the major version
  of python changes (2.5 -> 2.6). Bug #1552935.
........
  r51913 | guido.van.rossum | 2006-09-18 23:36:16 +0200 (Mon, 18 Sep 2006) | 2 lines
  Make this thing executable.
........
  r51920 | gregory.p.smith | 2006-09-19 19:35:04 +0200 (Tue, 19 Sep 2006) | 5 lines
  Fixes a bug with bsddb.DB.stat where the flags and txn keyword
  arguments are transposed.  (reported by Louis Zechtzer)
  ..already committed to release24-maint
  ..needs committing to release25-maint
........
  r51926 | brett.cannon | 2006-09-20 20:34:28 +0200 (Wed, 20 Sep 2006) | 3 lines
  Accidentally didn't commit Misc/NEWS entry on when __unicode__() was removed
  from exceptions.
........
  r51927 | brett.cannon | 2006-09-20 20:43:13 +0200 (Wed, 20 Sep 2006) | 6 lines
  Allow exceptions to be directly sliced again
  (e.g., ``BaseException(1,2,3)[0:2]``).
  Discovered in Python 2.5.0 by Thomas Heller and reported to python-dev.  This
  should be backported to 2.5 .
........
  r51928 | brett.cannon | 2006-09-20 21:28:35 +0200 (Wed, 20 Sep 2006) | 2 lines
  Make python.vim output more deterministic.
........
  r51949 | walter.doerwald | 2006-09-21 17:09:55 +0200 (Thu, 21 Sep 2006) | 2 lines
  Fix typo.
........
  r51950 | jack.diederich | 2006-09-21 19:50:26 +0200 (Thu, 21 Sep 2006) | 5 lines
  * regression bug, count_next was coercing a Py_ssize_t to an unsigned Py_size_t
    which breaks negative counts
  * added test for negative numbers
  will backport to 2.5.1
........
  r51953 | jack.diederich | 2006-09-21 22:34:49 +0200 (Thu, 21 Sep 2006) | 1 line
  added itertools.count(-n) fix
........
  r51971 | neal.norwitz | 2006-09-22 10:16:26 +0200 (Fri, 22 Sep 2006) | 10 lines
  Fix %zd string formatting on Mac OS X so it prints negative numbers.
  In addition to testing positive numbers, verify negative numbers work in configure.
  In order to avoid compiler warnings on OS X 10.4, also change the order of the check
  for the format character to use (PY_FORMAT_SIZE_T) in the sprintf format
  for Py_ssize_t.  This patch changes PY_FORMAT_SIZE_T from "" to "l" if it wasn't
  defined at configure time.  Need to verify the buildbot results.
  Backport candidate (if everyone thinks this patch can't be improved).
........
  r51972 | neal.norwitz | 2006-09-22 10:18:10 +0200 (Fri, 22 Sep 2006) | 7 lines
  Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
  These tests should be improved.  Hopefully this fixes variations when
  flipping back and forth between fpdef and fplist.
  Backport candidate.
........
  r51975 | neal.norwitz | 2006-09-22 10:47:23 +0200 (Fri, 22 Sep 2006) | 4 lines
  Mostly revert this file to the same version as before.  Only force setting
  of PY_FORMAT_SIZE_T to "l" for Mac OSX.  I don't know a better define
  to use.  This should get rid of the warnings on other platforms and Mac too.
........
  r51986 | fred.drake | 2006-09-23 02:26:31 +0200 (Sat, 23 Sep 2006) | 1 line
  add boilerplate "What's New" document so the docs will build
........
  r51987 | neal.norwitz | 2006-09-23 06:11:38 +0200 (Sat, 23 Sep 2006) | 1 line
  Remove extra semi-colons reported by Johnny Lee on python-dev.  Backport if anyone cares.
........
  r51989 | neal.norwitz | 2006-09-23 20:11:58 +0200 (Sat, 23 Sep 2006) | 1 line
  SF Bug #1563963, add missing word and cleanup first sentance
........
  r51990 | brett.cannon | 2006-09-23 21:53:20 +0200 (Sat, 23 Sep 2006) | 3 lines
  Make output on test_strptime() be more verbose in face of failure.  This is in
  hopes that more information will help debug the failing test on HPPA Ubuntu.
........
  r51991 | georg.brandl | 2006-09-24 12:36:01 +0200 (Sun, 24 Sep 2006) | 2 lines
  Fix webbrowser.BackgroundBrowser on Windows.
........
  r51993 | georg.brandl | 2006-09-24 14:35:36 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in the parser's future statement handling that led to "with"
  not being recognized as a keyword after, e.g., this statement:
  from __future__ import division, with_statement
........
  r51995 | georg.brandl | 2006-09-24 14:50:24 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.
........
  r52000 | armin.rigo | 2006-09-25 17:16:26 +0200 (Mon, 25 Sep 2006) | 2 lines
  Another crasher.
........
  r52011 | brett.cannon | 2006-09-27 01:38:24 +0200 (Wed, 27 Sep 2006) | 2 lines
  Make the error message for when the time data and format do not match clearer.
........
  r52014 | andrew.kuchling | 2006-09-27 18:37:30 +0200 (Wed, 27 Sep 2006) | 1 line
  Add news item for rev. 51815
........
  r52018 | andrew.kuchling | 2006-09-27 21:23:05 +0200 (Wed, 27 Sep 2006) | 1 line
  Make examples do error checking on Py_InitModule
........
  r52032 | brett.cannon | 2006-09-29 00:10:14 +0200 (Fri, 29 Sep 2006) | 2 lines
  Very minor grammatical fix in a comment.
........
  r52048 | george.yoshida | 2006-09-30 07:14:02 +0200 (Sat, 30 Sep 2006) | 4 lines
  SF bug #1567976 : fix typo
  Will backport to 2.5.
........
  r52051 | gregory.p.smith | 2006-09-30 08:08:20 +0200 (Sat, 30 Sep 2006) | 2 lines
  wording change
........
  r52053 | georg.brandl | 2006-09-30 09:24:48 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1567375: a minor logical glitch in example description.
........
  r52056 | georg.brandl | 2006-09-30 09:31:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.
........
  r52058 | georg.brandl | 2006-09-30 10:43:30 +0200 (Sat, 30 Sep 2006) | 4 lines
  Patch #1567691: super() and new.instancemethod() now don't accept
  keyword arguments any more (previously they accepted them, but didn't
  use them).
........
  r52061 | georg.brandl | 2006-09-30 11:03:42 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566800: make sure that EnvironmentError can be called with any
  number of arguments, as was the case in Python 2.4.
........
  r52063 | georg.brandl | 2006-09-30 11:06:45 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1566663: remove obsolete example from datetime docs.
........
  r52065 | georg.brandl | 2006-09-30 11:13:21 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.
........
  r52068 | georg.brandl | 2006-09-30 12:58:01 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.
........
  r52069 | georg.brandl | 2006-09-30 13:06:47 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1560617: in pyclbr, return full module name not only for classes,
  but also for functions.
........
  r52072 | georg.brandl | 2006-09-30 13:17:34 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1556784: allow format strings longer than 127 characters in
  datetime's strftime function.
........
  r52075 | georg.brandl | 2006-09-30 13:22:28 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1446043: correctly raise a LookupError if an encoding name given
  to encodings.search_function() contains a dot.
........
  r52078 | georg.brandl | 2006-09-30 14:02:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1546052: clarify that PyString_FromString(AndSize) copies the
  string pointed to by its parameter.
........
  r52080 | georg.brandl | 2006-09-30 14:16:03 +0200 (Sat, 30 Sep 2006) | 3 lines
  Convert test_import to unittest.
........
  r52083 | kurt.kaiser | 2006-10-01 23:16:45 +0200 (Sun, 01 Oct 2006) | 5 lines
  Some syntax errors were being caught by tokenize during the tabnanny
  check, resulting in obscure error messages.  Do the syntax check
  first.  Bug 1562716, 1562719
........
  r52084 | kurt.kaiser | 2006-10-01 23:54:37 +0200 (Sun, 01 Oct 2006) | 3 lines
  Add comment explaining that error msgs may be due to user code when
  running w/o subprocess.
........
  r52086 | martin.v.loewis | 2006-10-02 16:55:51 +0200 (Mon, 02 Oct 2006) | 3 lines
  Fix test for uintptr_t. Fixes #1568842.
  Will backport.
........
  r52089 | martin.v.loewis | 2006-10-02 17:20:37 +0200 (Mon, 02 Oct 2006) | 3 lines
  Guard uintptr_t test with HAVE_STDINT_H, test for
  stdint.h. Will backport.
........
  r52100 | vinay.sajip | 2006-10-03 20:02:37 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation omitted the additional parameter to LogRecord.__init__ which was added in 2.5. (See SF #1569622).
........
  r52101 | vinay.sajip | 2006-10-03 20:20:26 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation clarified to mention optional parameters.
........
  r52102 | vinay.sajip | 2006-10-03 20:21:56 +0200 (Tue, 03 Oct 2006) | 1 line
  Modified LogRecord.__init__ to make the func parameter optional. (See SF #1569622).
........
  r52121 | brett.cannon | 2006-10-03 23:58:55 +0200 (Tue, 03 Oct 2006) | 2 lines
  Fix minor typo in a comment.
........
  r52123 | brett.cannon | 2006-10-04 01:23:14 +0200 (Wed, 04 Oct 2006) | 2 lines
  Convert test_imp over to unittest.
........
  r52128 | barry.warsaw | 2006-10-04 04:06:36 +0200 (Wed, 04 Oct 2006) | 3 lines
  decode_rfc2231(): As Christian Robottom Reis points out, it makes no sense to
  test for parts > 3 when we use .split(..., 2).
........
  r52129 | jeremy.hylton | 2006-10-04 04:24:52 +0200 (Wed, 04 Oct 2006) | 9 lines
  Fix for SF bug 1569998: break permitted inside try.
  The compiler was checking that there was something on the fblock
  stack, but not that there was a loop on the stack.  Fixed that and
  added a test for the specific syntax error.
  Bug fix candidate.
........
  r52130 | martin.v.loewis | 2006-10-04 07:47:34 +0200 (Wed, 04 Oct 2006) | 4 lines
  Fix integer negation and absolute value to not rely
  on undefined behaviour of the C compiler anymore.
  Will backport to 2.5 and 2.4.
........
  r52135 | martin.v.loewis | 2006-10-04 11:21:20 +0200 (Wed, 04 Oct 2006) | 1 line
  Forward port r52134: Add uuids for 2.4.4.
........
  r52137 | armin.rigo | 2006-10-04 12:23:57 +0200 (Wed, 04 Oct 2006) | 3 lines
  Compilation problem caused by conflicting typedefs for uint32_t
  (unsigned long vs. unsigned int).
........
  r52139 | armin.rigo | 2006-10-04 14:17:45 +0200 (Wed, 04 Oct 2006) | 23 lines
  Forward-port of r52136,52138: a review of overflow-detecting code.
  * unified the way intobject, longobject and mystrtoul handle
    values around -sys.maxint-1.
  * in general, trying to entierely avoid overflows in any computation
    involving signed ints or longs is extremely involved.  Fixed a few
    simple cases where a compiler might be too clever (but that's all
    guesswork).
  * more overflow checks against bad data in marshal.c.
  * 2.5 specific: fixed a number of places that were still confusing int
    and Py_ssize_t.  Some of them could potentially have caused
    "real-world" breakage.
  * list.pop(x): fixing overflow issues on x was messy.  I just reverted
    to PyArg_ParseTuple("n"), which does the right thing.  (An obscure
    test was trying to give a Decimal to list.pop()... doesn't make
    sense any more IMHO)
  * trying to write a few tests...
........
  r52147 | andrew.kuchling | 2006-10-04 15:42:43 +0200 (Wed, 04 Oct 2006) | 6 lines
  Cause a PyObject_Malloc() failure to trigger a MemoryError, and then
  add 'if (PyErr_Occurred())' checks to various places so that NULL is
  returned properly.
  2.4 backport candidate.
........
  r52148 | martin.v.loewis | 2006-10-04 17:25:28 +0200 (Wed, 04 Oct 2006) | 1 line
  Add MSVC8 project files to create wininst-8.exe.
........
  r52196 | brett.cannon | 2006-10-06 00:02:31 +0200 (Fri, 06 Oct 2006) | 7 lines
  Clarify what "re-initialization" means for init_builtin() and init_dynamic().
  Also remove warning about re-initialization as possibly raising an execption as
  both call _PyImport_FindExtension() which pulls any module that was already
  imported from the Python process' extension cache and just copies the __dict__
  into the module stored in sys.modules.
........
  r52200 | fred.drake | 2006-10-06 02:03:45 +0200 (Fri, 06 Oct 2006) | 3 lines
  - update links
  - remove Sleepycat name now that they have been bought
........
  r52204 | andrew.kuchling | 2006-10-06 12:41:01 +0200 (Fri, 06 Oct 2006) | 1 line
  Case fix
........
  r52208 | georg.brandl | 2006-10-06 14:46:08 +0200 (Fri, 06 Oct 2006) | 3 lines
  Fix name.
........
  r52211 | andrew.kuchling | 2006-10-06 15:18:26 +0200 (Fri, 06 Oct 2006) | 1 line
  [Bug #1545341] Allow 'classifier' parameter to be a tuple as well as a list.  Will backport.
........
  r52212 | armin.rigo | 2006-10-06 18:33:22 +0200 (Fri, 06 Oct 2006) | 4 lines
  A very minor bug fix: this code looks like it is designed to accept
  any hue value and do the modulo itself, except it doesn't quite do
  it in all cases.  At least, the "cannot get here" comment was wrong.
........
  r52213 | andrew.kuchling | 2006-10-06 20:51:55 +0200 (Fri, 06 Oct 2006) | 1 line
  Comment grammar
........
  r52218 | skip.montanaro | 2006-10-07 13:05:02 +0200 (Sat, 07 Oct 2006) | 6 lines
  Note that the excel_tab class is registered as the "excel-tab" dialect.
  Fixes 1572471.  Make a similar change for the excel class and clean up
  references to the Dialects and Formatting Parameters section in a few
  places.
........
  r52221 | georg.brandl | 2006-10-08 09:11:54 +0200 (Sun, 08 Oct 2006) | 3 lines
  Add missing NEWS entry for rev. 52129.
........
  r52223 | hyeshik.chang | 2006-10-08 15:48:34 +0200 (Sun, 08 Oct 2006) | 3 lines
  Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
  when encoding non-BMP unicode characters.  (Submitted by Ray Chason)
........
  r52227 | ronald.oussoren | 2006-10-08 19:37:58 +0200 (Sun, 08 Oct 2006) | 4 lines
  Add version number to the link to the python documentation in
  /Developer/Documentation/Python, better for users that install multiple versions
  of python.
........
  r52229 | ronald.oussoren | 2006-10-08 19:40:02 +0200 (Sun, 08 Oct 2006) | 2 lines
  Fix for bug #1570284
........
  r52233 | ronald.oussoren | 2006-10-08 19:49:52 +0200 (Sun, 08 Oct 2006) | 6 lines
  MacOSX: distutils changes the values of BASECFLAGS and LDFLAGS when using a
  universal build of python on OSX 10.3 to ensure that those flags can be used
  to compile code (the universal build uses compiler flags that aren't supported
  on 10.3). This patches gives the same treatment to CFLAGS, PY_CFLAGS and
  BLDSHARED.
........
  r52236 | ronald.oussoren | 2006-10-08 19:51:46 +0200 (Sun, 08 Oct 2006) | 5 lines
  MacOSX: The universal build requires that users have the MacOSX10.4u SDK
  installed to build extensions. This patch makes distutils emit a warning when
  the compiler should use an SDK but that SDK is not installed, hopefully reducing
  some confusion.
........
  r52238 | ronald.oussoren | 2006-10-08 20:18:26 +0200 (Sun, 08 Oct 2006) | 3 lines
  MacOSX: add more logic to recognize the correct startup file to patch to the
  shell profile patching post-install script.
........
  r52242 | andrew.kuchling | 2006-10-09 19:10:12 +0200 (Mon, 09 Oct 2006) | 1 line
  Add news item for rev. 52211 change
........
  r52245 | andrew.kuchling | 2006-10-09 20:05:19 +0200 (Mon, 09 Oct 2006) | 1 line
  Fix wording in comment
........
  r52251 | georg.brandl | 2006-10-09 21:03:06 +0200 (Mon, 09 Oct 2006) | 2 lines
  Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
........
  r52255 | barry.warsaw | 2006-10-09 21:43:24 +0200 (Mon, 09 Oct 2006) | 2 lines
  List gc.get_count() in the module docstring.
........
  r52257 | martin.v.loewis | 2006-10-09 22:44:25 +0200 (Mon, 09 Oct 2006) | 1 line
  Bug #1565150: Fix subsecond processing for os.utime on Windows.
........
  r52268 | ronald.oussoren | 2006-10-10 09:55:06 +0200 (Tue, 10 Oct 2006) | 2 lines
  MacOSX: fix permission problem in the generated installer
........
  r52293 | georg.brandl | 2006-10-12 09:38:04 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1575746: fix typo in property() docs.
........
  r52295 | georg.brandl | 2006-10-12 09:57:21 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #813342: Start the IDLE subprocess with -Qnew if the parent
  is started with that option.
........
  r52297 | georg.brandl | 2006-10-12 10:22:53 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1565919: document set types in the Language Reference.
........
  r52299 | georg.brandl | 2006-10-12 11:20:33 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1550524: better heuristics to find correct class definition
  in inspect.findsource().
........
  r52301 | georg.brandl | 2006-10-12 11:47:12 +0200 (Thu, 12 Oct 2006) | 4 lines
  Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
  arguments with the system default encoding just like the write()
  method does, instead of converting it to a raw buffer.
........
  r52303 | georg.brandl | 2006-10-12 13:14:40 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1546628: add a note about urlparse.urljoin() and absolute paths.
........
  r52305 | georg.brandl | 2006-10-12 13:27:59 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1545497: when given an explicit base, int() did ignore NULs
  embedded in the string to convert.
........
  r52307 | georg.brandl | 2006-10-12 13:41:11 +0200 (Thu, 12 Oct 2006) | 3 lines
  Add a note to fpectl docs that it's not built by default
  (bug #1556261).
........
  r52309 | georg.brandl | 2006-10-12 13:46:57 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560114: the Mac filesystem does have accurate information
  about the case of filenames.
........
  r52311 | georg.brandl | 2006-10-12 13:59:27 +0200 (Thu, 12 Oct 2006) | 2 lines
  Small grammar fix, thanks Sjoerd.
........
  r52313 | georg.brandl | 2006-10-12 14:03:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Fix tarfile depending on buggy int('1\0', base) behavior.
........
  r52315 | georg.brandl | 2006-10-12 14:33:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
........
  r52316 | georg.brandl | 2006-10-12 15:08:16 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560179: speed up posixpath.(dir|base)name
........
  r52327 | brett.cannon | 2006-10-14 08:36:45 +0200 (Sat, 14 Oct 2006) | 3 lines
  Clean up the language of a sentence relating to the connect() function and
  user-defined datatypes.
........
  r52332 | neal.norwitz | 2006-10-14 23:33:38 +0200 (Sat, 14 Oct 2006) | 3 lines
  Update the peephole optimizer to remove more dead code (jumps after returns)
  and inline jumps to returns.
........
  r52333 | martin.v.loewis | 2006-10-15 09:54:40 +0200 (Sun, 15 Oct 2006) | 4 lines
  Patch #1576954: Update VC6 build directory; remove redundant
  files in VC7. Will backport to 2.5.
........
  r52335 | martin.v.loewis | 2006-10-15 10:43:33 +0200 (Sun, 15 Oct 2006) | 1 line
  Patch #1576166: Support os.utime for directories on Windows NT+.
........
  r52336 | martin.v.loewis | 2006-10-15 10:51:22 +0200 (Sun, 15 Oct 2006) | 2 lines
  Patch #1577551: Add ctypes and ET build support for VC6.
  Will backport to 2.5.
........
  r52338 | martin.v.loewis | 2006-10-15 11:35:51 +0200 (Sun, 15 Oct 2006) | 1 line
  Loosen the test for equal time stamps.
........
  r52339 | martin.v.loewis | 2006-10-15 11:43:39 +0200 (Sun, 15 Oct 2006) | 2 lines
  Bug #1567666: Emulate GetFileAttributesExA for Win95.
  Will backport to 2.5.
........
  r52341 | martin.v.loewis | 2006-10-15 13:02:07 +0200 (Sun, 15 Oct 2006) | 2 lines
  Round to int, because some systems support sub-second time stamps in stat, but not in utime.
  Also be consistent with modifying only mtime, not atime.
........
  r52342 | martin.v.loewis | 2006-10-15 13:57:40 +0200 (Sun, 15 Oct 2006) | 2 lines
  Set the eol-style for project files to "CRLF".
........
  r52343 | martin.v.loewis | 2006-10-15 13:59:56 +0200 (Sun, 15 Oct 2006) | 3 lines
  Drop binary property on dsp files, set eol-style
  to CRLF instead.
........
  r52344 | martin.v.loewis | 2006-10-15 14:01:43 +0200 (Sun, 15 Oct 2006) | 2 lines
  Remove binary property, set eol-style to CRLF instead.
........
  r52346 | martin.v.loewis | 2006-10-15 16:30:38 +0200 (Sun, 15 Oct 2006) | 2 lines
  Mention the bdist_msi module. Will backport to 2.5.
........
  r52354 | brett.cannon | 2006-10-16 05:09:52 +0200 (Mon, 16 Oct 2006) | 3 lines
  Fix turtle so that you can launch the demo2 function on its own instead of only
  when the module is launched as a script.
........
  r52356 | martin.v.loewis | 2006-10-17 17:18:06 +0200 (Tue, 17 Oct 2006) | 2 lines
  Patch #1457736: Update VC6 to use current PCbuild settings.
  Will backport to 2.5.
........
  r52360 | martin.v.loewis | 2006-10-17 20:09:55 +0200 (Tue, 17 Oct 2006) | 2 lines
  Remove obsolete file. Will backport.
........
  r52363 | martin.v.loewis | 2006-10-17 20:59:23 +0200 (Tue, 17 Oct 2006) | 4 lines
  Forward-port r52358:
  - Bug #1578513: Cross compilation was broken by a change to configure.
  Repair so that it's back to how it was in 2.4.3.
........
  r52365 | thomas.heller | 2006-10-17 21:30:48 +0200 (Tue, 17 Oct 2006) | 6 lines
  ctypes callback functions only support 'fundamental' result types.
  Check this and raise an error when something else is used - before
  this change ctypes would hang or crash when such a callback was
  called.  This is a partial fix for #1574584.
  Will backport to release25-maint.
........
  r52377 | tim.peters | 2006-10-18 07:06:06 +0200 (Wed, 18 Oct 2006) | 2 lines
  newIobject():  repaired incorrect cast to quiet MSVC warning.
........
  r52378 | tim.peters | 2006-10-18 07:09:12 +0200 (Wed, 18 Oct 2006) | 2 lines
  Whitespace normalization.
........
  r52379 | tim.peters | 2006-10-18 07:10:28 +0200 (Wed, 18 Oct 2006) | 2 lines
  Add missing svn:eol-style to text files.
........
  r52387 | martin.v.loewis | 2006-10-19 12:58:46 +0200 (Thu, 19 Oct 2006) | 3 lines
  Add check for the PyArg_ParseTuple format, and declare
  it if it is supported.
........
  r52388 | martin.v.loewis | 2006-10-19 13:00:37 +0200 (Thu, 19 Oct 2006) | 3 lines
  Fix various minor errors in passing arguments to
  PyArg_ParseTuple.
........
  r52389 | martin.v.loewis | 2006-10-19 18:01:37 +0200 (Thu, 19 Oct 2006) | 2 lines
  Restore CFLAGS after checking for __attribute__
........
  r52390 | andrew.kuchling | 2006-10-19 23:55:55 +0200 (Thu, 19 Oct 2006) | 1 line
  [Bug #1576348] Fix typo in example
........
  r52414 | walter.doerwald | 2006-10-22 10:59:41 +0200 (Sun, 22 Oct 2006) | 2 lines
  Port test___future__ to unittest.
........
  r52415 | ronald.oussoren | 2006-10-22 12:45:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580674: with this patch os.readlink uses the filesystem encoding to
  decode unicode objects and returns an unicode object when the argument is one.
........
  r52416 | martin.v.loewis | 2006-10-22 12:46:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580872: Remove duplicate declaration of PyCallable_Check.
  Will backport to 2.5.
........
  r52418 | martin.v.loewis | 2006-10-22 12:55:15 +0200 (Sun, 22 Oct 2006) | 4 lines
  - Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
    ctypes isn't considered as requiring executable stacks.
  Will backport to 2.5.
........
  r52420 | martin.v.loewis | 2006-10-22 15:45:13 +0200 (Sun, 22 Oct 2006) | 3 lines
  Remove passwd.adjunct.byname from list of maps
  for test_nis. Will backport to 2.5.
........
  r52431 | georg.brandl | 2006-10-24 18:54:16 +0200 (Tue, 24 Oct 2006) | 2 lines
  Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
........
  r52446 | andrew.kuchling | 2006-10-26 21:10:46 +0200 (Thu, 26 Oct 2006) | 1 line
  [Bug #1579796] Wrong syntax for PyDateTime_IMPORT in documentation.  Reported by David Faure.
........
  r52449 | andrew.kuchling | 2006-10-26 21:16:46 +0200 (Thu, 26 Oct 2006) | 1 line
  Typo fix
........
  r52452 | martin.v.loewis | 2006-10-27 08:16:31 +0200 (Fri, 27 Oct 2006) | 3 lines
  Patch #1549049: Rewrite type conversion in structmember.
  Fixes #1545696 and #1566140. Will backport to 2.5.
........
  r52454 | martin.v.loewis | 2006-10-27 08:42:27 +0200 (Fri, 27 Oct 2006) | 2 lines
  Check for values.h. Will backport.
........
  r52456 | martin.v.loewis | 2006-10-27 09:06:52 +0200 (Fri, 27 Oct 2006) | 2 lines
  Get DBL_MAX from float.h not values.h. Will backport.
........
  r52458 | martin.v.loewis | 2006-10-27 09:13:28 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1567274: Support SMTP over TLS.
........
  r52459 | andrew.kuchling | 2006-10-27 13:33:29 +0200 (Fri, 27 Oct 2006) | 1 line
  Set svn:keywords property
........
  r52460 | andrew.kuchling | 2006-10-27 13:36:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Add item
........
  r52461 | andrew.kuchling | 2006-10-27 13:37:01 +0200 (Fri, 27 Oct 2006) | 1 line
  Some wording changes and markup fixes
........
  r52462 | andrew.kuchling | 2006-10-27 14:18:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1585690] Note that line_num was added in Python 2.5
........
  r52464 | andrew.kuchling | 2006-10-27 14:50:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1583946] Reword description of server and issuer
........
  r52466 | andrew.kuchling | 2006-10-27 15:06:25 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1562583] Mention the set_reuse_addr() method
........
  r52469 | andrew.kuchling | 2006-10-27 15:22:46 +0200 (Fri, 27 Oct 2006) | 4 lines
  [Bug #1542016] Report PCALL_POP value.  This makes the return value of sys.callstats() match its docstring.
  Backport candidate.  Though it's an API change, this is a pretty obscure
  portion of the API.
........
  r52473 | andrew.kuchling | 2006-10-27 16:53:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Point users to the subprocess module in the docs for os.system, os.spawn*, os.popen2, and the popen2 and commands modules
........
  r52476 | andrew.kuchling | 2006-10-27 18:39:10 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1576241] Let functools.wraps work with built-in functions
........
  r52478 | andrew.kuchling | 2006-10-27 18:55:34 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1575506] The _singlefileMailbox class was using the wrong file object in its flush() method, causing an error
........
  r52480 | andrew.kuchling | 2006-10-27 19:06:16 +0200 (Fri, 27 Oct 2006) | 1 line
  Clarify docstring
........
  r52481 | andrew.kuchling | 2006-10-27 19:11:23 +0200 (Fri, 27 Oct 2006) | 5 lines
  [Patch #1574068 by Scott Dial] urllib and urllib2 were using
  base64.encodestring() for encoding authentication data.
  encodestring() can include newlines for very long input, which
  produced broken HTTP headers.
........
  r52483 | andrew.kuchling | 2006-10-27 20:13:46 +0200 (Fri, 27 Oct 2006) | 1 line
  Check db_setup_debug for a few print statements; change sqlite_setup_debug to False
........
  r52484 | andrew.kuchling | 2006-10-27 20:15:02 +0200 (Fri, 27 Oct 2006) | 1 line
  [Patch #1503717] Tiny patch from Chris AtLee to stop a lengthy line from being printed
........
  r52485 | thomas.heller | 2006-10-27 20:31:36 +0200 (Fri, 27 Oct 2006) | 5 lines
  WindowsError.str should display the windows error code,
  not the posix error code; with test.
  Fixes #1576174.
  Will backport to release25-maint.
........
  r52487 | thomas.heller | 2006-10-27 21:05:53 +0200 (Fri, 27 Oct 2006) | 4 lines
  Modulefinder now handles absolute and relative imports, including
  tests.
  Will backport to release25-maint.
........
  r52488 | georg.brandl | 2006-10-27 22:39:43 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1552024: add decorator support to unparse.py demo script.
........
  r52492 | walter.doerwald | 2006-10-28 12:47:12 +0200 (Sat, 28 Oct 2006) | 2 lines
  Port test_bufio to unittest.
........
  r52493 | georg.brandl | 2006-10-28 15:10:17 +0200 (Sat, 28 Oct 2006) | 6 lines
  Convert test_global, test_scope and test_grammar to unittest.
  I tried to enclose all tests which must be run at the toplevel
  (instead of inside a method) in exec statements.
........
  r52494 | georg.brandl | 2006-10-28 15:11:41 +0200 (Sat, 28 Oct 2006) | 3 lines
  Update outstanding bugs test file.
........
  r52495 | georg.brandl | 2006-10-28 15:51:49 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_math to unittest.
........
  r52496 | georg.brandl | 2006-10-28 15:56:58 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_opcodes to unittest.
........
  r52497 | georg.brandl | 2006-10-28 18:04:04 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix nth() itertool recipe.
........
  r52500 | georg.brandl | 2006-10-28 22:25:09 +0200 (Sat, 28 Oct 2006) | 2 lines
  make test_grammar pass with python -O
........
  r52501 | neal.norwitz | 2006-10-28 23:15:30 +0200 (Sat, 28 Oct 2006) | 6 lines
  Add some asserts.  In sysmodule, I think these were to try to silence
  some warnings from Klokwork.  They verify the assumptions of the format
  of svn version output.
  The assert in the thread module helped debug a problem on HP-UX.
........
  r52502 | neal.norwitz | 2006-10-28 23:16:54 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix warnings with HP's C compiler.  It doesn't recognize that infinite
  loops are, um, infinite.  These conditions should not be able to happen.
  Will backport.
........
  r52503 | neal.norwitz | 2006-10-28 23:17:51 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix crash in test on HP-UX.  Apparently, it's not possible to delete a lock if
  it's held (even by the current thread).
  Will backport.
........
  r52504 | neal.norwitz | 2006-10-28 23:19:07 +0200 (Sat, 28 Oct 2006) | 6 lines
  Fix bug #1565514, SystemError not raised on too many nested blocks.
  It seems like this should be a different error than SystemError, but
  I don't have any great ideas and SystemError was raised in 2.4 and earlier.
  Will backport.
........
  r52505 | neal.norwitz | 2006-10-28 23:20:12 +0200 (Sat, 28 Oct 2006) | 4 lines
  Prevent crash if alloc of garbage fails.  Found by Typo.pl.
  Will backport.
........
  r52506 | neal.norwitz | 2006-10-28 23:21:00 +0200 (Sat, 28 Oct 2006) | 4 lines
  Don't inline Py_ADDRESS_IN_RANGE with gcc 4+ either.
  Will backport.
........
  r52513 | neal.norwitz | 2006-10-28 23:56:49 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix test_modulefinder so it doesn't fail when run after test_distutils.
........
  r52514 | neal.norwitz | 2006-10-29 00:12:26 +0200 (Sun, 29 Oct 2006) | 4 lines
  From SF 1557890, fix problem of using wrong type in example.
  Will backport.
........
  r52517 | georg.brandl | 2006-10-29 09:39:22 +0100 (Sun, 29 Oct 2006) | 4 lines
  Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
  fix all codecs file wrappers to work correctly with the "with"
  statement (bug #1586513).
........
  r52519 | georg.brandl | 2006-10-29 09:47:08 +0100 (Sun, 29 Oct 2006) | 3 lines
  Clean up a leftover from old listcomp generation code.
........
  r52520 | georg.brandl | 2006-10-29 09:53:06 +0100 (Sun, 29 Oct 2006) | 4 lines
  Bug #1586448: the compiler module now emits the same bytecode for
  list comprehensions as the builtin compiler, using the LIST_APPEND
  opcode.
........
  r52521 | georg.brandl | 2006-10-29 10:01:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove trailing comma.
........
  r52522 | georg.brandl | 2006-10-29 10:05:04 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1357915: allow all sequence types for shell arguments in
  subprocess.
........
  r52524 | georg.brandl | 2006-10-29 10:16:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Patch #1583880: fix tarfile's problems with long names and posix/
  GNU modes.
........
  r52526 | georg.brandl | 2006-10-29 10:18:00 +0100 (Sun, 29 Oct 2006) | 3 lines
  Test assert if __debug__ is true.
........
  r52527 | georg.brandl | 2006-10-29 10:32:16 +0100 (Sun, 29 Oct 2006) | 2 lines
  Fix the new EncodedFile test to work with big endian platforms.
........
  r52529 | georg.brandl | 2006-10-29 15:39:09 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
........
  r52532 | georg.brandl | 2006-10-29 19:01:08 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586773: extend hashlib docstring.
........
  r52534 | neal.norwitz | 2006-10-29 19:30:10 +0100 (Sun, 29 Oct 2006) | 4 lines
  Update comments, remove commented out code.
  Move assembler structure next to assembler code to make it easier to
  move it to a separate file.
........
  r52535 | georg.brandl | 2006-10-29 19:31:42 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1576657: when setting a KeyError for a tuple key, make sure that
  the tuple isn't used as the "exception arguments tuple".
........
  r52537 | georg.brandl | 2006-10-29 20:13:40 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_mmap to unittest.
........
  r52538 | georg.brandl | 2006-10-29 20:20:45 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_poll to unittest.
........
  r52539 | georg.brandl | 2006-10-29 20:24:43 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_nis to unittest.
........
  r52540 | georg.brandl | 2006-10-29 20:35:03 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_types to unittest.
........
  r52541 | georg.brandl | 2006-10-29 20:51:16 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cookie to unittest.
........
  r52542 | georg.brandl | 2006-10-29 21:09:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cgi to unittest.
........
  r52543 | georg.brandl | 2006-10-29 21:24:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Completely convert test_httplib to unittest.
........
  r52544 | georg.brandl | 2006-10-29 21:28:26 +0100 (Sun, 29 Oct 2006) | 2 lines
  Convert test_MimeWriter to unittest.
........
  r52545 | georg.brandl | 2006-10-29 21:31:17 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_openpty to unittest.
........
  r52546 | georg.brandl | 2006-10-29 21:35:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove leftover test output file.
........
  r52547 | georg.brandl | 2006-10-29 22:54:18 +0100 (Sun, 29 Oct 2006) | 3 lines
  Move the check for openpty to the beginning.
........
  r52548 | walter.doerwald | 2006-10-29 23:06:28 +0100 (Sun, 29 Oct 2006) | 2 lines
  Add tests for basic argument errors.
........
  r52549 | walter.doerwald | 2006-10-30 00:02:27 +0100 (Mon, 30 Oct 2006) | 3 lines
  Add tests for incremental codecs with an errors
  argument.
........
  r52550 | neal.norwitz | 2006-10-30 00:39:03 +0100 (Mon, 30 Oct 2006) | 1 line
  Fix refleak
........
  r52552 | neal.norwitz | 2006-10-30 00:58:36 +0100 (Mon, 30 Oct 2006) | 1 line
  I'm assuming this is correct, it fixes the tests so they pass again
........
  r52555 | vinay.sajip | 2006-10-31 18:32:37 +0100 (Tue, 31 Oct 2006) | 1 line
  Change to improve speed of _fixupChildren
........
  r52556 | vinay.sajip | 2006-10-31 18:34:31 +0100 (Tue, 31 Oct 2006) | 1 line
  Added relativeCreated to Formatter doc (has been in the system for a long time - was unaccountably left out of the docs and not noticed until now).
........
  r52588 | thomas.heller | 2006-11-02 20:48:24 +0100 (Thu, 02 Nov 2006) | 5 lines
  Replace the XXX marker in the 'Arrays and pointers' reference manual
  section with a link to the tutorial sections.
  Will backport to release25-maint.
........
  r52592 | thomas.heller | 2006-11-02 21:22:29 +0100 (Thu, 02 Nov 2006) | 6 lines
  Fix a code example by adding a missing import.
  Fixes #1557890.
  Will backport to release25-maint.
........
  r52598 | tim.peters | 2006-11-03 03:32:46 +0100 (Fri, 03 Nov 2006) | 2 lines
  Whitespace normalization.
........
  r52619 | martin.v.loewis | 2006-11-04 19:14:06 +0100 (Sat, 04 Nov 2006) | 4 lines
  - Patch #1060577: Extract list of RPM files from spec file in
    bdist_rpm
  Will backport to 2.5.
........
  r52621 | neal.norwitz | 2006-11-04 20:25:22 +0100 (Sat, 04 Nov 2006) | 4 lines
  Bug #1588287: fix invalid assertion for `1,2` in debug builds.
  Will backport
........
  r52630 | andrew.kuchling | 2006-11-05 22:04:37 +0100 (Sun, 05 Nov 2006) | 1 line
  Update link
........
  r52631 | skip.montanaro | 2006-11-06 15:34:52 +0100 (Mon, 06 Nov 2006) | 1 line
  note that user can control directory location even if default dir is used
........
  r52644 | ronald.oussoren | 2006-11-07 16:53:38 +0100 (Tue, 07 Nov 2006) | 2 lines
  Fix a number of typos in strings and comments (sf#1589070)
........
  r52647 | ronald.oussoren | 2006-11-07 17:00:34 +0100 (Tue, 07 Nov 2006) | 2 lines
  Whitespace changes to make the source more compliant with PEP8 (SF#1589070)
........
  r52651 | thomas.heller | 2006-11-07 19:01:18 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix markup.
  Will backport to release25-maint.
........
  r52653 | thomas.heller | 2006-11-07 19:20:47 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix grammatical error as well.
  Will backport to release25-maint.
........
  r52657 | andrew.kuchling | 2006-11-07 21:39:16 +0100 (Tue, 07 Nov 2006) | 1 line
  Add missing word
........
  r52662 | martin.v.loewis | 2006-11-08 07:46:37 +0100 (Wed, 08 Nov 2006) | 4 lines
  Correctly forward exception in instance_contains().
  Fixes #1591996. Patch contributed by Neal Norwitz.
  Will backport.
........
  r52664 | martin.v.loewis | 2006-11-08 07:48:36 +0100 (Wed, 08 Nov 2006) | 2 lines
  News entry for 52662.
........
  r52665 | martin.v.loewis | 2006-11-08 08:35:55 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1351744: Add askyesnocancel helper for tkMessageBox.
........
  r52666 | georg.brandl | 2006-11-08 08:45:59 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1592072: fix docs for return value of PyErr_CheckSignals.
........
  r52668 | georg.brandl | 2006-11-08 11:04:29 +0100 (Wed, 08 Nov 2006) | 3 lines
  Bug #1592533: rename variable in heapq doc example, to avoid shadowing
  "sorted".
........
  r52671 | andrew.kuchling | 2006-11-08 14:35:34 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on the functional module
........
  r52672 | andrew.kuchling | 2006-11-08 15:14:30 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on operator module; make a few edits
........
  r52673 | andrew.kuchling | 2006-11-08 15:24:03 +0100 (Wed, 08 Nov 2006) | 1 line
  Add table of contents; this required fixing a few headings.  Some more smalle edits.
........
  r52674 | andrew.kuchling | 2006-11-08 15:30:14 +0100 (Wed, 08 Nov 2006) | 1 line
  More edits
........
  r52686 | martin.v.loewis | 2006-11-09 12:06:03 +0100 (Thu, 09 Nov 2006) | 3 lines
  Patch #838546: Make terminal become controlling in pty.fork().
  Will backport to 2.5.
........
  r52688 | martin.v.loewis | 2006-11-09 12:27:32 +0100 (Thu, 09 Nov 2006) | 2 lines
  Patch #1592250: Add elidge argument to Tkinter.Text.search.
........
  r52690 | andrew.kuchling | 2006-11-09 14:27:07 +0100 (Thu, 09 Nov 2006) | 7 lines
  [Bug #1569790] mailbox.Maildir.get_folder() loses factory information
  Both the Maildir and MH classes had this bug; the patch fixes both classes
  and adds a test.
  Will backport to 25-maint.
........
  r52692 | andrew.kuchling | 2006-11-09 14:51:14 +0100 (Thu, 09 Nov 2006) | 1 line
  [Patch #1514544 by David Watson] use fsync() to ensure data is really on disk
........
  r52695 | walter.doerwald | 2006-11-09 17:23:26 +0100 (Thu, 09 Nov 2006) | 2 lines
  Replace C++ comment with C comment (fixes SF bug #1593525).
........
  r52712 | andrew.kuchling | 2006-11-09 22:16:46 +0100 (Thu, 09 Nov 2006) | 11 lines
  [Patch #1514543] mailbox (Maildir): avoid losing messages on name clash
  Two changes:
  Where possible, use link()/remove() to move files into a directory; this
  makes it easier to avoid overwriting an existing file.
  Use _create_carefully() to create files in tmp/, which uses O_EXCL.
  Backport candidate.
........
  r52716 | phillip.eby | 2006-11-10 01:33:36 +0100 (Fri, 10 Nov 2006) | 4 lines
  Fix SF#1566719: not creating site-packages (or other target directory) when
  installing .egg-info for a project that contains no modules or packages,
  while using --root (as in bdist_rpm).
........
  r52719 | andrew.kuchling | 2006-11-10 14:14:01 +0100 (Fri, 10 Nov 2006) | 1 line
  Reword entry
........
  r52725 | andrew.kuchling | 2006-11-10 15:39:01 +0100 (Fri, 10 Nov 2006) | 1 line
  [Feature request #1542920] Link to wsgi.org
........
  r52731 | georg.brandl | 2006-11-11 19:29:11 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594742: wrong word in stringobject doc.
........
  r52733 | georg.brandl | 2006-11-11 19:32:47 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594758: wording improvement for dict.update() docs.
........
  r52736 | martin.v.loewis | 2006-11-12 11:32:47 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1065257: Support passing open files as body in
  HTTPConnection.request().
........
  r52737 | martin.v.loewis | 2006-11-12 11:41:39 +0100 (Sun, 12 Nov 2006) | 2 lines
  Patch #1355023: support whence argument for GzipFile.seek.
........
  r52738 | martin.v.loewis | 2006-11-12 19:24:26 +0100 (Sun, 12 Nov 2006) | 2 lines
  Bug #1067760: Deprecate passing floats to file.seek.
........
  r52739 | martin.v.loewis | 2006-11-12 19:48:13 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1359217: Ignore 2xx response before 150 response.
  Will backport to 2.5.
........
  r52741 | martin.v.loewis | 2006-11-12 19:56:03 +0100 (Sun, 12 Nov 2006) | 4 lines
  Patch #1360200: Use unmangled_version RPM spec field to deal with
  file name mangling.
  Will backport to 2.5.
........
  r52753 | walter.doerwald | 2006-11-15 17:23:46 +0100 (Wed, 15 Nov 2006) | 2 lines
  Fix typo.
........
  r52754 | georg.brandl | 2006-11-15 18:42:03 +0100 (Wed, 15 Nov 2006) | 2 lines
  Bug #1594809: add a note to README regarding PYTHONPATH and make install.
........
  r52762 | georg.brandl | 2006-11-16 16:05:14 +0100 (Thu, 16 Nov 2006) | 2 lines
  Bug #1597576: mention that the new base64 api has been introduced in py2.4.
........
  r52764 | georg.brandl | 2006-11-16 17:50:59 +0100 (Thu, 16 Nov 2006) | 3 lines
  Bug #1597824: return the registered function from atexit.register()
  to facilitate usage as a decorator.
........
  r52765 | georg.brandl | 2006-11-16 18:08:45 +0100 (Thu, 16 Nov 2006) | 4 lines
  Bug #1588217: don't parse "= " as a soft line break in binascii's
  a2b_qp() function, instead leave it in the string as quopri.decode()
  does.
........
  r52776 | andrew.kuchling | 2006-11-17 14:30:25 +0100 (Fri, 17 Nov 2006) | 17 lines
  Remove file-locking in MH.pack() method.
  This change looks massive but it's mostly a re-indenting after
  removing some try...finally blocks.
  Also adds a test case that does a pack() while the mailbox is locked; this
  test would have turned up bugs in the original code on some platforms.
  In both nmh and GNU Mailutils' implementation of MH-format mailboxes,
  no locking is done of individual message files when renaming them.
  The original mailbox.py code did do locking, which meant that message
  files had to be opened.  This code was buggy on certain platforms
  (found through reading the code); there were code paths that closed
  the file object and then called _unlock_file() on it.
  Will backport to 25-maint once I see how the buildbots react to this patch.
........
  r52780 | martin.v.loewis | 2006-11-18 19:00:23 +0100 (Sat, 18 Nov 2006) | 5 lines
  Patch #1538878: Don't make tkSimpleDialog dialogs transient if
  the parent window is withdrawn. This mirrors what dialog.tcl
  does.
  Will backport to 2.5.
........
  r52782 | martin.v.loewis | 2006-11-18 19:05:35 +0100 (Sat, 18 Nov 2006) | 4 lines
  Patch #1594554: Always close a tkSimpleDialog on ok(), even
  if an exception occurs.
  Will backport to 2.5.
........
  r52784 | martin.v.loewis | 2006-11-18 19:42:11 +0100 (Sat, 18 Nov 2006) | 3 lines
  Patch #1472877: Fix Tix subwidget name resolution.
  Will backport to 2.5.
........
  r52786 | andrew.kuchling | 2006-11-18 23:17:33 +0100 (Sat, 18 Nov 2006) | 1 line
  Expand checking in test_sha
........
  r52787 | georg.brandl | 2006-11-19 09:48:30 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch [ 1586791 ] better error msgs for some TypeErrors
........
  r52788 | martin.v.loewis | 2006-11-19 11:41:41 +0100 (Sun, 19 Nov 2006) | 4 lines
  Make cStringIO.truncate raise IOError for negative
  arguments (even for -1). Fixes the last bit of
  #1359365.
........
  r52789 | andrew.kuchling | 2006-11-19 19:40:01 +0100 (Sun, 19 Nov 2006) | 1 line
  Add a test case of data w/ bytes > 127
........
  r52790 | martin.v.loewis | 2006-11-19 19:51:54 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch #1070046: Marshal new-style objects like InstanceType
  in xmlrpclib.
........
  r52792 | neal.norwitz | 2006-11-19 22:26:53 +0100 (Sun, 19 Nov 2006) | 4 lines
  Speed up function calls into the math module by using METH_O.
  There should be no functional changes. However, the error msgs are
  slightly different.  Also verified that the module dict is not NULL on init.
........
  r52794 | george.yoshida | 2006-11-20 03:24:48 +0100 (Mon, 20 Nov 2006) | 2 lines
  markup fix
........
  r52795 | georg.brandl | 2006-11-20 08:12:58 +0100 (Mon, 20 Nov 2006) | 3 lines
  Further markup fix.
........
  r52800 | andrew.kuchling | 2006-11-20 14:39:37 +0100 (Mon, 20 Nov 2006) | 2 lines
  Jython compatibility fix: if uu.decode() opened its output file, be sure to
  close it.
........
  r52811 | neal.norwitz | 2006-11-21 06:26:22 +0100 (Tue, 21 Nov 2006) | 9 lines
  Bug #1599782: Fix segfault on bsddb.db.DB().type().
  The problem is that _DB_get_type() can't be called without the GIL
  because it calls a bunch of PyErr_* APIs when an error occurs.
  There were no other cases in this file that it was called without the GIL.
  Removing the BEGIN/END THREAD around _DB_get_type() made everything work.
  Will backport.
........
  r52814 | neal.norwitz | 2006-11-21 06:51:51 +0100 (Tue, 21 Nov 2006) | 1 line
  Oops, convert tabs to spaces
........
  r52815 | neal.norwitz | 2006-11-21 07:23:44 +0100 (Tue, 21 Nov 2006) | 1 line
  Fix SF #1599879, socket.gethostname should ref getfqdn directly.
........
  r52817 | martin.v.loewis | 2006-11-21 19:20:25 +0100 (Tue, 21 Nov 2006) | 4 lines
  Conditionalize definition of _CRT_SECURE_NO_DEPRECATE
  and _CRT_NONSTDC_NO_DEPRECATE.
  Will backport.
........
  r52821 | martin.v.loewis | 2006-11-22 09:50:02 +0100 (Wed, 22 Nov 2006) | 4 lines
  Patch #1362975: Rework CodeContext indentation algorithm to
  avoid hard-coding pixel widths. Also make the text's scrollbar
  a child of the text frame, not the top widget.
........
  r52826 | walter.doerwald | 2006-11-23 06:03:56 +0100 (Thu, 23 Nov 2006) | 3 lines
  Change decode() so that it works with a buffer (i.e. unicode(..., 'utf-8-sig'))
  SF bug #1601501.
........
  r52833 | georg.brandl | 2006-11-23 10:55:07 +0100 (Thu, 23 Nov 2006) | 2 lines
  Bug #1601630: little improvement to getopt docs
........
  r52835 | michael.hudson | 2006-11-23 14:54:04 +0100 (Thu, 23 Nov 2006) | 3 lines
  a test for an error condition not covered by existing tests
  (noticed this when writing the equivalent code for pypy)
........
  r52839 | raymond.hettinger | 2006-11-23 22:06:03 +0100 (Thu, 23 Nov 2006) | 1 line
  Fix and/add typo
........
  r52840 | raymond.hettinger | 2006-11-23 22:35:19 +0100 (Thu, 23 Nov 2006) | 1 line
  ... and the number of the counting shall be three.
........
  r52841 | thomas.heller | 2006-11-24 19:45:39 +0100 (Fri, 24 Nov 2006) | 1 line
  Fix bug #1598620: A ctypes structure cannot contain itself.
........
  r52843 | martin.v.loewis | 2006-11-25 16:39:19 +0100 (Sat, 25 Nov 2006) | 3 lines
  Disable _XOPEN_SOURCE on NetBSD 1.x.
  Will backport to 2.5
........
  r52845 | georg.brandl | 2006-11-26 20:27:47 +0100 (Sun, 26 Nov 2006) | 2 lines
  Bug #1603321: make pstats.Stats accept Unicode file paths.
........
  r52850 | georg.brandl | 2006-11-27 19:46:21 +0100 (Mon, 27 Nov 2006) | 2 lines
  Bug #1603789: grammatical error in Tkinter docs.
........
  r52855 | thomas.heller | 2006-11-28 21:21:54 +0100 (Tue, 28 Nov 2006) | 7 lines
  Fix #1563807: _ctypes built on AIX fails with ld ffi error.
  The contents of ffi_darwin.c must be compiled unless __APPLE__ is
  defined and __ppc__ is not.
  Will backport.
........
  r52862 | armin.rigo | 2006-11-29 22:59:22 +0100 (Wed, 29 Nov 2006) | 3 lines
  Forgot a case where the locals can now be a general mapping
  instead of just a dictionary.  (backporting...)
........
  r52872 | guido.van.rossum | 2006-11-30 20:23:13 +0100 (Thu, 30 Nov 2006) | 2 lines
  Update version.
........
  r52890 | walter.doerwald | 2006-12-01 17:59:47 +0100 (Fri, 01 Dec 2006) | 3 lines
  Move xdrlib tests from the module into a separate test script,
  port the tests to unittest and add a few new tests.
........
  r52900 | raymond.hettinger | 2006-12-02 03:00:39 +0100 (Sat, 02 Dec 2006) | 1 line
  Add name to credits (for untokenize).
........
  r52905 | martin.v.loewis | 2006-12-03 10:54:46 +0100 (Sun, 03 Dec 2006) | 2 lines
  Move IDLE news into NEWS.txt.
........
  r52906 | martin.v.loewis | 2006-12-03 12:23:45 +0100 (Sun, 03 Dec 2006) | 4 lines
  Patch #1544279: Improve thread-safety of the socket module by moving
  the sock_addr_t storage out of the socket object.
  Will backport to 2.5.
........
  r52908 | martin.v.loewis | 2006-12-03 13:01:53 +0100 (Sun, 03 Dec 2006) | 3 lines
  Patch #1371075: Make ConfigParser accept optional dict type
  for ordering, sorting, etc.
........
  r52910 | matthias.klose | 2006-12-03 18:16:41 +0100 (Sun, 03 Dec 2006) | 2 lines
  - Fix build failure on kfreebsd and on the hurd.
........
  r52915 | george.yoshida | 2006-12-04 12:41:54 +0100 (Mon, 04 Dec 2006) | 2 lines
  fix a versionchanged tag
........
  r52917 | george.yoshida | 2006-12-05 06:39:50 +0100 (Tue, 05 Dec 2006) | 3 lines
  Fix pickle doc typo
  Patch #1608758
........
  r52938 | georg.brandl | 2006-12-06 23:21:18 +0100 (Wed, 06 Dec 2006) | 2 lines
  Patch #1610437: fix a tarfile bug with long filename headers.
........
  r52945 | brett.cannon | 2006-12-07 00:38:48 +0100 (Thu, 07 Dec 2006) | 3 lines
  Fix a bad assumption that all objects assigned to '__loader__' on a module
  will have a '_files' attribute.
........
  r52951 | georg.brandl | 2006-12-07 10:30:06 +0100 (Thu, 07 Dec 2006) | 3 lines
  RFE #1592899: mention string.maketrans() in docs for str.translate,
  remove reference to the old regex module in the former's doc.
........
  r52962 | raymond.hettinger | 2006-12-08 04:17:18 +0100 (Fri, 08 Dec 2006) | 1 line
  Eliminate two redundant calls to PyObject_Hash().
........
  r52963 | raymond.hettinger | 2006-12-08 05:24:33 +0100 (Fri, 08 Dec 2006) | 3 lines
  Port Armin's fix for a dict resize vulnerability (svn revision 46589, sf bug 1456209).
........
  r52964 | raymond.hettinger | 2006-12-08 05:57:50 +0100 (Fri, 08 Dec 2006) | 4 lines
  Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to setting a KeyError (svn revision 52535, sf bug
  1576657).
........
  r52966 | raymond.hettinger | 2006-12-08 18:35:25 +0100 (Fri, 08 Dec 2006) | 2 lines
  Add test for SF bug 1576657
........
  r52970 | georg.brandl | 2006-12-08 21:46:11 +0100 (Fri, 08 Dec 2006) | 3 lines
  #1577756: svnversion doesn't react to LANG=C, use LC_ALL=C to force
  English output.
........
  r52972 | georg.brandl | 2006-12-09 10:08:29 +0100 (Sat, 09 Dec 2006) | 3 lines
  Patch #1608267: fix a race condition in os.makedirs() is the directory
  to be created is already there.
........
  r52975 | matthias.klose | 2006-12-09 13:15:27 +0100 (Sat, 09 Dec 2006) | 2 lines
  - Fix the build of the library reference in info format.
........
  r52994 | neal.norwitz | 2006-12-11 02:01:06 +0100 (Mon, 11 Dec 2006) | 1 line
  Fix a typo
........
  r52996 | georg.brandl | 2006-12-11 08:56:33 +0100 (Mon, 11 Dec 2006) | 2 lines
  Move errno imports back to individual functions.
........
  r52998 | vinay.sajip | 2006-12-11 15:07:16 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by Jeremy Katz (SF #1609407)
........
  r53000 | vinay.sajip | 2006-12-11 15:26:23 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by "cuppatea" (SF #1503765)
........
											 
										 
										
											2006-12-13 04:49:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  anything  about  what  happens  when  a  signed  integer  operation  overflows , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  and  some  compilers  think  they ' re  doing  you  a  favor  by  being  " clever " 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 10:47:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  then .   The  bit  pattern  for  the  largest  positive  signed  long  is 
							 
						 
					
						
							
								
									
										
											 
										
											
												Four months of trunk changes (including a few releases...)
Merged revisions 51434-53004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r51434 | neal.norwitz | 2006-08-21 20:20:10 +0200 (Mon, 21 Aug 2006) | 1 line
  Fix a couple of ssize-t issues reported by Alexander Belopolsky on python-dev
........
  r51439 | neal.norwitz | 2006-08-21 21:47:08 +0200 (Mon, 21 Aug 2006) | 6 lines
  Patch #1542451: disallow continue anywhere under a finally
  I'm undecided if this should be backported to 2.5 or 2.5.1.
  Armin suggested to wait (I'm of the same opinion).  Thomas W thinks
  it's fine to go in 2.5.
........
  r51443 | neal.norwitz | 2006-08-21 22:16:24 +0200 (Mon, 21 Aug 2006) | 4 lines
  Handle a few more error conditions.
  Klocwork 301 and 302.  Will backport.
........
  r51450 | neal.norwitz | 2006-08-22 00:21:19 +0200 (Tue, 22 Aug 2006) | 5 lines
  Patch #1541585: fix buffer overrun when performing repr() on
  a unicode string in a build with wide unicode (UCS-4) support.
  This code could be improved, so add an XXX comment.
........
  r51456 | neal.norwitz | 2006-08-22 01:44:48 +0200 (Tue, 22 Aug 2006) | 1 line
  Try to get the windows bots working again with the new peephole.c
........
  r51461 | anthony.baxter | 2006-08-22 09:36:59 +0200 (Tue, 22 Aug 2006) | 1 line
  patch for documentation for recent uuid changes (from ping)
........
  r51473 | neal.norwitz | 2006-08-22 15:56:56 +0200 (Tue, 22 Aug 2006) | 1 line
  Alexander Belopolsky pointed out that pos is a size_t
........
  r51489 | jeremy.hylton | 2006-08-22 22:46:00 +0200 (Tue, 22 Aug 2006) | 2 lines
  Expose column offset information in parse trees.
........
  r51497 | andrew.kuchling | 2006-08-23 01:13:43 +0200 (Wed, 23 Aug 2006) | 1 line
  Move functional howto into trunk
........
  r51515 | jeremy.hylton | 2006-08-23 20:37:43 +0200 (Wed, 23 Aug 2006) | 2 lines
  Baby steps towards better tests for tokenize
........
  r51525 | alex.martelli | 2006-08-23 22:42:02 +0200 (Wed, 23 Aug 2006) | 6 lines
  x**2 should about equal x*x (including for a float x such that the result is
  inf) but didn't; added a test to test_float to verify that, and ignored the
  ERANGE value for errno in the pow operation to make the new test pass (with
  help from Marilyn Davis at the Google Python Sprint -- thanks!).
........
  r51526 | jeremy.hylton | 2006-08-23 23:14:03 +0200 (Wed, 23 Aug 2006) | 20 lines
  Bug fixes large and small for tokenize.
  Small: Always generate a NL or NEWLINE token following
         a COMMENT token.  The old code did not generate an NL token if
         the comment was on a line by itself.
  Large: The output of untokenize() will now match the
         input exactly if it is passed the full token sequence.  The
         old, crufty output is still generated if a limited input
         sequence is provided, where limited means that it does not
         include position information for tokens.
  Remaining bug: There is no CONTINUATION token (\) so there is no way
  for untokenize() to handle such code.
  Also, expanded the number of doctests in hopes of eventually removing
  the old-style tests that compare against a golden file.
  Bug fix candidate for Python 2.5.1. (Sigh.)
........
  r51527 | jeremy.hylton | 2006-08-23 23:26:46 +0200 (Wed, 23 Aug 2006) | 5 lines
  Replace dead code with an assert.
  Now that COMMENT tokens are reliably followed by NL or NEWLINE,
  there is never a need to add extra newlines in untokenize.
........
  r51530 | alex.martelli | 2006-08-24 00:17:59 +0200 (Thu, 24 Aug 2006) | 7 lines
  Reverting the patch that tried to fix the issue whereby x**2 raises
  OverflowError while x*x succeeds and produces infinity; apparently
  these inconsistencies cannot be fixed across ``all'' platforms and
  there's a widespread feeling that therefore ``every'' platform
  should keep suffering forevermore.  Ah well.
........
  r51565 | thomas.wouters | 2006-08-24 20:40:20 +0200 (Thu, 24 Aug 2006) | 6 lines
  Fix SF bug #1545837: array.array borks on deepcopy.
  array.__deepcopy__() needs to take an argument, even if it doesn't actually
  use it. Will backport to 2.5 and 2.4 (if applicable.)
........
  r51580 | martin.v.loewis | 2006-08-25 02:03:34 +0200 (Fri, 25 Aug 2006) | 3 lines
  Patch #1545507: Exclude ctypes package in Win64 MSI file.
  Will backport to 2.5.
........
  r51589 | neal.norwitz | 2006-08-25 03:52:49 +0200 (Fri, 25 Aug 2006) | 1 line
  importing types is not necessary if we use isinstance
........
  r51604 | thomas.heller | 2006-08-25 09:27:33 +0200 (Fri, 25 Aug 2006) | 3 lines
  Port _ctypes.pyd to win64 on AMD64.
........
  r51605 | thomas.heller | 2006-08-25 09:34:51 +0200 (Fri, 25 Aug 2006) | 3 lines
  Add missing file for _ctypes.pyd port to win64 on AMD64.
........
  r51606 | thomas.heller | 2006-08-25 11:26:33 +0200 (Fri, 25 Aug 2006) | 6 lines
  Build _ctypes.pyd for win AMD64 into the MSVC project file.
  Since MSVC doesn't know about .asm files, a helper batch file is needed
  to find ml64.exe in predefined locations.  The helper script hardcodes
  the path to the MS Platform SDK.
........
  r51608 | armin.rigo | 2006-08-25 14:44:28 +0200 (Fri, 25 Aug 2006) | 4 lines
  The regular expression engine in '_sre' can segfault when interpreting
  bogus bytecode.  It is unclear whether this is a real bug or a "won't
  fix" case like bogus_code_obj.py.
........
  r51617 | tim.peters | 2006-08-26 00:05:39 +0200 (Sat, 26 Aug 2006) | 2 lines
  Whitespace normalization.
........
  r51618 | tim.peters | 2006-08-26 00:06:44 +0200 (Sat, 26 Aug 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51619 | tim.peters | 2006-08-26 00:26:21 +0200 (Sat, 26 Aug 2006) | 3 lines
  A new test here relied on preserving invisible trailing
  whitespace in expected output.  Stop that.
........
  r51624 | jack.diederich | 2006-08-26 20:42:06 +0200 (Sat, 26 Aug 2006) | 4 lines
  - Move functions common to all path modules into genericpath.py and have the
    OS speicifc path modules import them.
  - Have os2emxpath import common functions fron ntpath instead of using copies
........
  r51642 | neal.norwitz | 2006-08-29 07:40:58 +0200 (Tue, 29 Aug 2006) | 1 line
  Fix a couple of typos.
........
  r51647 | marc-andre.lemburg | 2006-08-29 12:34:12 +0200 (Tue, 29 Aug 2006) | 5 lines
  Fix a buglet in the error reporting (SF bug report #1546372).
  This should probably go into Python 2.5 or 2.5.1 as well.
........
  r51663 | armin.rigo | 2006-08-31 10:51:06 +0200 (Thu, 31 Aug 2006) | 3 lines
  Doc fix: hashlib objects don't always return a digest of 16 bytes.
  Backport candidate for 2.5.
........
  r51664 | nick.coghlan | 2006-08-31 14:00:43 +0200 (Thu, 31 Aug 2006) | 1 line
  Fix the wrongheaded implementation of context management in the decimal module and add unit tests. (python-dev discussion is ongoing regarding what we do about Python 2.5)
........
  r51665 | nick.coghlan | 2006-08-31 14:51:25 +0200 (Thu, 31 Aug 2006) | 1 line
  Remove the old decimal context management tests from test_contextlib (guess who didn't run the test suite before committing...)
........
  r51669 | brett.cannon | 2006-08-31 20:54:26 +0200 (Thu, 31 Aug 2006) | 4 lines
  Make sure memory is properly cleaned up in file_init.
  Backport candidate.
........
  r51671 | brett.cannon | 2006-08-31 23:47:52 +0200 (Thu, 31 Aug 2006) | 2 lines
  Fix comment about indentation level in C files.
........
  r51674 | brett.cannon | 2006-09-01 00:42:37 +0200 (Fri, 01 Sep 2006) | 3 lines
  Have pre-existing C files use 8 spaces indents (to match old PEP 7 style), but
  have all new files use 4 spaces (to match current PEP 7 style).
........
  r51676 | fred.drake | 2006-09-01 05:57:19 +0200 (Fri, 01 Sep 2006) | 3 lines
  - SF patch #1550263: Enhance and correct unittest docs
  - various minor cleanups for improved consistency
........
  r51677 | georg.brandl | 2006-09-02 00:30:52 +0200 (Sat, 02 Sep 2006) | 2 lines
  evalfile() should be execfile().
........
  r51681 | neal.norwitz | 2006-09-02 04:43:17 +0200 (Sat, 02 Sep 2006) | 1 line
  SF #1547931, fix typo (missing and).  Will backport to 2.5
........
  r51683 | neal.norwitz | 2006-09-02 04:50:35 +0200 (Sat, 02 Sep 2006) | 1 line
  Bug #1548092: fix curses.tparm seg fault on invalid input.  Needs backport to 2.5.1 and earlier.
........
  r51684 | neal.norwitz | 2006-09-02 04:58:13 +0200 (Sat, 02 Sep 2006) | 4 lines
  Bug #1550714: fix SystemError from itertools.tee on negative value for n.
  Needs backport to 2.5.1 and earlier.
........
  r51685 | nick.coghlan | 2006-09-02 05:54:17 +0200 (Sat, 02 Sep 2006) | 1 line
  Make decimal.ContextManager a private implementation detail of decimal.localcontext()
........
  r51686 | nick.coghlan | 2006-09-02 06:04:18 +0200 (Sat, 02 Sep 2006) | 1 line
  Further corrections to the decimal module context management documentation
........
  r51688 | raymond.hettinger | 2006-09-02 19:07:23 +0200 (Sat, 02 Sep 2006) | 1 line
  Fix documentation nits for decimal context managers.
........
  r51690 | neal.norwitz | 2006-09-02 20:51:34 +0200 (Sat, 02 Sep 2006) | 1 line
  Add missing word in comment
........
  r51691 | neal.norwitz | 2006-09-02 21:40:19 +0200 (Sat, 02 Sep 2006) | 7 lines
  Hmm, this test has failed at least twice recently on the OpenBSD and
  Debian sparc buildbots.  Since this goes through a lot of tests
  and hits the disk a lot it could be slow (especially if NFS is involved).
  I'm not sure if that's the problem, but printing periodic msgs shouldn't hurt.
  The code was stolen from test_compiler.
........
  r51693 | nick.coghlan | 2006-09-03 03:02:00 +0200 (Sun, 03 Sep 2006) | 1 line
  Fix final documentation nits before backporting decimal module fixes to 2.5
........
  r51694 | nick.coghlan | 2006-09-03 03:06:07 +0200 (Sun, 03 Sep 2006) | 1 line
  Typo fix for decimal docs
........
  r51697 | nick.coghlan | 2006-09-03 03:20:46 +0200 (Sun, 03 Sep 2006) | 1 line
  NEWS entry on trunk for decimal module changes
........
  r51704 | raymond.hettinger | 2006-09-04 17:32:48 +0200 (Mon, 04 Sep 2006) | 1 line
  Fix endcase for str.rpartition()
........
  r51716 | tim.peters | 2006-09-05 04:18:09 +0200 (Tue, 05 Sep 2006) | 12 lines
  "Conceptual" merge of rev 51711 from the 2.5 branch.
  i_divmod():  As discussed on Python-Dev, changed the overflow
  checking to live happily with recent gcc optimizations that
  assume signed integer arithmetic never overflows.
  This differs from the corresponding change on the 2.5 and 2.4
  branches, using a less obscure approach, but one that /may/
  tickle platform idiocies in their definitions of LONG_MIN.
  The 2.4 + 2.5 change avoided introducing a dependence on
  LONG_MIN, at the cost of substantially goofier code.
........
  r51717 | tim.peters | 2006-09-05 04:21:19 +0200 (Tue, 05 Sep 2006) | 2 lines
  Whitespace normalization.
........
  r51719 | tim.peters | 2006-09-05 04:22:17 +0200 (Tue, 05 Sep 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51720 | neal.norwitz | 2006-09-05 04:24:03 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix SF bug #1546288, crash in dict_equal.
........
  r51721 | neal.norwitz | 2006-09-05 04:25:41 +0200 (Tue, 05 Sep 2006) | 1 line
  Fix SF #1552093, eval docstring typo (3 ps in mapping)
........
  r51724 | neal.norwitz | 2006-09-05 04:35:08 +0200 (Tue, 05 Sep 2006) | 1 line
  This was found by Guido AFAIK on p3yk (sic) branch.
........
  r51725 | neal.norwitz | 2006-09-05 04:36:20 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a NEWS entry for str.rpartition() change
........
  r51728 | neal.norwitz | 2006-09-05 04:57:01 +0200 (Tue, 05 Sep 2006) | 1 line
  Patch #1540470, for OpenBSD 4.0.  Backport candidate for 2.[34].
........
  r51729 | neal.norwitz | 2006-09-05 05:53:08 +0200 (Tue, 05 Sep 2006) | 12 lines
  Bug #1520864 (again): unpacking singleton tuples in list comprehensions and
  generator expressions (x for x, in ... ) works again.
  Sigh, I only fixed for loops the first time, not list comps and genexprs too.
  I couldn't find any more unpacking cases where there is a similar bug lurking.
  This code should be refactored to eliminate the duplication.  I'm sure
  the listcomp/genexpr code can be refactored.  I'm not sure if the for loop
  can re-use any of the same code though.
  Will backport to 2.5 (the only place it matters).
........
  r51731 | neal.norwitz | 2006-09-05 05:58:26 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a comment about some refactoring.  (There's probably more that should be done.)  I will reformat this file in the next checkin due to the inconsistent tabs/spaces.
........
  r51732 | neal.norwitz | 2006-09-05 06:00:12 +0200 (Tue, 05 Sep 2006) | 1 line
  M-x untabify
........
  r51737 | hyeshik.chang | 2006-09-05 14:07:09 +0200 (Tue, 05 Sep 2006) | 7 lines
  Fix a few bugs on cjkcodecs found by Oren Tirosh:
  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
    codepoints to conform the standard.
  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 2013:2
    codepoints now.
........
  r51738 | hyeshik.chang | 2006-09-05 14:14:57 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix a typo: 2013 -> 0213
........
  r51740 | georg.brandl | 2006-09-05 14:44:58 +0200 (Tue, 05 Sep 2006) | 3 lines
  Bug #1552618: change docs of dict.has_key() to reflect recommendation
  to use "in".
........
  r51742 | andrew.kuchling | 2006-09-05 15:02:40 +0200 (Tue, 05 Sep 2006) | 1 line
  Rearrange example a bit, and show rpartition() when separator is not found
........
  r51744 | andrew.kuchling | 2006-09-05 15:15:41 +0200 (Tue, 05 Sep 2006) | 1 line
  [Bug #1525469] SimpleXMLRPCServer still uses the sys.exc_{value,type} module-level globals instead of calling sys.exc_info().  Reported by Russell Warren
........
  r51745 | andrew.kuchling | 2006-09-05 15:19:18 +0200 (Tue, 05 Sep 2006) | 3 lines
  [Bug #1526834] Fix crash in pdb when you do 'b f(';
  the function name was placed into a regex pattern and the unbalanced paren
  caused re.compile() to report an error
........
  r51751 | kristjan.jonsson | 2006-09-05 19:58:12 +0200 (Tue, 05 Sep 2006) | 6 lines
  Update the PCBuild8 solution.
  Facilitate cross-compilation by having binaries in separate Win32 and x64 directories.
  Rationalized configs by making proper use of platforms/configurations.
  Remove pythoncore_pgo project.
  Add new PGIRelease and PGORelease configurations to perform Profile Guided Optimisation.
  Removed I64 support, but this can be easily added by copying the x64 platform settings.
........
  r51758 | gustavo.niemeyer | 2006-09-06 03:58:52 +0200 (Wed, 06 Sep 2006) | 3 lines
  Fixing #1531862: Do not close standard file descriptors in the
  subprocess module.
........
  r51760 | neal.norwitz | 2006-09-06 05:58:34 +0200 (Wed, 06 Sep 2006) | 1 line
  Revert 51758 because it broke all the buildbots
........
  r51762 | georg.brandl | 2006-09-06 08:03:59 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1551427: fix a wrong NULL pointer check in the win32 version
  of os.urandom().
........
  r51765 | georg.brandl | 2006-09-06 08:09:31 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1550983: emit better error messages for erroneous relative
  imports (if not in package and if beyond toplevel package).
........
  r51767 | neal.norwitz | 2006-09-06 08:28:06 +0200 (Wed, 06 Sep 2006) | 1 line
  with and as are now keywords.  There are some generated files I can't recreate.
........
  r51770 | georg.brandl | 2006-09-06 08:50:05 +0200 (Wed, 06 Sep 2006) | 5 lines
  Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
  Also make sure that every exception class has __module__ set to
  'exceptions'.
........
  r51785 | georg.brandl | 2006-09-06 22:05:58 +0200 (Wed, 06 Sep 2006) | 2 lines
  Fix missing import of the types module in logging.config.
........
  r51789 | marc-andre.lemburg | 2006-09-06 22:40:22 +0200 (Wed, 06 Sep 2006) | 3 lines
  Add news item for bug fix of SF bug report #1546372.
........
  r51797 | gustavo.niemeyer | 2006-09-07 02:48:33 +0200 (Thu, 07 Sep 2006) | 3 lines
  Fixed subprocess bug #1531862 again, after removing tests
  offending buildbot
........
  r51798 | raymond.hettinger | 2006-09-07 04:42:48 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix refcounts and add error checks.
........
  r51803 | nick.coghlan | 2006-09-07 12:50:34 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix the speed regression in inspect.py by adding another cache to speed up getmodule(). Patch #1553314
........
  r51805 | ronald.oussoren | 2006-09-07 14:03:10 +0200 (Thu, 07 Sep 2006) | 2 lines
  Fix a glaring error and update some version numbers.
........
  r51814 | andrew.kuchling | 2006-09-07 15:56:23 +0200 (Thu, 07 Sep 2006) | 1 line
  Typo fix
........
  r51815 | andrew.kuchling | 2006-09-07 15:59:38 +0200 (Thu, 07 Sep 2006) | 8 lines
  [Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout on the select()
  if an input hook has been defined.  Patch by Richard Boulton.
  This select() code is only executed with readline 2.1, or if
  READLINE_CALLBACKS is defined.
  Backport candidate for 2.5, 2.4, probably earlier versions too.
........
  r51816 | armin.rigo | 2006-09-07 17:06:00 +0200 (Thu, 07 Sep 2006) | 2 lines
  Add a warning notice on top of the generated grammar.txt.
........
  r51819 | thomas.heller | 2006-09-07 20:56:28 +0200 (Thu, 07 Sep 2006) | 5 lines
  Anonymous structure fields that have a bit-width specified did not work,
  and they gave a strange error message from PyArg_ParseTuple:
      function takes exactly 2 arguments (3 given).
  With tests.
........
  r51820 | thomas.heller | 2006-09-07 21:09:54 +0200 (Thu, 07 Sep 2006) | 4 lines
  The cast function did not accept c_char_p or c_wchar_p instances
  as first argument, and failed with a 'bad argument to internal function'
  error message.
........
  r51827 | nick.coghlan | 2006-09-08 12:04:38 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing NEWS entry for rev 51803
........
  r51828 | andrew.kuchling | 2006-09-08 15:25:23 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing word
........
  r51829 | andrew.kuchling | 2006-09-08 15:35:49 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51830 | andrew.kuchling | 2006-09-08 15:36:36 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51832 | andrew.kuchling | 2006-09-08 16:02:45 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51833 | andrew.kuchling | 2006-09-08 16:03:01 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51835 | andrew.kuchling | 2006-09-08 16:05:10 +0200 (Fri, 08 Sep 2006) | 1 line
  Fix typo in example
........
  r51837 | brett.cannon | 2006-09-09 09:11:46 +0200 (Sat, 09 Sep 2006) | 6 lines
  Remove the __unicode__ method from exceptions.  Allows unicode() to be called
  on exception classes.  Would require introducing a tp_unicode slot to make it
  work otherwise.
  Fixes bug #1551432 and will be backported.
........
  r51854 | neal.norwitz | 2006-09-11 06:24:09 +0200 (Mon, 11 Sep 2006) | 8 lines
  Forward port of 51850 from release25-maint branch.
  As mentioned on python-dev, reverting patch #1504333 because it introduced
  an infinite loop in rev 47154.
  This patch also adds a test to prevent the regression.
........
  r51855 | neal.norwitz | 2006-09-11 06:28:16 +0200 (Mon, 11 Sep 2006) | 5 lines
  Properly handle a NULL returned from PyArena_New().
  (Also fix some whitespace)
  Klocwork #364.
........
  r51856 | neal.norwitz | 2006-09-11 06:32:57 +0200 (Mon, 11 Sep 2006) | 1 line
  Add a "crasher" taken from the sgml bug report referenced in the comment
........
  r51858 | georg.brandl | 2006-09-11 11:38:35 +0200 (Mon, 11 Sep 2006) | 12 lines
  Forward-port of rev. 51857:
  Building with HP's cc on HP-UX turned up a couple of problems.
  _PyGILState_NoteThreadState was declared as static inconsistently.
  Make it static as it's not necessary outside of this module.
  Some tests failed because errno was reset to 0. (I think the tests
  that failed were at least: test_fcntl and test_mailbox).
  Ensure that errno doesn't change after a call to Py_END_ALLOW_THREADS.
  This only affected debug builds.
........
  r51865 | martin.v.loewis | 2006-09-12 21:49:20 +0200 (Tue, 12 Sep 2006) | 2 lines
  Forward-port 51862: Add sgml_input.html.
........
  r51866 | andrew.kuchling | 2006-09-12 22:50:23 +0200 (Tue, 12 Sep 2006) | 1 line
  Markup typo fix
........
  r51867 | andrew.kuchling | 2006-09-12 23:09:02 +0200 (Tue, 12 Sep 2006) | 1 line
  Some editing, markup fixes
........
  r51868 | andrew.kuchling | 2006-09-12 23:21:51 +0200 (Tue, 12 Sep 2006) | 1 line
  More wordsmithing
........
  r51877 | andrew.kuchling | 2006-09-14 13:22:18 +0200 (Thu, 14 Sep 2006) | 1 line
  Make --help mention that -v can be supplied multiple times
........
  r51878 | andrew.kuchling | 2006-09-14 13:28:50 +0200 (Thu, 14 Sep 2006) | 1 line
  Rewrite help message to remove some of the parentheticals.  (There were a lot of them.)
........
  r51883 | ka-ping.yee | 2006-09-15 02:34:19 +0200 (Fri, 15 Sep 2006) | 2 lines
  Fix grammar errors and improve clarity.
........
  r51885 | georg.brandl | 2006-09-15 07:22:24 +0200 (Fri, 15 Sep 2006) | 3 lines
  Correct elementtree module index entry.
........
  r51889 | fred.drake | 2006-09-15 17:18:04 +0200 (Fri, 15 Sep 2006) | 4 lines
  - fix module name in links in formatted documentation
  - minor markup cleanup
  (forward-ported from release25-maint revision 51888)
........
  r51891 | fred.drake | 2006-09-15 18:11:27 +0200 (Fri, 15 Sep 2006) | 3 lines
  revise explanation of returns_unicode to reflect bool values
  and to include the default value
  (merged from release25-maint revision 51890)
........
  r51897 | martin.v.loewis | 2006-09-16 19:36:37 +0200 (Sat, 16 Sep 2006) | 2 lines
  Patch #1557515: Add RLIMIT_SBSIZE.
........
  r51903 | ronald.oussoren | 2006-09-17 20:42:53 +0200 (Sun, 17 Sep 2006) | 2 lines
  Port of revision 51902 in release25-maint to the trunk
........
  r51904 | ronald.oussoren | 2006-09-17 21:23:27 +0200 (Sun, 17 Sep 2006) | 3 lines
  Tweak Mac/Makefile in to ensure that pythonw gets rebuild when the major version
  of python changes (2.5 -> 2.6). Bug #1552935.
........
  r51913 | guido.van.rossum | 2006-09-18 23:36:16 +0200 (Mon, 18 Sep 2006) | 2 lines
  Make this thing executable.
........
  r51920 | gregory.p.smith | 2006-09-19 19:35:04 +0200 (Tue, 19 Sep 2006) | 5 lines
  Fixes a bug with bsddb.DB.stat where the flags and txn keyword
  arguments are transposed.  (reported by Louis Zechtzer)
  ..already committed to release24-maint
  ..needs committing to release25-maint
........
  r51926 | brett.cannon | 2006-09-20 20:34:28 +0200 (Wed, 20 Sep 2006) | 3 lines
  Accidentally didn't commit Misc/NEWS entry on when __unicode__() was removed
  from exceptions.
........
  r51927 | brett.cannon | 2006-09-20 20:43:13 +0200 (Wed, 20 Sep 2006) | 6 lines
  Allow exceptions to be directly sliced again
  (e.g., ``BaseException(1,2,3)[0:2]``).
  Discovered in Python 2.5.0 by Thomas Heller and reported to python-dev.  This
  should be backported to 2.5 .
........
  r51928 | brett.cannon | 2006-09-20 21:28:35 +0200 (Wed, 20 Sep 2006) | 2 lines
  Make python.vim output more deterministic.
........
  r51949 | walter.doerwald | 2006-09-21 17:09:55 +0200 (Thu, 21 Sep 2006) | 2 lines
  Fix typo.
........
  r51950 | jack.diederich | 2006-09-21 19:50:26 +0200 (Thu, 21 Sep 2006) | 5 lines
  * regression bug, count_next was coercing a Py_ssize_t to an unsigned Py_size_t
    which breaks negative counts
  * added test for negative numbers
  will backport to 2.5.1
........
  r51953 | jack.diederich | 2006-09-21 22:34:49 +0200 (Thu, 21 Sep 2006) | 1 line
  added itertools.count(-n) fix
........
  r51971 | neal.norwitz | 2006-09-22 10:16:26 +0200 (Fri, 22 Sep 2006) | 10 lines
  Fix %zd string formatting on Mac OS X so it prints negative numbers.
  In addition to testing positive numbers, verify negative numbers work in configure.
  In order to avoid compiler warnings on OS X 10.4, also change the order of the check
  for the format character to use (PY_FORMAT_SIZE_T) in the sprintf format
  for Py_ssize_t.  This patch changes PY_FORMAT_SIZE_T from "" to "l" if it wasn't
  defined at configure time.  Need to verify the buildbot results.
  Backport candidate (if everyone thinks this patch can't be improved).
........
  r51972 | neal.norwitz | 2006-09-22 10:18:10 +0200 (Fri, 22 Sep 2006) | 7 lines
  Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
  These tests should be improved.  Hopefully this fixes variations when
  flipping back and forth between fpdef and fplist.
  Backport candidate.
........
  r51975 | neal.norwitz | 2006-09-22 10:47:23 +0200 (Fri, 22 Sep 2006) | 4 lines
  Mostly revert this file to the same version as before.  Only force setting
  of PY_FORMAT_SIZE_T to "l" for Mac OSX.  I don't know a better define
  to use.  This should get rid of the warnings on other platforms and Mac too.
........
  r51986 | fred.drake | 2006-09-23 02:26:31 +0200 (Sat, 23 Sep 2006) | 1 line
  add boilerplate "What's New" document so the docs will build
........
  r51987 | neal.norwitz | 2006-09-23 06:11:38 +0200 (Sat, 23 Sep 2006) | 1 line
  Remove extra semi-colons reported by Johnny Lee on python-dev.  Backport if anyone cares.
........
  r51989 | neal.norwitz | 2006-09-23 20:11:58 +0200 (Sat, 23 Sep 2006) | 1 line
  SF Bug #1563963, add missing word and cleanup first sentance
........
  r51990 | brett.cannon | 2006-09-23 21:53:20 +0200 (Sat, 23 Sep 2006) | 3 lines
  Make output on test_strptime() be more verbose in face of failure.  This is in
  hopes that more information will help debug the failing test on HPPA Ubuntu.
........
  r51991 | georg.brandl | 2006-09-24 12:36:01 +0200 (Sun, 24 Sep 2006) | 2 lines
  Fix webbrowser.BackgroundBrowser on Windows.
........
  r51993 | georg.brandl | 2006-09-24 14:35:36 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in the parser's future statement handling that led to "with"
  not being recognized as a keyword after, e.g., this statement:
  from __future__ import division, with_statement
........
  r51995 | georg.brandl | 2006-09-24 14:50:24 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.
........
  r52000 | armin.rigo | 2006-09-25 17:16:26 +0200 (Mon, 25 Sep 2006) | 2 lines
  Another crasher.
........
  r52011 | brett.cannon | 2006-09-27 01:38:24 +0200 (Wed, 27 Sep 2006) | 2 lines
  Make the error message for when the time data and format do not match clearer.
........
  r52014 | andrew.kuchling | 2006-09-27 18:37:30 +0200 (Wed, 27 Sep 2006) | 1 line
  Add news item for rev. 51815
........
  r52018 | andrew.kuchling | 2006-09-27 21:23:05 +0200 (Wed, 27 Sep 2006) | 1 line
  Make examples do error checking on Py_InitModule
........
  r52032 | brett.cannon | 2006-09-29 00:10:14 +0200 (Fri, 29 Sep 2006) | 2 lines
  Very minor grammatical fix in a comment.
........
  r52048 | george.yoshida | 2006-09-30 07:14:02 +0200 (Sat, 30 Sep 2006) | 4 lines
  SF bug #1567976 : fix typo
  Will backport to 2.5.
........
  r52051 | gregory.p.smith | 2006-09-30 08:08:20 +0200 (Sat, 30 Sep 2006) | 2 lines
  wording change
........
  r52053 | georg.brandl | 2006-09-30 09:24:48 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1567375: a minor logical glitch in example description.
........
  r52056 | georg.brandl | 2006-09-30 09:31:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.
........
  r52058 | georg.brandl | 2006-09-30 10:43:30 +0200 (Sat, 30 Sep 2006) | 4 lines
  Patch #1567691: super() and new.instancemethod() now don't accept
  keyword arguments any more (previously they accepted them, but didn't
  use them).
........
  r52061 | georg.brandl | 2006-09-30 11:03:42 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566800: make sure that EnvironmentError can be called with any
  number of arguments, as was the case in Python 2.4.
........
  r52063 | georg.brandl | 2006-09-30 11:06:45 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1566663: remove obsolete example from datetime docs.
........
  r52065 | georg.brandl | 2006-09-30 11:13:21 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.
........
  r52068 | georg.brandl | 2006-09-30 12:58:01 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.
........
  r52069 | georg.brandl | 2006-09-30 13:06:47 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1560617: in pyclbr, return full module name not only for classes,
  but also for functions.
........
  r52072 | georg.brandl | 2006-09-30 13:17:34 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1556784: allow format strings longer than 127 characters in
  datetime's strftime function.
........
  r52075 | georg.brandl | 2006-09-30 13:22:28 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1446043: correctly raise a LookupError if an encoding name given
  to encodings.search_function() contains a dot.
........
  r52078 | georg.brandl | 2006-09-30 14:02:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1546052: clarify that PyString_FromString(AndSize) copies the
  string pointed to by its parameter.
........
  r52080 | georg.brandl | 2006-09-30 14:16:03 +0200 (Sat, 30 Sep 2006) | 3 lines
  Convert test_import to unittest.
........
  r52083 | kurt.kaiser | 2006-10-01 23:16:45 +0200 (Sun, 01 Oct 2006) | 5 lines
  Some syntax errors were being caught by tokenize during the tabnanny
  check, resulting in obscure error messages.  Do the syntax check
  first.  Bug 1562716, 1562719
........
  r52084 | kurt.kaiser | 2006-10-01 23:54:37 +0200 (Sun, 01 Oct 2006) | 3 lines
  Add comment explaining that error msgs may be due to user code when
  running w/o subprocess.
........
  r52086 | martin.v.loewis | 2006-10-02 16:55:51 +0200 (Mon, 02 Oct 2006) | 3 lines
  Fix test for uintptr_t. Fixes #1568842.
  Will backport.
........
  r52089 | martin.v.loewis | 2006-10-02 17:20:37 +0200 (Mon, 02 Oct 2006) | 3 lines
  Guard uintptr_t test with HAVE_STDINT_H, test for
  stdint.h. Will backport.
........
  r52100 | vinay.sajip | 2006-10-03 20:02:37 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation omitted the additional parameter to LogRecord.__init__ which was added in 2.5. (See SF #1569622).
........
  r52101 | vinay.sajip | 2006-10-03 20:20:26 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation clarified to mention optional parameters.
........
  r52102 | vinay.sajip | 2006-10-03 20:21:56 +0200 (Tue, 03 Oct 2006) | 1 line
  Modified LogRecord.__init__ to make the func parameter optional. (See SF #1569622).
........
  r52121 | brett.cannon | 2006-10-03 23:58:55 +0200 (Tue, 03 Oct 2006) | 2 lines
  Fix minor typo in a comment.
........
  r52123 | brett.cannon | 2006-10-04 01:23:14 +0200 (Wed, 04 Oct 2006) | 2 lines
  Convert test_imp over to unittest.
........
  r52128 | barry.warsaw | 2006-10-04 04:06:36 +0200 (Wed, 04 Oct 2006) | 3 lines
  decode_rfc2231(): As Christian Robottom Reis points out, it makes no sense to
  test for parts > 3 when we use .split(..., 2).
........
  r52129 | jeremy.hylton | 2006-10-04 04:24:52 +0200 (Wed, 04 Oct 2006) | 9 lines
  Fix for SF bug 1569998: break permitted inside try.
  The compiler was checking that there was something on the fblock
  stack, but not that there was a loop on the stack.  Fixed that and
  added a test for the specific syntax error.
  Bug fix candidate.
........
  r52130 | martin.v.loewis | 2006-10-04 07:47:34 +0200 (Wed, 04 Oct 2006) | 4 lines
  Fix integer negation and absolute value to not rely
  on undefined behaviour of the C compiler anymore.
  Will backport to 2.5 and 2.4.
........
  r52135 | martin.v.loewis | 2006-10-04 11:21:20 +0200 (Wed, 04 Oct 2006) | 1 line
  Forward port r52134: Add uuids for 2.4.4.
........
  r52137 | armin.rigo | 2006-10-04 12:23:57 +0200 (Wed, 04 Oct 2006) | 3 lines
  Compilation problem caused by conflicting typedefs for uint32_t
  (unsigned long vs. unsigned int).
........
  r52139 | armin.rigo | 2006-10-04 14:17:45 +0200 (Wed, 04 Oct 2006) | 23 lines
  Forward-port of r52136,52138: a review of overflow-detecting code.
  * unified the way intobject, longobject and mystrtoul handle
    values around -sys.maxint-1.
  * in general, trying to entierely avoid overflows in any computation
    involving signed ints or longs is extremely involved.  Fixed a few
    simple cases where a compiler might be too clever (but that's all
    guesswork).
  * more overflow checks against bad data in marshal.c.
  * 2.5 specific: fixed a number of places that were still confusing int
    and Py_ssize_t.  Some of them could potentially have caused
    "real-world" breakage.
  * list.pop(x): fixing overflow issues on x was messy.  I just reverted
    to PyArg_ParseTuple("n"), which does the right thing.  (An obscure
    test was trying to give a Decimal to list.pop()... doesn't make
    sense any more IMHO)
  * trying to write a few tests...
........
  r52147 | andrew.kuchling | 2006-10-04 15:42:43 +0200 (Wed, 04 Oct 2006) | 6 lines
  Cause a PyObject_Malloc() failure to trigger a MemoryError, and then
  add 'if (PyErr_Occurred())' checks to various places so that NULL is
  returned properly.
  2.4 backport candidate.
........
  r52148 | martin.v.loewis | 2006-10-04 17:25:28 +0200 (Wed, 04 Oct 2006) | 1 line
  Add MSVC8 project files to create wininst-8.exe.
........
  r52196 | brett.cannon | 2006-10-06 00:02:31 +0200 (Fri, 06 Oct 2006) | 7 lines
  Clarify what "re-initialization" means for init_builtin() and init_dynamic().
  Also remove warning about re-initialization as possibly raising an execption as
  both call _PyImport_FindExtension() which pulls any module that was already
  imported from the Python process' extension cache and just copies the __dict__
  into the module stored in sys.modules.
........
  r52200 | fred.drake | 2006-10-06 02:03:45 +0200 (Fri, 06 Oct 2006) | 3 lines
  - update links
  - remove Sleepycat name now that they have been bought
........
  r52204 | andrew.kuchling | 2006-10-06 12:41:01 +0200 (Fri, 06 Oct 2006) | 1 line
  Case fix
........
  r52208 | georg.brandl | 2006-10-06 14:46:08 +0200 (Fri, 06 Oct 2006) | 3 lines
  Fix name.
........
  r52211 | andrew.kuchling | 2006-10-06 15:18:26 +0200 (Fri, 06 Oct 2006) | 1 line
  [Bug #1545341] Allow 'classifier' parameter to be a tuple as well as a list.  Will backport.
........
  r52212 | armin.rigo | 2006-10-06 18:33:22 +0200 (Fri, 06 Oct 2006) | 4 lines
  A very minor bug fix: this code looks like it is designed to accept
  any hue value and do the modulo itself, except it doesn't quite do
  it in all cases.  At least, the "cannot get here" comment was wrong.
........
  r52213 | andrew.kuchling | 2006-10-06 20:51:55 +0200 (Fri, 06 Oct 2006) | 1 line
  Comment grammar
........
  r52218 | skip.montanaro | 2006-10-07 13:05:02 +0200 (Sat, 07 Oct 2006) | 6 lines
  Note that the excel_tab class is registered as the "excel-tab" dialect.
  Fixes 1572471.  Make a similar change for the excel class and clean up
  references to the Dialects and Formatting Parameters section in a few
  places.
........
  r52221 | georg.brandl | 2006-10-08 09:11:54 +0200 (Sun, 08 Oct 2006) | 3 lines
  Add missing NEWS entry for rev. 52129.
........
  r52223 | hyeshik.chang | 2006-10-08 15:48:34 +0200 (Sun, 08 Oct 2006) | 3 lines
  Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
  when encoding non-BMP unicode characters.  (Submitted by Ray Chason)
........
  r52227 | ronald.oussoren | 2006-10-08 19:37:58 +0200 (Sun, 08 Oct 2006) | 4 lines
  Add version number to the link to the python documentation in
  /Developer/Documentation/Python, better for users that install multiple versions
  of python.
........
  r52229 | ronald.oussoren | 2006-10-08 19:40:02 +0200 (Sun, 08 Oct 2006) | 2 lines
  Fix for bug #1570284
........
  r52233 | ronald.oussoren | 2006-10-08 19:49:52 +0200 (Sun, 08 Oct 2006) | 6 lines
  MacOSX: distutils changes the values of BASECFLAGS and LDFLAGS when using a
  universal build of python on OSX 10.3 to ensure that those flags can be used
  to compile code (the universal build uses compiler flags that aren't supported
  on 10.3). This patches gives the same treatment to CFLAGS, PY_CFLAGS and
  BLDSHARED.
........
  r52236 | ronald.oussoren | 2006-10-08 19:51:46 +0200 (Sun, 08 Oct 2006) | 5 lines
  MacOSX: The universal build requires that users have the MacOSX10.4u SDK
  installed to build extensions. This patch makes distutils emit a warning when
  the compiler should use an SDK but that SDK is not installed, hopefully reducing
  some confusion.
........
  r52238 | ronald.oussoren | 2006-10-08 20:18:26 +0200 (Sun, 08 Oct 2006) | 3 lines
  MacOSX: add more logic to recognize the correct startup file to patch to the
  shell profile patching post-install script.
........
  r52242 | andrew.kuchling | 2006-10-09 19:10:12 +0200 (Mon, 09 Oct 2006) | 1 line
  Add news item for rev. 52211 change
........
  r52245 | andrew.kuchling | 2006-10-09 20:05:19 +0200 (Mon, 09 Oct 2006) | 1 line
  Fix wording in comment
........
  r52251 | georg.brandl | 2006-10-09 21:03:06 +0200 (Mon, 09 Oct 2006) | 2 lines
  Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
........
  r52255 | barry.warsaw | 2006-10-09 21:43:24 +0200 (Mon, 09 Oct 2006) | 2 lines
  List gc.get_count() in the module docstring.
........
  r52257 | martin.v.loewis | 2006-10-09 22:44:25 +0200 (Mon, 09 Oct 2006) | 1 line
  Bug #1565150: Fix subsecond processing for os.utime on Windows.
........
  r52268 | ronald.oussoren | 2006-10-10 09:55:06 +0200 (Tue, 10 Oct 2006) | 2 lines
  MacOSX: fix permission problem in the generated installer
........
  r52293 | georg.brandl | 2006-10-12 09:38:04 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1575746: fix typo in property() docs.
........
  r52295 | georg.brandl | 2006-10-12 09:57:21 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #813342: Start the IDLE subprocess with -Qnew if the parent
  is started with that option.
........
  r52297 | georg.brandl | 2006-10-12 10:22:53 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1565919: document set types in the Language Reference.
........
  r52299 | georg.brandl | 2006-10-12 11:20:33 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1550524: better heuristics to find correct class definition
  in inspect.findsource().
........
  r52301 | georg.brandl | 2006-10-12 11:47:12 +0200 (Thu, 12 Oct 2006) | 4 lines
  Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
  arguments with the system default encoding just like the write()
  method does, instead of converting it to a raw buffer.
........
  r52303 | georg.brandl | 2006-10-12 13:14:40 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1546628: add a note about urlparse.urljoin() and absolute paths.
........
  r52305 | georg.brandl | 2006-10-12 13:27:59 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1545497: when given an explicit base, int() did ignore NULs
  embedded in the string to convert.
........
  r52307 | georg.brandl | 2006-10-12 13:41:11 +0200 (Thu, 12 Oct 2006) | 3 lines
  Add a note to fpectl docs that it's not built by default
  (bug #1556261).
........
  r52309 | georg.brandl | 2006-10-12 13:46:57 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560114: the Mac filesystem does have accurate information
  about the case of filenames.
........
  r52311 | georg.brandl | 2006-10-12 13:59:27 +0200 (Thu, 12 Oct 2006) | 2 lines
  Small grammar fix, thanks Sjoerd.
........
  r52313 | georg.brandl | 2006-10-12 14:03:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Fix tarfile depending on buggy int('1\0', base) behavior.
........
  r52315 | georg.brandl | 2006-10-12 14:33:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
........
  r52316 | georg.brandl | 2006-10-12 15:08:16 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560179: speed up posixpath.(dir|base)name
........
  r52327 | brett.cannon | 2006-10-14 08:36:45 +0200 (Sat, 14 Oct 2006) | 3 lines
  Clean up the language of a sentence relating to the connect() function and
  user-defined datatypes.
........
  r52332 | neal.norwitz | 2006-10-14 23:33:38 +0200 (Sat, 14 Oct 2006) | 3 lines
  Update the peephole optimizer to remove more dead code (jumps after returns)
  and inline jumps to returns.
........
  r52333 | martin.v.loewis | 2006-10-15 09:54:40 +0200 (Sun, 15 Oct 2006) | 4 lines
  Patch #1576954: Update VC6 build directory; remove redundant
  files in VC7. Will backport to 2.5.
........
  r52335 | martin.v.loewis | 2006-10-15 10:43:33 +0200 (Sun, 15 Oct 2006) | 1 line
  Patch #1576166: Support os.utime for directories on Windows NT+.
........
  r52336 | martin.v.loewis | 2006-10-15 10:51:22 +0200 (Sun, 15 Oct 2006) | 2 lines
  Patch #1577551: Add ctypes and ET build support for VC6.
  Will backport to 2.5.
........
  r52338 | martin.v.loewis | 2006-10-15 11:35:51 +0200 (Sun, 15 Oct 2006) | 1 line
  Loosen the test for equal time stamps.
........
  r52339 | martin.v.loewis | 2006-10-15 11:43:39 +0200 (Sun, 15 Oct 2006) | 2 lines
  Bug #1567666: Emulate GetFileAttributesExA for Win95.
  Will backport to 2.5.
........
  r52341 | martin.v.loewis | 2006-10-15 13:02:07 +0200 (Sun, 15 Oct 2006) | 2 lines
  Round to int, because some systems support sub-second time stamps in stat, but not in utime.
  Also be consistent with modifying only mtime, not atime.
........
  r52342 | martin.v.loewis | 2006-10-15 13:57:40 +0200 (Sun, 15 Oct 2006) | 2 lines
  Set the eol-style for project files to "CRLF".
........
  r52343 | martin.v.loewis | 2006-10-15 13:59:56 +0200 (Sun, 15 Oct 2006) | 3 lines
  Drop binary property on dsp files, set eol-style
  to CRLF instead.
........
  r52344 | martin.v.loewis | 2006-10-15 14:01:43 +0200 (Sun, 15 Oct 2006) | 2 lines
  Remove binary property, set eol-style to CRLF instead.
........
  r52346 | martin.v.loewis | 2006-10-15 16:30:38 +0200 (Sun, 15 Oct 2006) | 2 lines
  Mention the bdist_msi module. Will backport to 2.5.
........
  r52354 | brett.cannon | 2006-10-16 05:09:52 +0200 (Mon, 16 Oct 2006) | 3 lines
  Fix turtle so that you can launch the demo2 function on its own instead of only
  when the module is launched as a script.
........
  r52356 | martin.v.loewis | 2006-10-17 17:18:06 +0200 (Tue, 17 Oct 2006) | 2 lines
  Patch #1457736: Update VC6 to use current PCbuild settings.
  Will backport to 2.5.
........
  r52360 | martin.v.loewis | 2006-10-17 20:09:55 +0200 (Tue, 17 Oct 2006) | 2 lines
  Remove obsolete file. Will backport.
........
  r52363 | martin.v.loewis | 2006-10-17 20:59:23 +0200 (Tue, 17 Oct 2006) | 4 lines
  Forward-port r52358:
  - Bug #1578513: Cross compilation was broken by a change to configure.
  Repair so that it's back to how it was in 2.4.3.
........
  r52365 | thomas.heller | 2006-10-17 21:30:48 +0200 (Tue, 17 Oct 2006) | 6 lines
  ctypes callback functions only support 'fundamental' result types.
  Check this and raise an error when something else is used - before
  this change ctypes would hang or crash when such a callback was
  called.  This is a partial fix for #1574584.
  Will backport to release25-maint.
........
  r52377 | tim.peters | 2006-10-18 07:06:06 +0200 (Wed, 18 Oct 2006) | 2 lines
  newIobject():  repaired incorrect cast to quiet MSVC warning.
........
  r52378 | tim.peters | 2006-10-18 07:09:12 +0200 (Wed, 18 Oct 2006) | 2 lines
  Whitespace normalization.
........
  r52379 | tim.peters | 2006-10-18 07:10:28 +0200 (Wed, 18 Oct 2006) | 2 lines
  Add missing svn:eol-style to text files.
........
  r52387 | martin.v.loewis | 2006-10-19 12:58:46 +0200 (Thu, 19 Oct 2006) | 3 lines
  Add check for the PyArg_ParseTuple format, and declare
  it if it is supported.
........
  r52388 | martin.v.loewis | 2006-10-19 13:00:37 +0200 (Thu, 19 Oct 2006) | 3 lines
  Fix various minor errors in passing arguments to
  PyArg_ParseTuple.
........
  r52389 | martin.v.loewis | 2006-10-19 18:01:37 +0200 (Thu, 19 Oct 2006) | 2 lines
  Restore CFLAGS after checking for __attribute__
........
  r52390 | andrew.kuchling | 2006-10-19 23:55:55 +0200 (Thu, 19 Oct 2006) | 1 line
  [Bug #1576348] Fix typo in example
........
  r52414 | walter.doerwald | 2006-10-22 10:59:41 +0200 (Sun, 22 Oct 2006) | 2 lines
  Port test___future__ to unittest.
........
  r52415 | ronald.oussoren | 2006-10-22 12:45:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580674: with this patch os.readlink uses the filesystem encoding to
  decode unicode objects and returns an unicode object when the argument is one.
........
  r52416 | martin.v.loewis | 2006-10-22 12:46:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580872: Remove duplicate declaration of PyCallable_Check.
  Will backport to 2.5.
........
  r52418 | martin.v.loewis | 2006-10-22 12:55:15 +0200 (Sun, 22 Oct 2006) | 4 lines
  - Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
    ctypes isn't considered as requiring executable stacks.
  Will backport to 2.5.
........
  r52420 | martin.v.loewis | 2006-10-22 15:45:13 +0200 (Sun, 22 Oct 2006) | 3 lines
  Remove passwd.adjunct.byname from list of maps
  for test_nis. Will backport to 2.5.
........
  r52431 | georg.brandl | 2006-10-24 18:54:16 +0200 (Tue, 24 Oct 2006) | 2 lines
  Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
........
  r52446 | andrew.kuchling | 2006-10-26 21:10:46 +0200 (Thu, 26 Oct 2006) | 1 line
  [Bug #1579796] Wrong syntax for PyDateTime_IMPORT in documentation.  Reported by David Faure.
........
  r52449 | andrew.kuchling | 2006-10-26 21:16:46 +0200 (Thu, 26 Oct 2006) | 1 line
  Typo fix
........
  r52452 | martin.v.loewis | 2006-10-27 08:16:31 +0200 (Fri, 27 Oct 2006) | 3 lines
  Patch #1549049: Rewrite type conversion in structmember.
  Fixes #1545696 and #1566140. Will backport to 2.5.
........
  r52454 | martin.v.loewis | 2006-10-27 08:42:27 +0200 (Fri, 27 Oct 2006) | 2 lines
  Check for values.h. Will backport.
........
  r52456 | martin.v.loewis | 2006-10-27 09:06:52 +0200 (Fri, 27 Oct 2006) | 2 lines
  Get DBL_MAX from float.h not values.h. Will backport.
........
  r52458 | martin.v.loewis | 2006-10-27 09:13:28 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1567274: Support SMTP over TLS.
........
  r52459 | andrew.kuchling | 2006-10-27 13:33:29 +0200 (Fri, 27 Oct 2006) | 1 line
  Set svn:keywords property
........
  r52460 | andrew.kuchling | 2006-10-27 13:36:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Add item
........
  r52461 | andrew.kuchling | 2006-10-27 13:37:01 +0200 (Fri, 27 Oct 2006) | 1 line
  Some wording changes and markup fixes
........
  r52462 | andrew.kuchling | 2006-10-27 14:18:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1585690] Note that line_num was added in Python 2.5
........
  r52464 | andrew.kuchling | 2006-10-27 14:50:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1583946] Reword description of server and issuer
........
  r52466 | andrew.kuchling | 2006-10-27 15:06:25 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1562583] Mention the set_reuse_addr() method
........
  r52469 | andrew.kuchling | 2006-10-27 15:22:46 +0200 (Fri, 27 Oct 2006) | 4 lines
  [Bug #1542016] Report PCALL_POP value.  This makes the return value of sys.callstats() match its docstring.
  Backport candidate.  Though it's an API change, this is a pretty obscure
  portion of the API.
........
  r52473 | andrew.kuchling | 2006-10-27 16:53:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Point users to the subprocess module in the docs for os.system, os.spawn*, os.popen2, and the popen2 and commands modules
........
  r52476 | andrew.kuchling | 2006-10-27 18:39:10 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1576241] Let functools.wraps work with built-in functions
........
  r52478 | andrew.kuchling | 2006-10-27 18:55:34 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1575506] The _singlefileMailbox class was using the wrong file object in its flush() method, causing an error
........
  r52480 | andrew.kuchling | 2006-10-27 19:06:16 +0200 (Fri, 27 Oct 2006) | 1 line
  Clarify docstring
........
  r52481 | andrew.kuchling | 2006-10-27 19:11:23 +0200 (Fri, 27 Oct 2006) | 5 lines
  [Patch #1574068 by Scott Dial] urllib and urllib2 were using
  base64.encodestring() for encoding authentication data.
  encodestring() can include newlines for very long input, which
  produced broken HTTP headers.
........
  r52483 | andrew.kuchling | 2006-10-27 20:13:46 +0200 (Fri, 27 Oct 2006) | 1 line
  Check db_setup_debug for a few print statements; change sqlite_setup_debug to False
........
  r52484 | andrew.kuchling | 2006-10-27 20:15:02 +0200 (Fri, 27 Oct 2006) | 1 line
  [Patch #1503717] Tiny patch from Chris AtLee to stop a lengthy line from being printed
........
  r52485 | thomas.heller | 2006-10-27 20:31:36 +0200 (Fri, 27 Oct 2006) | 5 lines
  WindowsError.str should display the windows error code,
  not the posix error code; with test.
  Fixes #1576174.
  Will backport to release25-maint.
........
  r52487 | thomas.heller | 2006-10-27 21:05:53 +0200 (Fri, 27 Oct 2006) | 4 lines
  Modulefinder now handles absolute and relative imports, including
  tests.
  Will backport to release25-maint.
........
  r52488 | georg.brandl | 2006-10-27 22:39:43 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1552024: add decorator support to unparse.py demo script.
........
  r52492 | walter.doerwald | 2006-10-28 12:47:12 +0200 (Sat, 28 Oct 2006) | 2 lines
  Port test_bufio to unittest.
........
  r52493 | georg.brandl | 2006-10-28 15:10:17 +0200 (Sat, 28 Oct 2006) | 6 lines
  Convert test_global, test_scope and test_grammar to unittest.
  I tried to enclose all tests which must be run at the toplevel
  (instead of inside a method) in exec statements.
........
  r52494 | georg.brandl | 2006-10-28 15:11:41 +0200 (Sat, 28 Oct 2006) | 3 lines
  Update outstanding bugs test file.
........
  r52495 | georg.brandl | 2006-10-28 15:51:49 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_math to unittest.
........
  r52496 | georg.brandl | 2006-10-28 15:56:58 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_opcodes to unittest.
........
  r52497 | georg.brandl | 2006-10-28 18:04:04 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix nth() itertool recipe.
........
  r52500 | georg.brandl | 2006-10-28 22:25:09 +0200 (Sat, 28 Oct 2006) | 2 lines
  make test_grammar pass with python -O
........
  r52501 | neal.norwitz | 2006-10-28 23:15:30 +0200 (Sat, 28 Oct 2006) | 6 lines
  Add some asserts.  In sysmodule, I think these were to try to silence
  some warnings from Klokwork.  They verify the assumptions of the format
  of svn version output.
  The assert in the thread module helped debug a problem on HP-UX.
........
  r52502 | neal.norwitz | 2006-10-28 23:16:54 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix warnings with HP's C compiler.  It doesn't recognize that infinite
  loops are, um, infinite.  These conditions should not be able to happen.
  Will backport.
........
  r52503 | neal.norwitz | 2006-10-28 23:17:51 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix crash in test on HP-UX.  Apparently, it's not possible to delete a lock if
  it's held (even by the current thread).
  Will backport.
........
  r52504 | neal.norwitz | 2006-10-28 23:19:07 +0200 (Sat, 28 Oct 2006) | 6 lines
  Fix bug #1565514, SystemError not raised on too many nested blocks.
  It seems like this should be a different error than SystemError, but
  I don't have any great ideas and SystemError was raised in 2.4 and earlier.
  Will backport.
........
  r52505 | neal.norwitz | 2006-10-28 23:20:12 +0200 (Sat, 28 Oct 2006) | 4 lines
  Prevent crash if alloc of garbage fails.  Found by Typo.pl.
  Will backport.
........
  r52506 | neal.norwitz | 2006-10-28 23:21:00 +0200 (Sat, 28 Oct 2006) | 4 lines
  Don't inline Py_ADDRESS_IN_RANGE with gcc 4+ either.
  Will backport.
........
  r52513 | neal.norwitz | 2006-10-28 23:56:49 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix test_modulefinder so it doesn't fail when run after test_distutils.
........
  r52514 | neal.norwitz | 2006-10-29 00:12:26 +0200 (Sun, 29 Oct 2006) | 4 lines
  From SF 1557890, fix problem of using wrong type in example.
  Will backport.
........
  r52517 | georg.brandl | 2006-10-29 09:39:22 +0100 (Sun, 29 Oct 2006) | 4 lines
  Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
  fix all codecs file wrappers to work correctly with the "with"
  statement (bug #1586513).
........
  r52519 | georg.brandl | 2006-10-29 09:47:08 +0100 (Sun, 29 Oct 2006) | 3 lines
  Clean up a leftover from old listcomp generation code.
........
  r52520 | georg.brandl | 2006-10-29 09:53:06 +0100 (Sun, 29 Oct 2006) | 4 lines
  Bug #1586448: the compiler module now emits the same bytecode for
  list comprehensions as the builtin compiler, using the LIST_APPEND
  opcode.
........
  r52521 | georg.brandl | 2006-10-29 10:01:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove trailing comma.
........
  r52522 | georg.brandl | 2006-10-29 10:05:04 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1357915: allow all sequence types for shell arguments in
  subprocess.
........
  r52524 | georg.brandl | 2006-10-29 10:16:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Patch #1583880: fix tarfile's problems with long names and posix/
  GNU modes.
........
  r52526 | georg.brandl | 2006-10-29 10:18:00 +0100 (Sun, 29 Oct 2006) | 3 lines
  Test assert if __debug__ is true.
........
  r52527 | georg.brandl | 2006-10-29 10:32:16 +0100 (Sun, 29 Oct 2006) | 2 lines
  Fix the new EncodedFile test to work with big endian platforms.
........
  r52529 | georg.brandl | 2006-10-29 15:39:09 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
........
  r52532 | georg.brandl | 2006-10-29 19:01:08 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586773: extend hashlib docstring.
........
  r52534 | neal.norwitz | 2006-10-29 19:30:10 +0100 (Sun, 29 Oct 2006) | 4 lines
  Update comments, remove commented out code.
  Move assembler structure next to assembler code to make it easier to
  move it to a separate file.
........
  r52535 | georg.brandl | 2006-10-29 19:31:42 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1576657: when setting a KeyError for a tuple key, make sure that
  the tuple isn't used as the "exception arguments tuple".
........
  r52537 | georg.brandl | 2006-10-29 20:13:40 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_mmap to unittest.
........
  r52538 | georg.brandl | 2006-10-29 20:20:45 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_poll to unittest.
........
  r52539 | georg.brandl | 2006-10-29 20:24:43 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_nis to unittest.
........
  r52540 | georg.brandl | 2006-10-29 20:35:03 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_types to unittest.
........
  r52541 | georg.brandl | 2006-10-29 20:51:16 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cookie to unittest.
........
  r52542 | georg.brandl | 2006-10-29 21:09:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cgi to unittest.
........
  r52543 | georg.brandl | 2006-10-29 21:24:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Completely convert test_httplib to unittest.
........
  r52544 | georg.brandl | 2006-10-29 21:28:26 +0100 (Sun, 29 Oct 2006) | 2 lines
  Convert test_MimeWriter to unittest.
........
  r52545 | georg.brandl | 2006-10-29 21:31:17 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_openpty to unittest.
........
  r52546 | georg.brandl | 2006-10-29 21:35:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove leftover test output file.
........
  r52547 | georg.brandl | 2006-10-29 22:54:18 +0100 (Sun, 29 Oct 2006) | 3 lines
  Move the check for openpty to the beginning.
........
  r52548 | walter.doerwald | 2006-10-29 23:06:28 +0100 (Sun, 29 Oct 2006) | 2 lines
  Add tests for basic argument errors.
........
  r52549 | walter.doerwald | 2006-10-30 00:02:27 +0100 (Mon, 30 Oct 2006) | 3 lines
  Add tests for incremental codecs with an errors
  argument.
........
  r52550 | neal.norwitz | 2006-10-30 00:39:03 +0100 (Mon, 30 Oct 2006) | 1 line
  Fix refleak
........
  r52552 | neal.norwitz | 2006-10-30 00:58:36 +0100 (Mon, 30 Oct 2006) | 1 line
  I'm assuming this is correct, it fixes the tests so they pass again
........
  r52555 | vinay.sajip | 2006-10-31 18:32:37 +0100 (Tue, 31 Oct 2006) | 1 line
  Change to improve speed of _fixupChildren
........
  r52556 | vinay.sajip | 2006-10-31 18:34:31 +0100 (Tue, 31 Oct 2006) | 1 line
  Added relativeCreated to Formatter doc (has been in the system for a long time - was unaccountably left out of the docs and not noticed until now).
........
  r52588 | thomas.heller | 2006-11-02 20:48:24 +0100 (Thu, 02 Nov 2006) | 5 lines
  Replace the XXX marker in the 'Arrays and pointers' reference manual
  section with a link to the tutorial sections.
  Will backport to release25-maint.
........
  r52592 | thomas.heller | 2006-11-02 21:22:29 +0100 (Thu, 02 Nov 2006) | 6 lines
  Fix a code example by adding a missing import.
  Fixes #1557890.
  Will backport to release25-maint.
........
  r52598 | tim.peters | 2006-11-03 03:32:46 +0100 (Fri, 03 Nov 2006) | 2 lines
  Whitespace normalization.
........
  r52619 | martin.v.loewis | 2006-11-04 19:14:06 +0100 (Sat, 04 Nov 2006) | 4 lines
  - Patch #1060577: Extract list of RPM files from spec file in
    bdist_rpm
  Will backport to 2.5.
........
  r52621 | neal.norwitz | 2006-11-04 20:25:22 +0100 (Sat, 04 Nov 2006) | 4 lines
  Bug #1588287: fix invalid assertion for `1,2` in debug builds.
  Will backport
........
  r52630 | andrew.kuchling | 2006-11-05 22:04:37 +0100 (Sun, 05 Nov 2006) | 1 line
  Update link
........
  r52631 | skip.montanaro | 2006-11-06 15:34:52 +0100 (Mon, 06 Nov 2006) | 1 line
  note that user can control directory location even if default dir is used
........
  r52644 | ronald.oussoren | 2006-11-07 16:53:38 +0100 (Tue, 07 Nov 2006) | 2 lines
  Fix a number of typos in strings and comments (sf#1589070)
........
  r52647 | ronald.oussoren | 2006-11-07 17:00:34 +0100 (Tue, 07 Nov 2006) | 2 lines
  Whitespace changes to make the source more compliant with PEP8 (SF#1589070)
........
  r52651 | thomas.heller | 2006-11-07 19:01:18 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix markup.
  Will backport to release25-maint.
........
  r52653 | thomas.heller | 2006-11-07 19:20:47 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix grammatical error as well.
  Will backport to release25-maint.
........
  r52657 | andrew.kuchling | 2006-11-07 21:39:16 +0100 (Tue, 07 Nov 2006) | 1 line
  Add missing word
........
  r52662 | martin.v.loewis | 2006-11-08 07:46:37 +0100 (Wed, 08 Nov 2006) | 4 lines
  Correctly forward exception in instance_contains().
  Fixes #1591996. Patch contributed by Neal Norwitz.
  Will backport.
........
  r52664 | martin.v.loewis | 2006-11-08 07:48:36 +0100 (Wed, 08 Nov 2006) | 2 lines
  News entry for 52662.
........
  r52665 | martin.v.loewis | 2006-11-08 08:35:55 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1351744: Add askyesnocancel helper for tkMessageBox.
........
  r52666 | georg.brandl | 2006-11-08 08:45:59 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1592072: fix docs for return value of PyErr_CheckSignals.
........
  r52668 | georg.brandl | 2006-11-08 11:04:29 +0100 (Wed, 08 Nov 2006) | 3 lines
  Bug #1592533: rename variable in heapq doc example, to avoid shadowing
  "sorted".
........
  r52671 | andrew.kuchling | 2006-11-08 14:35:34 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on the functional module
........
  r52672 | andrew.kuchling | 2006-11-08 15:14:30 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on operator module; make a few edits
........
  r52673 | andrew.kuchling | 2006-11-08 15:24:03 +0100 (Wed, 08 Nov 2006) | 1 line
  Add table of contents; this required fixing a few headings.  Some more smalle edits.
........
  r52674 | andrew.kuchling | 2006-11-08 15:30:14 +0100 (Wed, 08 Nov 2006) | 1 line
  More edits
........
  r52686 | martin.v.loewis | 2006-11-09 12:06:03 +0100 (Thu, 09 Nov 2006) | 3 lines
  Patch #838546: Make terminal become controlling in pty.fork().
  Will backport to 2.5.
........
  r52688 | martin.v.loewis | 2006-11-09 12:27:32 +0100 (Thu, 09 Nov 2006) | 2 lines
  Patch #1592250: Add elidge argument to Tkinter.Text.search.
........
  r52690 | andrew.kuchling | 2006-11-09 14:27:07 +0100 (Thu, 09 Nov 2006) | 7 lines
  [Bug #1569790] mailbox.Maildir.get_folder() loses factory information
  Both the Maildir and MH classes had this bug; the patch fixes both classes
  and adds a test.
  Will backport to 25-maint.
........
  r52692 | andrew.kuchling | 2006-11-09 14:51:14 +0100 (Thu, 09 Nov 2006) | 1 line
  [Patch #1514544 by David Watson] use fsync() to ensure data is really on disk
........
  r52695 | walter.doerwald | 2006-11-09 17:23:26 +0100 (Thu, 09 Nov 2006) | 2 lines
  Replace C++ comment with C comment (fixes SF bug #1593525).
........
  r52712 | andrew.kuchling | 2006-11-09 22:16:46 +0100 (Thu, 09 Nov 2006) | 11 lines
  [Patch #1514543] mailbox (Maildir): avoid losing messages on name clash
  Two changes:
  Where possible, use link()/remove() to move files into a directory; this
  makes it easier to avoid overwriting an existing file.
  Use _create_carefully() to create files in tmp/, which uses O_EXCL.
  Backport candidate.
........
  r52716 | phillip.eby | 2006-11-10 01:33:36 +0100 (Fri, 10 Nov 2006) | 4 lines
  Fix SF#1566719: not creating site-packages (or other target directory) when
  installing .egg-info for a project that contains no modules or packages,
  while using --root (as in bdist_rpm).
........
  r52719 | andrew.kuchling | 2006-11-10 14:14:01 +0100 (Fri, 10 Nov 2006) | 1 line
  Reword entry
........
  r52725 | andrew.kuchling | 2006-11-10 15:39:01 +0100 (Fri, 10 Nov 2006) | 1 line
  [Feature request #1542920] Link to wsgi.org
........
  r52731 | georg.brandl | 2006-11-11 19:29:11 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594742: wrong word in stringobject doc.
........
  r52733 | georg.brandl | 2006-11-11 19:32:47 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594758: wording improvement for dict.update() docs.
........
  r52736 | martin.v.loewis | 2006-11-12 11:32:47 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1065257: Support passing open files as body in
  HTTPConnection.request().
........
  r52737 | martin.v.loewis | 2006-11-12 11:41:39 +0100 (Sun, 12 Nov 2006) | 2 lines
  Patch #1355023: support whence argument for GzipFile.seek.
........
  r52738 | martin.v.loewis | 2006-11-12 19:24:26 +0100 (Sun, 12 Nov 2006) | 2 lines
  Bug #1067760: Deprecate passing floats to file.seek.
........
  r52739 | martin.v.loewis | 2006-11-12 19:48:13 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1359217: Ignore 2xx response before 150 response.
  Will backport to 2.5.
........
  r52741 | martin.v.loewis | 2006-11-12 19:56:03 +0100 (Sun, 12 Nov 2006) | 4 lines
  Patch #1360200: Use unmangled_version RPM spec field to deal with
  file name mangling.
  Will backport to 2.5.
........
  r52753 | walter.doerwald | 2006-11-15 17:23:46 +0100 (Wed, 15 Nov 2006) | 2 lines
  Fix typo.
........
  r52754 | georg.brandl | 2006-11-15 18:42:03 +0100 (Wed, 15 Nov 2006) | 2 lines
  Bug #1594809: add a note to README regarding PYTHONPATH and make install.
........
  r52762 | georg.brandl | 2006-11-16 16:05:14 +0100 (Thu, 16 Nov 2006) | 2 lines
  Bug #1597576: mention that the new base64 api has been introduced in py2.4.
........
  r52764 | georg.brandl | 2006-11-16 17:50:59 +0100 (Thu, 16 Nov 2006) | 3 lines
  Bug #1597824: return the registered function from atexit.register()
  to facilitate usage as a decorator.
........
  r52765 | georg.brandl | 2006-11-16 18:08:45 +0100 (Thu, 16 Nov 2006) | 4 lines
  Bug #1588217: don't parse "= " as a soft line break in binascii's
  a2b_qp() function, instead leave it in the string as quopri.decode()
  does.
........
  r52776 | andrew.kuchling | 2006-11-17 14:30:25 +0100 (Fri, 17 Nov 2006) | 17 lines
  Remove file-locking in MH.pack() method.
  This change looks massive but it's mostly a re-indenting after
  removing some try...finally blocks.
  Also adds a test case that does a pack() while the mailbox is locked; this
  test would have turned up bugs in the original code on some platforms.
  In both nmh and GNU Mailutils' implementation of MH-format mailboxes,
  no locking is done of individual message files when renaming them.
  The original mailbox.py code did do locking, which meant that message
  files had to be opened.  This code was buggy on certain platforms
  (found through reading the code); there were code paths that closed
  the file object and then called _unlock_file() on it.
  Will backport to 25-maint once I see how the buildbots react to this patch.
........
  r52780 | martin.v.loewis | 2006-11-18 19:00:23 +0100 (Sat, 18 Nov 2006) | 5 lines
  Patch #1538878: Don't make tkSimpleDialog dialogs transient if
  the parent window is withdrawn. This mirrors what dialog.tcl
  does.
  Will backport to 2.5.
........
  r52782 | martin.v.loewis | 2006-11-18 19:05:35 +0100 (Sat, 18 Nov 2006) | 4 lines
  Patch #1594554: Always close a tkSimpleDialog on ok(), even
  if an exception occurs.
  Will backport to 2.5.
........
  r52784 | martin.v.loewis | 2006-11-18 19:42:11 +0100 (Sat, 18 Nov 2006) | 3 lines
  Patch #1472877: Fix Tix subwidget name resolution.
  Will backport to 2.5.
........
  r52786 | andrew.kuchling | 2006-11-18 23:17:33 +0100 (Sat, 18 Nov 2006) | 1 line
  Expand checking in test_sha
........
  r52787 | georg.brandl | 2006-11-19 09:48:30 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch [ 1586791 ] better error msgs for some TypeErrors
........
  r52788 | martin.v.loewis | 2006-11-19 11:41:41 +0100 (Sun, 19 Nov 2006) | 4 lines
  Make cStringIO.truncate raise IOError for negative
  arguments (even for -1). Fixes the last bit of
  #1359365.
........
  r52789 | andrew.kuchling | 2006-11-19 19:40:01 +0100 (Sun, 19 Nov 2006) | 1 line
  Add a test case of data w/ bytes > 127
........
  r52790 | martin.v.loewis | 2006-11-19 19:51:54 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch #1070046: Marshal new-style objects like InstanceType
  in xmlrpclib.
........
  r52792 | neal.norwitz | 2006-11-19 22:26:53 +0100 (Sun, 19 Nov 2006) | 4 lines
  Speed up function calls into the math module by using METH_O.
  There should be no functional changes. However, the error msgs are
  slightly different.  Also verified that the module dict is not NULL on init.
........
  r52794 | george.yoshida | 2006-11-20 03:24:48 +0100 (Mon, 20 Nov 2006) | 2 lines
  markup fix
........
  r52795 | georg.brandl | 2006-11-20 08:12:58 +0100 (Mon, 20 Nov 2006) | 3 lines
  Further markup fix.
........
  r52800 | andrew.kuchling | 2006-11-20 14:39:37 +0100 (Mon, 20 Nov 2006) | 2 lines
  Jython compatibility fix: if uu.decode() opened its output file, be sure to
  close it.
........
  r52811 | neal.norwitz | 2006-11-21 06:26:22 +0100 (Tue, 21 Nov 2006) | 9 lines
  Bug #1599782: Fix segfault on bsddb.db.DB().type().
  The problem is that _DB_get_type() can't be called without the GIL
  because it calls a bunch of PyErr_* APIs when an error occurs.
  There were no other cases in this file that it was called without the GIL.
  Removing the BEGIN/END THREAD around _DB_get_type() made everything work.
  Will backport.
........
  r52814 | neal.norwitz | 2006-11-21 06:51:51 +0100 (Tue, 21 Nov 2006) | 1 line
  Oops, convert tabs to spaces
........
  r52815 | neal.norwitz | 2006-11-21 07:23:44 +0100 (Tue, 21 Nov 2006) | 1 line
  Fix SF #1599879, socket.gethostname should ref getfqdn directly.
........
  r52817 | martin.v.loewis | 2006-11-21 19:20:25 +0100 (Tue, 21 Nov 2006) | 4 lines
  Conditionalize definition of _CRT_SECURE_NO_DEPRECATE
  and _CRT_NONSTDC_NO_DEPRECATE.
  Will backport.
........
  r52821 | martin.v.loewis | 2006-11-22 09:50:02 +0100 (Wed, 22 Nov 2006) | 4 lines
  Patch #1362975: Rework CodeContext indentation algorithm to
  avoid hard-coding pixel widths. Also make the text's scrollbar
  a child of the text frame, not the top widget.
........
  r52826 | walter.doerwald | 2006-11-23 06:03:56 +0100 (Thu, 23 Nov 2006) | 3 lines
  Change decode() so that it works with a buffer (i.e. unicode(..., 'utf-8-sig'))
  SF bug #1601501.
........
  r52833 | georg.brandl | 2006-11-23 10:55:07 +0100 (Thu, 23 Nov 2006) | 2 lines
  Bug #1601630: little improvement to getopt docs
........
  r52835 | michael.hudson | 2006-11-23 14:54:04 +0100 (Thu, 23 Nov 2006) | 3 lines
  a test for an error condition not covered by existing tests
  (noticed this when writing the equivalent code for pypy)
........
  r52839 | raymond.hettinger | 2006-11-23 22:06:03 +0100 (Thu, 23 Nov 2006) | 1 line
  Fix and/add typo
........
  r52840 | raymond.hettinger | 2006-11-23 22:35:19 +0100 (Thu, 23 Nov 2006) | 1 line
  ... and the number of the counting shall be three.
........
  r52841 | thomas.heller | 2006-11-24 19:45:39 +0100 (Fri, 24 Nov 2006) | 1 line
  Fix bug #1598620: A ctypes structure cannot contain itself.
........
  r52843 | martin.v.loewis | 2006-11-25 16:39:19 +0100 (Sat, 25 Nov 2006) | 3 lines
  Disable _XOPEN_SOURCE on NetBSD 1.x.
  Will backport to 2.5
........
  r52845 | georg.brandl | 2006-11-26 20:27:47 +0100 (Sun, 26 Nov 2006) | 2 lines
  Bug #1603321: make pstats.Stats accept Unicode file paths.
........
  r52850 | georg.brandl | 2006-11-27 19:46:21 +0100 (Mon, 27 Nov 2006) | 2 lines
  Bug #1603789: grammatical error in Tkinter docs.
........
  r52855 | thomas.heller | 2006-11-28 21:21:54 +0100 (Tue, 28 Nov 2006) | 7 lines
  Fix #1563807: _ctypes built on AIX fails with ld ffi error.
  The contents of ffi_darwin.c must be compiled unless __APPLE__ is
  defined and __ppc__ is not.
  Will backport.
........
  r52862 | armin.rigo | 2006-11-29 22:59:22 +0100 (Wed, 29 Nov 2006) | 3 lines
  Forgot a case where the locals can now be a general mapping
  instead of just a dictionary.  (backporting...)
........
  r52872 | guido.van.rossum | 2006-11-30 20:23:13 +0100 (Thu, 30 Nov 2006) | 2 lines
  Update version.
........
  r52890 | walter.doerwald | 2006-12-01 17:59:47 +0100 (Fri, 01 Dec 2006) | 3 lines
  Move xdrlib tests from the module into a separate test script,
  port the tests to unittest and add a few new tests.
........
  r52900 | raymond.hettinger | 2006-12-02 03:00:39 +0100 (Sat, 02 Dec 2006) | 1 line
  Add name to credits (for untokenize).
........
  r52905 | martin.v.loewis | 2006-12-03 10:54:46 +0100 (Sun, 03 Dec 2006) | 2 lines
  Move IDLE news into NEWS.txt.
........
  r52906 | martin.v.loewis | 2006-12-03 12:23:45 +0100 (Sun, 03 Dec 2006) | 4 lines
  Patch #1544279: Improve thread-safety of the socket module by moving
  the sock_addr_t storage out of the socket object.
  Will backport to 2.5.
........
  r52908 | martin.v.loewis | 2006-12-03 13:01:53 +0100 (Sun, 03 Dec 2006) | 3 lines
  Patch #1371075: Make ConfigParser accept optional dict type
  for ordering, sorting, etc.
........
  r52910 | matthias.klose | 2006-12-03 18:16:41 +0100 (Sun, 03 Dec 2006) | 2 lines
  - Fix build failure on kfreebsd and on the hurd.
........
  r52915 | george.yoshida | 2006-12-04 12:41:54 +0100 (Mon, 04 Dec 2006) | 2 lines
  fix a versionchanged tag
........
  r52917 | george.yoshida | 2006-12-05 06:39:50 +0100 (Tue, 05 Dec 2006) | 3 lines
  Fix pickle doc typo
  Patch #1608758
........
  r52938 | georg.brandl | 2006-12-06 23:21:18 +0100 (Wed, 06 Dec 2006) | 2 lines
  Patch #1610437: fix a tarfile bug with long filename headers.
........
  r52945 | brett.cannon | 2006-12-07 00:38:48 +0100 (Thu, 07 Dec 2006) | 3 lines
  Fix a bad assumption that all objects assigned to '__loader__' on a module
  will have a '_files' attribute.
........
  r52951 | georg.brandl | 2006-12-07 10:30:06 +0100 (Thu, 07 Dec 2006) | 3 lines
  RFE #1592899: mention string.maketrans() in docs for str.translate,
  remove reference to the old regex module in the former's doc.
........
  r52962 | raymond.hettinger | 2006-12-08 04:17:18 +0100 (Fri, 08 Dec 2006) | 1 line
  Eliminate two redundant calls to PyObject_Hash().
........
  r52963 | raymond.hettinger | 2006-12-08 05:24:33 +0100 (Fri, 08 Dec 2006) | 3 lines
  Port Armin's fix for a dict resize vulnerability (svn revision 46589, sf bug 1456209).
........
  r52964 | raymond.hettinger | 2006-12-08 05:57:50 +0100 (Fri, 08 Dec 2006) | 4 lines
  Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to setting a KeyError (svn revision 52535, sf bug
  1576657).
........
  r52966 | raymond.hettinger | 2006-12-08 18:35:25 +0100 (Fri, 08 Dec 2006) | 2 lines
  Add test for SF bug 1576657
........
  r52970 | georg.brandl | 2006-12-08 21:46:11 +0100 (Fri, 08 Dec 2006) | 3 lines
  #1577756: svnversion doesn't react to LANG=C, use LC_ALL=C to force
  English output.
........
  r52972 | georg.brandl | 2006-12-09 10:08:29 +0100 (Sat, 09 Dec 2006) | 3 lines
  Patch #1608267: fix a race condition in os.makedirs() is the directory
  to be created is already there.
........
  r52975 | matthias.klose | 2006-12-09 13:15:27 +0100 (Sat, 09 Dec 2006) | 2 lines
  - Fix the build of the library reference in info format.
........
  r52994 | neal.norwitz | 2006-12-11 02:01:06 +0100 (Mon, 11 Dec 2006) | 1 line
  Fix a typo
........
  r52996 | georg.brandl | 2006-12-11 08:56:33 +0100 (Mon, 11 Dec 2006) | 2 lines
  Move errno imports back to individual functions.
........
  r52998 | vinay.sajip | 2006-12-11 15:07:16 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by Jeremy Katz (SF #1609407)
........
  r53000 | vinay.sajip | 2006-12-11 15:26:23 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by "cuppatea" (SF #1503765)
........
											 
										 
										
											2006-12-13 04:49:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  ( unsigned  long ) LONG_MAX ,  and  for  the  smallest  negative  signed  long 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  it  is  abs ( LONG_MIN ) ,  which  we  could  write  - ( unsigned  long ) LONG_MIN . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  However ,  some  other  compilers  warn  about  applying  unary  minus  to  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  unsigned  operand .   Hence  the  weird  " 0- " . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define PY_ABS_LONG_MIN         (0-(unsigned long)LONG_MIN) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define PY_ABS_SSIZE_T_MIN      (0-(size_t)PY_SSIZE_T_MIN) 
  
						 
					
						
							
								
									
										
											 
										
											
												Four months of trunk changes (including a few releases...)
Merged revisions 51434-53004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r51434 | neal.norwitz | 2006-08-21 20:20:10 +0200 (Mon, 21 Aug 2006) | 1 line
  Fix a couple of ssize-t issues reported by Alexander Belopolsky on python-dev
........
  r51439 | neal.norwitz | 2006-08-21 21:47:08 +0200 (Mon, 21 Aug 2006) | 6 lines
  Patch #1542451: disallow continue anywhere under a finally
  I'm undecided if this should be backported to 2.5 or 2.5.1.
  Armin suggested to wait (I'm of the same opinion).  Thomas W thinks
  it's fine to go in 2.5.
........
  r51443 | neal.norwitz | 2006-08-21 22:16:24 +0200 (Mon, 21 Aug 2006) | 4 lines
  Handle a few more error conditions.
  Klocwork 301 and 302.  Will backport.
........
  r51450 | neal.norwitz | 2006-08-22 00:21:19 +0200 (Tue, 22 Aug 2006) | 5 lines
  Patch #1541585: fix buffer overrun when performing repr() on
  a unicode string in a build with wide unicode (UCS-4) support.
  This code could be improved, so add an XXX comment.
........
  r51456 | neal.norwitz | 2006-08-22 01:44:48 +0200 (Tue, 22 Aug 2006) | 1 line
  Try to get the windows bots working again with the new peephole.c
........
  r51461 | anthony.baxter | 2006-08-22 09:36:59 +0200 (Tue, 22 Aug 2006) | 1 line
  patch for documentation for recent uuid changes (from ping)
........
  r51473 | neal.norwitz | 2006-08-22 15:56:56 +0200 (Tue, 22 Aug 2006) | 1 line
  Alexander Belopolsky pointed out that pos is a size_t
........
  r51489 | jeremy.hylton | 2006-08-22 22:46:00 +0200 (Tue, 22 Aug 2006) | 2 lines
  Expose column offset information in parse trees.
........
  r51497 | andrew.kuchling | 2006-08-23 01:13:43 +0200 (Wed, 23 Aug 2006) | 1 line
  Move functional howto into trunk
........
  r51515 | jeremy.hylton | 2006-08-23 20:37:43 +0200 (Wed, 23 Aug 2006) | 2 lines
  Baby steps towards better tests for tokenize
........
  r51525 | alex.martelli | 2006-08-23 22:42:02 +0200 (Wed, 23 Aug 2006) | 6 lines
  x**2 should about equal x*x (including for a float x such that the result is
  inf) but didn't; added a test to test_float to verify that, and ignored the
  ERANGE value for errno in the pow operation to make the new test pass (with
  help from Marilyn Davis at the Google Python Sprint -- thanks!).
........
  r51526 | jeremy.hylton | 2006-08-23 23:14:03 +0200 (Wed, 23 Aug 2006) | 20 lines
  Bug fixes large and small for tokenize.
  Small: Always generate a NL or NEWLINE token following
         a COMMENT token.  The old code did not generate an NL token if
         the comment was on a line by itself.
  Large: The output of untokenize() will now match the
         input exactly if it is passed the full token sequence.  The
         old, crufty output is still generated if a limited input
         sequence is provided, where limited means that it does not
         include position information for tokens.
  Remaining bug: There is no CONTINUATION token (\) so there is no way
  for untokenize() to handle such code.
  Also, expanded the number of doctests in hopes of eventually removing
  the old-style tests that compare against a golden file.
  Bug fix candidate for Python 2.5.1. (Sigh.)
........
  r51527 | jeremy.hylton | 2006-08-23 23:26:46 +0200 (Wed, 23 Aug 2006) | 5 lines
  Replace dead code with an assert.
  Now that COMMENT tokens are reliably followed by NL or NEWLINE,
  there is never a need to add extra newlines in untokenize.
........
  r51530 | alex.martelli | 2006-08-24 00:17:59 +0200 (Thu, 24 Aug 2006) | 7 lines
  Reverting the patch that tried to fix the issue whereby x**2 raises
  OverflowError while x*x succeeds and produces infinity; apparently
  these inconsistencies cannot be fixed across ``all'' platforms and
  there's a widespread feeling that therefore ``every'' platform
  should keep suffering forevermore.  Ah well.
........
  r51565 | thomas.wouters | 2006-08-24 20:40:20 +0200 (Thu, 24 Aug 2006) | 6 lines
  Fix SF bug #1545837: array.array borks on deepcopy.
  array.__deepcopy__() needs to take an argument, even if it doesn't actually
  use it. Will backport to 2.5 and 2.4 (if applicable.)
........
  r51580 | martin.v.loewis | 2006-08-25 02:03:34 +0200 (Fri, 25 Aug 2006) | 3 lines
  Patch #1545507: Exclude ctypes package in Win64 MSI file.
  Will backport to 2.5.
........
  r51589 | neal.norwitz | 2006-08-25 03:52:49 +0200 (Fri, 25 Aug 2006) | 1 line
  importing types is not necessary if we use isinstance
........
  r51604 | thomas.heller | 2006-08-25 09:27:33 +0200 (Fri, 25 Aug 2006) | 3 lines
  Port _ctypes.pyd to win64 on AMD64.
........
  r51605 | thomas.heller | 2006-08-25 09:34:51 +0200 (Fri, 25 Aug 2006) | 3 lines
  Add missing file for _ctypes.pyd port to win64 on AMD64.
........
  r51606 | thomas.heller | 2006-08-25 11:26:33 +0200 (Fri, 25 Aug 2006) | 6 lines
  Build _ctypes.pyd for win AMD64 into the MSVC project file.
  Since MSVC doesn't know about .asm files, a helper batch file is needed
  to find ml64.exe in predefined locations.  The helper script hardcodes
  the path to the MS Platform SDK.
........
  r51608 | armin.rigo | 2006-08-25 14:44:28 +0200 (Fri, 25 Aug 2006) | 4 lines
  The regular expression engine in '_sre' can segfault when interpreting
  bogus bytecode.  It is unclear whether this is a real bug or a "won't
  fix" case like bogus_code_obj.py.
........
  r51617 | tim.peters | 2006-08-26 00:05:39 +0200 (Sat, 26 Aug 2006) | 2 lines
  Whitespace normalization.
........
  r51618 | tim.peters | 2006-08-26 00:06:44 +0200 (Sat, 26 Aug 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51619 | tim.peters | 2006-08-26 00:26:21 +0200 (Sat, 26 Aug 2006) | 3 lines
  A new test here relied on preserving invisible trailing
  whitespace in expected output.  Stop that.
........
  r51624 | jack.diederich | 2006-08-26 20:42:06 +0200 (Sat, 26 Aug 2006) | 4 lines
  - Move functions common to all path modules into genericpath.py and have the
    OS speicifc path modules import them.
  - Have os2emxpath import common functions fron ntpath instead of using copies
........
  r51642 | neal.norwitz | 2006-08-29 07:40:58 +0200 (Tue, 29 Aug 2006) | 1 line
  Fix a couple of typos.
........
  r51647 | marc-andre.lemburg | 2006-08-29 12:34:12 +0200 (Tue, 29 Aug 2006) | 5 lines
  Fix a buglet in the error reporting (SF bug report #1546372).
  This should probably go into Python 2.5 or 2.5.1 as well.
........
  r51663 | armin.rigo | 2006-08-31 10:51:06 +0200 (Thu, 31 Aug 2006) | 3 lines
  Doc fix: hashlib objects don't always return a digest of 16 bytes.
  Backport candidate for 2.5.
........
  r51664 | nick.coghlan | 2006-08-31 14:00:43 +0200 (Thu, 31 Aug 2006) | 1 line
  Fix the wrongheaded implementation of context management in the decimal module and add unit tests. (python-dev discussion is ongoing regarding what we do about Python 2.5)
........
  r51665 | nick.coghlan | 2006-08-31 14:51:25 +0200 (Thu, 31 Aug 2006) | 1 line
  Remove the old decimal context management tests from test_contextlib (guess who didn't run the test suite before committing...)
........
  r51669 | brett.cannon | 2006-08-31 20:54:26 +0200 (Thu, 31 Aug 2006) | 4 lines
  Make sure memory is properly cleaned up in file_init.
  Backport candidate.
........
  r51671 | brett.cannon | 2006-08-31 23:47:52 +0200 (Thu, 31 Aug 2006) | 2 lines
  Fix comment about indentation level in C files.
........
  r51674 | brett.cannon | 2006-09-01 00:42:37 +0200 (Fri, 01 Sep 2006) | 3 lines
  Have pre-existing C files use 8 spaces indents (to match old PEP 7 style), but
  have all new files use 4 spaces (to match current PEP 7 style).
........
  r51676 | fred.drake | 2006-09-01 05:57:19 +0200 (Fri, 01 Sep 2006) | 3 lines
  - SF patch #1550263: Enhance and correct unittest docs
  - various minor cleanups for improved consistency
........
  r51677 | georg.brandl | 2006-09-02 00:30:52 +0200 (Sat, 02 Sep 2006) | 2 lines
  evalfile() should be execfile().
........
  r51681 | neal.norwitz | 2006-09-02 04:43:17 +0200 (Sat, 02 Sep 2006) | 1 line
  SF #1547931, fix typo (missing and).  Will backport to 2.5
........
  r51683 | neal.norwitz | 2006-09-02 04:50:35 +0200 (Sat, 02 Sep 2006) | 1 line
  Bug #1548092: fix curses.tparm seg fault on invalid input.  Needs backport to 2.5.1 and earlier.
........
  r51684 | neal.norwitz | 2006-09-02 04:58:13 +0200 (Sat, 02 Sep 2006) | 4 lines
  Bug #1550714: fix SystemError from itertools.tee on negative value for n.
  Needs backport to 2.5.1 and earlier.
........
  r51685 | nick.coghlan | 2006-09-02 05:54:17 +0200 (Sat, 02 Sep 2006) | 1 line
  Make decimal.ContextManager a private implementation detail of decimal.localcontext()
........
  r51686 | nick.coghlan | 2006-09-02 06:04:18 +0200 (Sat, 02 Sep 2006) | 1 line
  Further corrections to the decimal module context management documentation
........
  r51688 | raymond.hettinger | 2006-09-02 19:07:23 +0200 (Sat, 02 Sep 2006) | 1 line
  Fix documentation nits for decimal context managers.
........
  r51690 | neal.norwitz | 2006-09-02 20:51:34 +0200 (Sat, 02 Sep 2006) | 1 line
  Add missing word in comment
........
  r51691 | neal.norwitz | 2006-09-02 21:40:19 +0200 (Sat, 02 Sep 2006) | 7 lines
  Hmm, this test has failed at least twice recently on the OpenBSD and
  Debian sparc buildbots.  Since this goes through a lot of tests
  and hits the disk a lot it could be slow (especially if NFS is involved).
  I'm not sure if that's the problem, but printing periodic msgs shouldn't hurt.
  The code was stolen from test_compiler.
........
  r51693 | nick.coghlan | 2006-09-03 03:02:00 +0200 (Sun, 03 Sep 2006) | 1 line
  Fix final documentation nits before backporting decimal module fixes to 2.5
........
  r51694 | nick.coghlan | 2006-09-03 03:06:07 +0200 (Sun, 03 Sep 2006) | 1 line
  Typo fix for decimal docs
........
  r51697 | nick.coghlan | 2006-09-03 03:20:46 +0200 (Sun, 03 Sep 2006) | 1 line
  NEWS entry on trunk for decimal module changes
........
  r51704 | raymond.hettinger | 2006-09-04 17:32:48 +0200 (Mon, 04 Sep 2006) | 1 line
  Fix endcase for str.rpartition()
........
  r51716 | tim.peters | 2006-09-05 04:18:09 +0200 (Tue, 05 Sep 2006) | 12 lines
  "Conceptual" merge of rev 51711 from the 2.5 branch.
  i_divmod():  As discussed on Python-Dev, changed the overflow
  checking to live happily with recent gcc optimizations that
  assume signed integer arithmetic never overflows.
  This differs from the corresponding change on the 2.5 and 2.4
  branches, using a less obscure approach, but one that /may/
  tickle platform idiocies in their definitions of LONG_MIN.
  The 2.4 + 2.5 change avoided introducing a dependence on
  LONG_MIN, at the cost of substantially goofier code.
........
  r51717 | tim.peters | 2006-09-05 04:21:19 +0200 (Tue, 05 Sep 2006) | 2 lines
  Whitespace normalization.
........
  r51719 | tim.peters | 2006-09-05 04:22:17 +0200 (Tue, 05 Sep 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r51720 | neal.norwitz | 2006-09-05 04:24:03 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix SF bug #1546288, crash in dict_equal.
........
  r51721 | neal.norwitz | 2006-09-05 04:25:41 +0200 (Tue, 05 Sep 2006) | 1 line
  Fix SF #1552093, eval docstring typo (3 ps in mapping)
........
  r51724 | neal.norwitz | 2006-09-05 04:35:08 +0200 (Tue, 05 Sep 2006) | 1 line
  This was found by Guido AFAIK on p3yk (sic) branch.
........
  r51725 | neal.norwitz | 2006-09-05 04:36:20 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a NEWS entry for str.rpartition() change
........
  r51728 | neal.norwitz | 2006-09-05 04:57:01 +0200 (Tue, 05 Sep 2006) | 1 line
  Patch #1540470, for OpenBSD 4.0.  Backport candidate for 2.[34].
........
  r51729 | neal.norwitz | 2006-09-05 05:53:08 +0200 (Tue, 05 Sep 2006) | 12 lines
  Bug #1520864 (again): unpacking singleton tuples in list comprehensions and
  generator expressions (x for x, in ... ) works again.
  Sigh, I only fixed for loops the first time, not list comps and genexprs too.
  I couldn't find any more unpacking cases where there is a similar bug lurking.
  This code should be refactored to eliminate the duplication.  I'm sure
  the listcomp/genexpr code can be refactored.  I'm not sure if the for loop
  can re-use any of the same code though.
  Will backport to 2.5 (the only place it matters).
........
  r51731 | neal.norwitz | 2006-09-05 05:58:26 +0200 (Tue, 05 Sep 2006) | 1 line
  Add a comment about some refactoring.  (There's probably more that should be done.)  I will reformat this file in the next checkin due to the inconsistent tabs/spaces.
........
  r51732 | neal.norwitz | 2006-09-05 06:00:12 +0200 (Tue, 05 Sep 2006) | 1 line
  M-x untabify
........
  r51737 | hyeshik.chang | 2006-09-05 14:07:09 +0200 (Tue, 05 Sep 2006) | 7 lines
  Fix a few bugs on cjkcodecs found by Oren Tirosh:
  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
    codepoints to conform the standard.
  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 2013:2
    codepoints now.
........
  r51738 | hyeshik.chang | 2006-09-05 14:14:57 +0200 (Tue, 05 Sep 2006) | 2 lines
  Fix a typo: 2013 -> 0213
........
  r51740 | georg.brandl | 2006-09-05 14:44:58 +0200 (Tue, 05 Sep 2006) | 3 lines
  Bug #1552618: change docs of dict.has_key() to reflect recommendation
  to use "in".
........
  r51742 | andrew.kuchling | 2006-09-05 15:02:40 +0200 (Tue, 05 Sep 2006) | 1 line
  Rearrange example a bit, and show rpartition() when separator is not found
........
  r51744 | andrew.kuchling | 2006-09-05 15:15:41 +0200 (Tue, 05 Sep 2006) | 1 line
  [Bug #1525469] SimpleXMLRPCServer still uses the sys.exc_{value,type} module-level globals instead of calling sys.exc_info().  Reported by Russell Warren
........
  r51745 | andrew.kuchling | 2006-09-05 15:19:18 +0200 (Tue, 05 Sep 2006) | 3 lines
  [Bug #1526834] Fix crash in pdb when you do 'b f(';
  the function name was placed into a regex pattern and the unbalanced paren
  caused re.compile() to report an error
........
  r51751 | kristjan.jonsson | 2006-09-05 19:58:12 +0200 (Tue, 05 Sep 2006) | 6 lines
  Update the PCBuild8 solution.
  Facilitate cross-compilation by having binaries in separate Win32 and x64 directories.
  Rationalized configs by making proper use of platforms/configurations.
  Remove pythoncore_pgo project.
  Add new PGIRelease and PGORelease configurations to perform Profile Guided Optimisation.
  Removed I64 support, but this can be easily added by copying the x64 platform settings.
........
  r51758 | gustavo.niemeyer | 2006-09-06 03:58:52 +0200 (Wed, 06 Sep 2006) | 3 lines
  Fixing #1531862: Do not close standard file descriptors in the
  subprocess module.
........
  r51760 | neal.norwitz | 2006-09-06 05:58:34 +0200 (Wed, 06 Sep 2006) | 1 line
  Revert 51758 because it broke all the buildbots
........
  r51762 | georg.brandl | 2006-09-06 08:03:59 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1551427: fix a wrong NULL pointer check in the win32 version
  of os.urandom().
........
  r51765 | georg.brandl | 2006-09-06 08:09:31 +0200 (Wed, 06 Sep 2006) | 3 lines
  Bug #1550983: emit better error messages for erroneous relative
  imports (if not in package and if beyond toplevel package).
........
  r51767 | neal.norwitz | 2006-09-06 08:28:06 +0200 (Wed, 06 Sep 2006) | 1 line
  with and as are now keywords.  There are some generated files I can't recreate.
........
  r51770 | georg.brandl | 2006-09-06 08:50:05 +0200 (Wed, 06 Sep 2006) | 5 lines
  Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
  Also make sure that every exception class has __module__ set to
  'exceptions'.
........
  r51785 | georg.brandl | 2006-09-06 22:05:58 +0200 (Wed, 06 Sep 2006) | 2 lines
  Fix missing import of the types module in logging.config.
........
  r51789 | marc-andre.lemburg | 2006-09-06 22:40:22 +0200 (Wed, 06 Sep 2006) | 3 lines
  Add news item for bug fix of SF bug report #1546372.
........
  r51797 | gustavo.niemeyer | 2006-09-07 02:48:33 +0200 (Thu, 07 Sep 2006) | 3 lines
  Fixed subprocess bug #1531862 again, after removing tests
  offending buildbot
........
  r51798 | raymond.hettinger | 2006-09-07 04:42:48 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix refcounts and add error checks.
........
  r51803 | nick.coghlan | 2006-09-07 12:50:34 +0200 (Thu, 07 Sep 2006) | 1 line
  Fix the speed regression in inspect.py by adding another cache to speed up getmodule(). Patch #1553314
........
  r51805 | ronald.oussoren | 2006-09-07 14:03:10 +0200 (Thu, 07 Sep 2006) | 2 lines
  Fix a glaring error and update some version numbers.
........
  r51814 | andrew.kuchling | 2006-09-07 15:56:23 +0200 (Thu, 07 Sep 2006) | 1 line
  Typo fix
........
  r51815 | andrew.kuchling | 2006-09-07 15:59:38 +0200 (Thu, 07 Sep 2006) | 8 lines
  [Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout on the select()
  if an input hook has been defined.  Patch by Richard Boulton.
  This select() code is only executed with readline 2.1, or if
  READLINE_CALLBACKS is defined.
  Backport candidate for 2.5, 2.4, probably earlier versions too.
........
  r51816 | armin.rigo | 2006-09-07 17:06:00 +0200 (Thu, 07 Sep 2006) | 2 lines
  Add a warning notice on top of the generated grammar.txt.
........
  r51819 | thomas.heller | 2006-09-07 20:56:28 +0200 (Thu, 07 Sep 2006) | 5 lines
  Anonymous structure fields that have a bit-width specified did not work,
  and they gave a strange error message from PyArg_ParseTuple:
      function takes exactly 2 arguments (3 given).
  With tests.
........
  r51820 | thomas.heller | 2006-09-07 21:09:54 +0200 (Thu, 07 Sep 2006) | 4 lines
  The cast function did not accept c_char_p or c_wchar_p instances
  as first argument, and failed with a 'bad argument to internal function'
  error message.
........
  r51827 | nick.coghlan | 2006-09-08 12:04:38 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing NEWS entry for rev 51803
........
  r51828 | andrew.kuchling | 2006-09-08 15:25:23 +0200 (Fri, 08 Sep 2006) | 1 line
  Add missing word
........
  r51829 | andrew.kuchling | 2006-09-08 15:35:49 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51830 | andrew.kuchling | 2006-09-08 15:36:36 +0200 (Fri, 08 Sep 2006) | 1 line
  Explain SQLite a bit more clearly
........
  r51832 | andrew.kuchling | 2006-09-08 16:02:45 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51833 | andrew.kuchling | 2006-09-08 16:03:01 +0200 (Fri, 08 Sep 2006) | 1 line
  Use native SQLite types
........
  r51835 | andrew.kuchling | 2006-09-08 16:05:10 +0200 (Fri, 08 Sep 2006) | 1 line
  Fix typo in example
........
  r51837 | brett.cannon | 2006-09-09 09:11:46 +0200 (Sat, 09 Sep 2006) | 6 lines
  Remove the __unicode__ method from exceptions.  Allows unicode() to be called
  on exception classes.  Would require introducing a tp_unicode slot to make it
  work otherwise.
  Fixes bug #1551432 and will be backported.
........
  r51854 | neal.norwitz | 2006-09-11 06:24:09 +0200 (Mon, 11 Sep 2006) | 8 lines
  Forward port of 51850 from release25-maint branch.
  As mentioned on python-dev, reverting patch #1504333 because it introduced
  an infinite loop in rev 47154.
  This patch also adds a test to prevent the regression.
........
  r51855 | neal.norwitz | 2006-09-11 06:28:16 +0200 (Mon, 11 Sep 2006) | 5 lines
  Properly handle a NULL returned from PyArena_New().
  (Also fix some whitespace)
  Klocwork #364.
........
  r51856 | neal.norwitz | 2006-09-11 06:32:57 +0200 (Mon, 11 Sep 2006) | 1 line
  Add a "crasher" taken from the sgml bug report referenced in the comment
........
  r51858 | georg.brandl | 2006-09-11 11:38:35 +0200 (Mon, 11 Sep 2006) | 12 lines
  Forward-port of rev. 51857:
  Building with HP's cc on HP-UX turned up a couple of problems.
  _PyGILState_NoteThreadState was declared as static inconsistently.
  Make it static as it's not necessary outside of this module.
  Some tests failed because errno was reset to 0. (I think the tests
  that failed were at least: test_fcntl and test_mailbox).
  Ensure that errno doesn't change after a call to Py_END_ALLOW_THREADS.
  This only affected debug builds.
........
  r51865 | martin.v.loewis | 2006-09-12 21:49:20 +0200 (Tue, 12 Sep 2006) | 2 lines
  Forward-port 51862: Add sgml_input.html.
........
  r51866 | andrew.kuchling | 2006-09-12 22:50:23 +0200 (Tue, 12 Sep 2006) | 1 line
  Markup typo fix
........
  r51867 | andrew.kuchling | 2006-09-12 23:09:02 +0200 (Tue, 12 Sep 2006) | 1 line
  Some editing, markup fixes
........
  r51868 | andrew.kuchling | 2006-09-12 23:21:51 +0200 (Tue, 12 Sep 2006) | 1 line
  More wordsmithing
........
  r51877 | andrew.kuchling | 2006-09-14 13:22:18 +0200 (Thu, 14 Sep 2006) | 1 line
  Make --help mention that -v can be supplied multiple times
........
  r51878 | andrew.kuchling | 2006-09-14 13:28:50 +0200 (Thu, 14 Sep 2006) | 1 line
  Rewrite help message to remove some of the parentheticals.  (There were a lot of them.)
........
  r51883 | ka-ping.yee | 2006-09-15 02:34:19 +0200 (Fri, 15 Sep 2006) | 2 lines
  Fix grammar errors and improve clarity.
........
  r51885 | georg.brandl | 2006-09-15 07:22:24 +0200 (Fri, 15 Sep 2006) | 3 lines
  Correct elementtree module index entry.
........
  r51889 | fred.drake | 2006-09-15 17:18:04 +0200 (Fri, 15 Sep 2006) | 4 lines
  - fix module name in links in formatted documentation
  - minor markup cleanup
  (forward-ported from release25-maint revision 51888)
........
  r51891 | fred.drake | 2006-09-15 18:11:27 +0200 (Fri, 15 Sep 2006) | 3 lines
  revise explanation of returns_unicode to reflect bool values
  and to include the default value
  (merged from release25-maint revision 51890)
........
  r51897 | martin.v.loewis | 2006-09-16 19:36:37 +0200 (Sat, 16 Sep 2006) | 2 lines
  Patch #1557515: Add RLIMIT_SBSIZE.
........
  r51903 | ronald.oussoren | 2006-09-17 20:42:53 +0200 (Sun, 17 Sep 2006) | 2 lines
  Port of revision 51902 in release25-maint to the trunk
........
  r51904 | ronald.oussoren | 2006-09-17 21:23:27 +0200 (Sun, 17 Sep 2006) | 3 lines
  Tweak Mac/Makefile in to ensure that pythonw gets rebuild when the major version
  of python changes (2.5 -> 2.6). Bug #1552935.
........
  r51913 | guido.van.rossum | 2006-09-18 23:36:16 +0200 (Mon, 18 Sep 2006) | 2 lines
  Make this thing executable.
........
  r51920 | gregory.p.smith | 2006-09-19 19:35:04 +0200 (Tue, 19 Sep 2006) | 5 lines
  Fixes a bug with bsddb.DB.stat where the flags and txn keyword
  arguments are transposed.  (reported by Louis Zechtzer)
  ..already committed to release24-maint
  ..needs committing to release25-maint
........
  r51926 | brett.cannon | 2006-09-20 20:34:28 +0200 (Wed, 20 Sep 2006) | 3 lines
  Accidentally didn't commit Misc/NEWS entry on when __unicode__() was removed
  from exceptions.
........
  r51927 | brett.cannon | 2006-09-20 20:43:13 +0200 (Wed, 20 Sep 2006) | 6 lines
  Allow exceptions to be directly sliced again
  (e.g., ``BaseException(1,2,3)[0:2]``).
  Discovered in Python 2.5.0 by Thomas Heller and reported to python-dev.  This
  should be backported to 2.5 .
........
  r51928 | brett.cannon | 2006-09-20 21:28:35 +0200 (Wed, 20 Sep 2006) | 2 lines
  Make python.vim output more deterministic.
........
  r51949 | walter.doerwald | 2006-09-21 17:09:55 +0200 (Thu, 21 Sep 2006) | 2 lines
  Fix typo.
........
  r51950 | jack.diederich | 2006-09-21 19:50:26 +0200 (Thu, 21 Sep 2006) | 5 lines
  * regression bug, count_next was coercing a Py_ssize_t to an unsigned Py_size_t
    which breaks negative counts
  * added test for negative numbers
  will backport to 2.5.1
........
  r51953 | jack.diederich | 2006-09-21 22:34:49 +0200 (Thu, 21 Sep 2006) | 1 line
  added itertools.count(-n) fix
........
  r51971 | neal.norwitz | 2006-09-22 10:16:26 +0200 (Fri, 22 Sep 2006) | 10 lines
  Fix %zd string formatting on Mac OS X so it prints negative numbers.
  In addition to testing positive numbers, verify negative numbers work in configure.
  In order to avoid compiler warnings on OS X 10.4, also change the order of the check
  for the format character to use (PY_FORMAT_SIZE_T) in the sprintf format
  for Py_ssize_t.  This patch changes PY_FORMAT_SIZE_T from "" to "l" if it wasn't
  defined at configure time.  Need to verify the buildbot results.
  Backport candidate (if everyone thinks this patch can't be improved).
........
  r51972 | neal.norwitz | 2006-09-22 10:18:10 +0200 (Fri, 22 Sep 2006) | 7 lines
  Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
  These tests should be improved.  Hopefully this fixes variations when
  flipping back and forth between fpdef and fplist.
  Backport candidate.
........
  r51975 | neal.norwitz | 2006-09-22 10:47:23 +0200 (Fri, 22 Sep 2006) | 4 lines
  Mostly revert this file to the same version as before.  Only force setting
  of PY_FORMAT_SIZE_T to "l" for Mac OSX.  I don't know a better define
  to use.  This should get rid of the warnings on other platforms and Mac too.
........
  r51986 | fred.drake | 2006-09-23 02:26:31 +0200 (Sat, 23 Sep 2006) | 1 line
  add boilerplate "What's New" document so the docs will build
........
  r51987 | neal.norwitz | 2006-09-23 06:11:38 +0200 (Sat, 23 Sep 2006) | 1 line
  Remove extra semi-colons reported by Johnny Lee on python-dev.  Backport if anyone cares.
........
  r51989 | neal.norwitz | 2006-09-23 20:11:58 +0200 (Sat, 23 Sep 2006) | 1 line
  SF Bug #1563963, add missing word and cleanup first sentance
........
  r51990 | brett.cannon | 2006-09-23 21:53:20 +0200 (Sat, 23 Sep 2006) | 3 lines
  Make output on test_strptime() be more verbose in face of failure.  This is in
  hopes that more information will help debug the failing test on HPPA Ubuntu.
........
  r51991 | georg.brandl | 2006-09-24 12:36:01 +0200 (Sun, 24 Sep 2006) | 2 lines
  Fix webbrowser.BackgroundBrowser on Windows.
........
  r51993 | georg.brandl | 2006-09-24 14:35:36 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in the parser's future statement handling that led to "with"
  not being recognized as a keyword after, e.g., this statement:
  from __future__ import division, with_statement
........
  r51995 | georg.brandl | 2006-09-24 14:50:24 +0200 (Sun, 24 Sep 2006) | 4 lines
  Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.
........
  r52000 | armin.rigo | 2006-09-25 17:16:26 +0200 (Mon, 25 Sep 2006) | 2 lines
  Another crasher.
........
  r52011 | brett.cannon | 2006-09-27 01:38:24 +0200 (Wed, 27 Sep 2006) | 2 lines
  Make the error message for when the time data and format do not match clearer.
........
  r52014 | andrew.kuchling | 2006-09-27 18:37:30 +0200 (Wed, 27 Sep 2006) | 1 line
  Add news item for rev. 51815
........
  r52018 | andrew.kuchling | 2006-09-27 21:23:05 +0200 (Wed, 27 Sep 2006) | 1 line
  Make examples do error checking on Py_InitModule
........
  r52032 | brett.cannon | 2006-09-29 00:10:14 +0200 (Fri, 29 Sep 2006) | 2 lines
  Very minor grammatical fix in a comment.
........
  r52048 | george.yoshida | 2006-09-30 07:14:02 +0200 (Sat, 30 Sep 2006) | 4 lines
  SF bug #1567976 : fix typo
  Will backport to 2.5.
........
  r52051 | gregory.p.smith | 2006-09-30 08:08:20 +0200 (Sat, 30 Sep 2006) | 2 lines
  wording change
........
  r52053 | georg.brandl | 2006-09-30 09:24:48 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1567375: a minor logical glitch in example description.
........
  r52056 | georg.brandl | 2006-09-30 09:31:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.
........
  r52058 | georg.brandl | 2006-09-30 10:43:30 +0200 (Sat, 30 Sep 2006) | 4 lines
  Patch #1567691: super() and new.instancemethod() now don't accept
  keyword arguments any more (previously they accepted them, but didn't
  use them).
........
  r52061 | georg.brandl | 2006-09-30 11:03:42 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566800: make sure that EnvironmentError can be called with any
  number of arguments, as was the case in Python 2.4.
........
  r52063 | georg.brandl | 2006-09-30 11:06:45 +0200 (Sat, 30 Sep 2006) | 2 lines
  Bug #1566663: remove obsolete example from datetime docs.
........
  r52065 | georg.brandl | 2006-09-30 11:13:21 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.
........
  r52068 | georg.brandl | 2006-09-30 12:58:01 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.
........
  r52069 | georg.brandl | 2006-09-30 13:06:47 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1560617: in pyclbr, return full module name not only for classes,
  but also for functions.
........
  r52072 | georg.brandl | 2006-09-30 13:17:34 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1556784: allow format strings longer than 127 characters in
  datetime's strftime function.
........
  r52075 | georg.brandl | 2006-09-30 13:22:28 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1446043: correctly raise a LookupError if an encoding name given
  to encodings.search_function() contains a dot.
........
  r52078 | georg.brandl | 2006-09-30 14:02:57 +0200 (Sat, 30 Sep 2006) | 3 lines
  Bug #1546052: clarify that PyString_FromString(AndSize) copies the
  string pointed to by its parameter.
........
  r52080 | georg.brandl | 2006-09-30 14:16:03 +0200 (Sat, 30 Sep 2006) | 3 lines
  Convert test_import to unittest.
........
  r52083 | kurt.kaiser | 2006-10-01 23:16:45 +0200 (Sun, 01 Oct 2006) | 5 lines
  Some syntax errors were being caught by tokenize during the tabnanny
  check, resulting in obscure error messages.  Do the syntax check
  first.  Bug 1562716, 1562719
........
  r52084 | kurt.kaiser | 2006-10-01 23:54:37 +0200 (Sun, 01 Oct 2006) | 3 lines
  Add comment explaining that error msgs may be due to user code when
  running w/o subprocess.
........
  r52086 | martin.v.loewis | 2006-10-02 16:55:51 +0200 (Mon, 02 Oct 2006) | 3 lines
  Fix test for uintptr_t. Fixes #1568842.
  Will backport.
........
  r52089 | martin.v.loewis | 2006-10-02 17:20:37 +0200 (Mon, 02 Oct 2006) | 3 lines
  Guard uintptr_t test with HAVE_STDINT_H, test for
  stdint.h. Will backport.
........
  r52100 | vinay.sajip | 2006-10-03 20:02:37 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation omitted the additional parameter to LogRecord.__init__ which was added in 2.5. (See SF #1569622).
........
  r52101 | vinay.sajip | 2006-10-03 20:20:26 +0200 (Tue, 03 Oct 2006) | 1 line
  Documentation clarified to mention optional parameters.
........
  r52102 | vinay.sajip | 2006-10-03 20:21:56 +0200 (Tue, 03 Oct 2006) | 1 line
  Modified LogRecord.__init__ to make the func parameter optional. (See SF #1569622).
........
  r52121 | brett.cannon | 2006-10-03 23:58:55 +0200 (Tue, 03 Oct 2006) | 2 lines
  Fix minor typo in a comment.
........
  r52123 | brett.cannon | 2006-10-04 01:23:14 +0200 (Wed, 04 Oct 2006) | 2 lines
  Convert test_imp over to unittest.
........
  r52128 | barry.warsaw | 2006-10-04 04:06:36 +0200 (Wed, 04 Oct 2006) | 3 lines
  decode_rfc2231(): As Christian Robottom Reis points out, it makes no sense to
  test for parts > 3 when we use .split(..., 2).
........
  r52129 | jeremy.hylton | 2006-10-04 04:24:52 +0200 (Wed, 04 Oct 2006) | 9 lines
  Fix for SF bug 1569998: break permitted inside try.
  The compiler was checking that there was something on the fblock
  stack, but not that there was a loop on the stack.  Fixed that and
  added a test for the specific syntax error.
  Bug fix candidate.
........
  r52130 | martin.v.loewis | 2006-10-04 07:47:34 +0200 (Wed, 04 Oct 2006) | 4 lines
  Fix integer negation and absolute value to not rely
  on undefined behaviour of the C compiler anymore.
  Will backport to 2.5 and 2.4.
........
  r52135 | martin.v.loewis | 2006-10-04 11:21:20 +0200 (Wed, 04 Oct 2006) | 1 line
  Forward port r52134: Add uuids for 2.4.4.
........
  r52137 | armin.rigo | 2006-10-04 12:23:57 +0200 (Wed, 04 Oct 2006) | 3 lines
  Compilation problem caused by conflicting typedefs for uint32_t
  (unsigned long vs. unsigned int).
........
  r52139 | armin.rigo | 2006-10-04 14:17:45 +0200 (Wed, 04 Oct 2006) | 23 lines
  Forward-port of r52136,52138: a review of overflow-detecting code.
  * unified the way intobject, longobject and mystrtoul handle
    values around -sys.maxint-1.
  * in general, trying to entierely avoid overflows in any computation
    involving signed ints or longs is extremely involved.  Fixed a few
    simple cases where a compiler might be too clever (but that's all
    guesswork).
  * more overflow checks against bad data in marshal.c.
  * 2.5 specific: fixed a number of places that were still confusing int
    and Py_ssize_t.  Some of them could potentially have caused
    "real-world" breakage.
  * list.pop(x): fixing overflow issues on x was messy.  I just reverted
    to PyArg_ParseTuple("n"), which does the right thing.  (An obscure
    test was trying to give a Decimal to list.pop()... doesn't make
    sense any more IMHO)
  * trying to write a few tests...
........
  r52147 | andrew.kuchling | 2006-10-04 15:42:43 +0200 (Wed, 04 Oct 2006) | 6 lines
  Cause a PyObject_Malloc() failure to trigger a MemoryError, and then
  add 'if (PyErr_Occurred())' checks to various places so that NULL is
  returned properly.
  2.4 backport candidate.
........
  r52148 | martin.v.loewis | 2006-10-04 17:25:28 +0200 (Wed, 04 Oct 2006) | 1 line
  Add MSVC8 project files to create wininst-8.exe.
........
  r52196 | brett.cannon | 2006-10-06 00:02:31 +0200 (Fri, 06 Oct 2006) | 7 lines
  Clarify what "re-initialization" means for init_builtin() and init_dynamic().
  Also remove warning about re-initialization as possibly raising an execption as
  both call _PyImport_FindExtension() which pulls any module that was already
  imported from the Python process' extension cache and just copies the __dict__
  into the module stored in sys.modules.
........
  r52200 | fred.drake | 2006-10-06 02:03:45 +0200 (Fri, 06 Oct 2006) | 3 lines
  - update links
  - remove Sleepycat name now that they have been bought
........
  r52204 | andrew.kuchling | 2006-10-06 12:41:01 +0200 (Fri, 06 Oct 2006) | 1 line
  Case fix
........
  r52208 | georg.brandl | 2006-10-06 14:46:08 +0200 (Fri, 06 Oct 2006) | 3 lines
  Fix name.
........
  r52211 | andrew.kuchling | 2006-10-06 15:18:26 +0200 (Fri, 06 Oct 2006) | 1 line
  [Bug #1545341] Allow 'classifier' parameter to be a tuple as well as a list.  Will backport.
........
  r52212 | armin.rigo | 2006-10-06 18:33:22 +0200 (Fri, 06 Oct 2006) | 4 lines
  A very minor bug fix: this code looks like it is designed to accept
  any hue value and do the modulo itself, except it doesn't quite do
  it in all cases.  At least, the "cannot get here" comment was wrong.
........
  r52213 | andrew.kuchling | 2006-10-06 20:51:55 +0200 (Fri, 06 Oct 2006) | 1 line
  Comment grammar
........
  r52218 | skip.montanaro | 2006-10-07 13:05:02 +0200 (Sat, 07 Oct 2006) | 6 lines
  Note that the excel_tab class is registered as the "excel-tab" dialect.
  Fixes 1572471.  Make a similar change for the excel class and clean up
  references to the Dialects and Formatting Parameters section in a few
  places.
........
  r52221 | georg.brandl | 2006-10-08 09:11:54 +0200 (Sun, 08 Oct 2006) | 3 lines
  Add missing NEWS entry for rev. 52129.
........
  r52223 | hyeshik.chang | 2006-10-08 15:48:34 +0200 (Sun, 08 Oct 2006) | 3 lines
  Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
  when encoding non-BMP unicode characters.  (Submitted by Ray Chason)
........
  r52227 | ronald.oussoren | 2006-10-08 19:37:58 +0200 (Sun, 08 Oct 2006) | 4 lines
  Add version number to the link to the python documentation in
  /Developer/Documentation/Python, better for users that install multiple versions
  of python.
........
  r52229 | ronald.oussoren | 2006-10-08 19:40:02 +0200 (Sun, 08 Oct 2006) | 2 lines
  Fix for bug #1570284
........
  r52233 | ronald.oussoren | 2006-10-08 19:49:52 +0200 (Sun, 08 Oct 2006) | 6 lines
  MacOSX: distutils changes the values of BASECFLAGS and LDFLAGS when using a
  universal build of python on OSX 10.3 to ensure that those flags can be used
  to compile code (the universal build uses compiler flags that aren't supported
  on 10.3). This patches gives the same treatment to CFLAGS, PY_CFLAGS and
  BLDSHARED.
........
  r52236 | ronald.oussoren | 2006-10-08 19:51:46 +0200 (Sun, 08 Oct 2006) | 5 lines
  MacOSX: The universal build requires that users have the MacOSX10.4u SDK
  installed to build extensions. This patch makes distutils emit a warning when
  the compiler should use an SDK but that SDK is not installed, hopefully reducing
  some confusion.
........
  r52238 | ronald.oussoren | 2006-10-08 20:18:26 +0200 (Sun, 08 Oct 2006) | 3 lines
  MacOSX: add more logic to recognize the correct startup file to patch to the
  shell profile patching post-install script.
........
  r52242 | andrew.kuchling | 2006-10-09 19:10:12 +0200 (Mon, 09 Oct 2006) | 1 line
  Add news item for rev. 52211 change
........
  r52245 | andrew.kuchling | 2006-10-09 20:05:19 +0200 (Mon, 09 Oct 2006) | 1 line
  Fix wording in comment
........
  r52251 | georg.brandl | 2006-10-09 21:03:06 +0200 (Mon, 09 Oct 2006) | 2 lines
  Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
........
  r52255 | barry.warsaw | 2006-10-09 21:43:24 +0200 (Mon, 09 Oct 2006) | 2 lines
  List gc.get_count() in the module docstring.
........
  r52257 | martin.v.loewis | 2006-10-09 22:44:25 +0200 (Mon, 09 Oct 2006) | 1 line
  Bug #1565150: Fix subsecond processing for os.utime on Windows.
........
  r52268 | ronald.oussoren | 2006-10-10 09:55:06 +0200 (Tue, 10 Oct 2006) | 2 lines
  MacOSX: fix permission problem in the generated installer
........
  r52293 | georg.brandl | 2006-10-12 09:38:04 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1575746: fix typo in property() docs.
........
  r52295 | georg.brandl | 2006-10-12 09:57:21 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #813342: Start the IDLE subprocess with -Qnew if the parent
  is started with that option.
........
  r52297 | georg.brandl | 2006-10-12 10:22:53 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1565919: document set types in the Language Reference.
........
  r52299 | georg.brandl | 2006-10-12 11:20:33 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1550524: better heuristics to find correct class definition
  in inspect.findsource().
........
  r52301 | georg.brandl | 2006-10-12 11:47:12 +0200 (Thu, 12 Oct 2006) | 4 lines
  Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
  arguments with the system default encoding just like the write()
  method does, instead of converting it to a raw buffer.
........
  r52303 | georg.brandl | 2006-10-12 13:14:40 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1546628: add a note about urlparse.urljoin() and absolute paths.
........
  r52305 | georg.brandl | 2006-10-12 13:27:59 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1545497: when given an explicit base, int() did ignore NULs
  embedded in the string to convert.
........
  r52307 | georg.brandl | 2006-10-12 13:41:11 +0200 (Thu, 12 Oct 2006) | 3 lines
  Add a note to fpectl docs that it's not built by default
  (bug #1556261).
........
  r52309 | georg.brandl | 2006-10-12 13:46:57 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560114: the Mac filesystem does have accurate information
  about the case of filenames.
........
  r52311 | georg.brandl | 2006-10-12 13:59:27 +0200 (Thu, 12 Oct 2006) | 2 lines
  Small grammar fix, thanks Sjoerd.
........
  r52313 | georg.brandl | 2006-10-12 14:03:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Fix tarfile depending on buggy int('1\0', base) behavior.
........
  r52315 | georg.brandl | 2006-10-12 14:33:07 +0200 (Thu, 12 Oct 2006) | 2 lines
  Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
........
  r52316 | georg.brandl | 2006-10-12 15:08:16 +0200 (Thu, 12 Oct 2006) | 3 lines
  Bug #1560179: speed up posixpath.(dir|base)name
........
  r52327 | brett.cannon | 2006-10-14 08:36:45 +0200 (Sat, 14 Oct 2006) | 3 lines
  Clean up the language of a sentence relating to the connect() function and
  user-defined datatypes.
........
  r52332 | neal.norwitz | 2006-10-14 23:33:38 +0200 (Sat, 14 Oct 2006) | 3 lines
  Update the peephole optimizer to remove more dead code (jumps after returns)
  and inline jumps to returns.
........
  r52333 | martin.v.loewis | 2006-10-15 09:54:40 +0200 (Sun, 15 Oct 2006) | 4 lines
  Patch #1576954: Update VC6 build directory; remove redundant
  files in VC7. Will backport to 2.5.
........
  r52335 | martin.v.loewis | 2006-10-15 10:43:33 +0200 (Sun, 15 Oct 2006) | 1 line
  Patch #1576166: Support os.utime for directories on Windows NT+.
........
  r52336 | martin.v.loewis | 2006-10-15 10:51:22 +0200 (Sun, 15 Oct 2006) | 2 lines
  Patch #1577551: Add ctypes and ET build support for VC6.
  Will backport to 2.5.
........
  r52338 | martin.v.loewis | 2006-10-15 11:35:51 +0200 (Sun, 15 Oct 2006) | 1 line
  Loosen the test for equal time stamps.
........
  r52339 | martin.v.loewis | 2006-10-15 11:43:39 +0200 (Sun, 15 Oct 2006) | 2 lines
  Bug #1567666: Emulate GetFileAttributesExA for Win95.
  Will backport to 2.5.
........
  r52341 | martin.v.loewis | 2006-10-15 13:02:07 +0200 (Sun, 15 Oct 2006) | 2 lines
  Round to int, because some systems support sub-second time stamps in stat, but not in utime.
  Also be consistent with modifying only mtime, not atime.
........
  r52342 | martin.v.loewis | 2006-10-15 13:57:40 +0200 (Sun, 15 Oct 2006) | 2 lines
  Set the eol-style for project files to "CRLF".
........
  r52343 | martin.v.loewis | 2006-10-15 13:59:56 +0200 (Sun, 15 Oct 2006) | 3 lines
  Drop binary property on dsp files, set eol-style
  to CRLF instead.
........
  r52344 | martin.v.loewis | 2006-10-15 14:01:43 +0200 (Sun, 15 Oct 2006) | 2 lines
  Remove binary property, set eol-style to CRLF instead.
........
  r52346 | martin.v.loewis | 2006-10-15 16:30:38 +0200 (Sun, 15 Oct 2006) | 2 lines
  Mention the bdist_msi module. Will backport to 2.5.
........
  r52354 | brett.cannon | 2006-10-16 05:09:52 +0200 (Mon, 16 Oct 2006) | 3 lines
  Fix turtle so that you can launch the demo2 function on its own instead of only
  when the module is launched as a script.
........
  r52356 | martin.v.loewis | 2006-10-17 17:18:06 +0200 (Tue, 17 Oct 2006) | 2 lines
  Patch #1457736: Update VC6 to use current PCbuild settings.
  Will backport to 2.5.
........
  r52360 | martin.v.loewis | 2006-10-17 20:09:55 +0200 (Tue, 17 Oct 2006) | 2 lines
  Remove obsolete file. Will backport.
........
  r52363 | martin.v.loewis | 2006-10-17 20:59:23 +0200 (Tue, 17 Oct 2006) | 4 lines
  Forward-port r52358:
  - Bug #1578513: Cross compilation was broken by a change to configure.
  Repair so that it's back to how it was in 2.4.3.
........
  r52365 | thomas.heller | 2006-10-17 21:30:48 +0200 (Tue, 17 Oct 2006) | 6 lines
  ctypes callback functions only support 'fundamental' result types.
  Check this and raise an error when something else is used - before
  this change ctypes would hang or crash when such a callback was
  called.  This is a partial fix for #1574584.
  Will backport to release25-maint.
........
  r52377 | tim.peters | 2006-10-18 07:06:06 +0200 (Wed, 18 Oct 2006) | 2 lines
  newIobject():  repaired incorrect cast to quiet MSVC warning.
........
  r52378 | tim.peters | 2006-10-18 07:09:12 +0200 (Wed, 18 Oct 2006) | 2 lines
  Whitespace normalization.
........
  r52379 | tim.peters | 2006-10-18 07:10:28 +0200 (Wed, 18 Oct 2006) | 2 lines
  Add missing svn:eol-style to text files.
........
  r52387 | martin.v.loewis | 2006-10-19 12:58:46 +0200 (Thu, 19 Oct 2006) | 3 lines
  Add check for the PyArg_ParseTuple format, and declare
  it if it is supported.
........
  r52388 | martin.v.loewis | 2006-10-19 13:00:37 +0200 (Thu, 19 Oct 2006) | 3 lines
  Fix various minor errors in passing arguments to
  PyArg_ParseTuple.
........
  r52389 | martin.v.loewis | 2006-10-19 18:01:37 +0200 (Thu, 19 Oct 2006) | 2 lines
  Restore CFLAGS after checking for __attribute__
........
  r52390 | andrew.kuchling | 2006-10-19 23:55:55 +0200 (Thu, 19 Oct 2006) | 1 line
  [Bug #1576348] Fix typo in example
........
  r52414 | walter.doerwald | 2006-10-22 10:59:41 +0200 (Sun, 22 Oct 2006) | 2 lines
  Port test___future__ to unittest.
........
  r52415 | ronald.oussoren | 2006-10-22 12:45:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580674: with this patch os.readlink uses the filesystem encoding to
  decode unicode objects and returns an unicode object when the argument is one.
........
  r52416 | martin.v.loewis | 2006-10-22 12:46:18 +0200 (Sun, 22 Oct 2006) | 3 lines
  Patch #1580872: Remove duplicate declaration of PyCallable_Check.
  Will backport to 2.5.
........
  r52418 | martin.v.loewis | 2006-10-22 12:55:15 +0200 (Sun, 22 Oct 2006) | 4 lines
  - Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
    ctypes isn't considered as requiring executable stacks.
  Will backport to 2.5.
........
  r52420 | martin.v.loewis | 2006-10-22 15:45:13 +0200 (Sun, 22 Oct 2006) | 3 lines
  Remove passwd.adjunct.byname from list of maps
  for test_nis. Will backport to 2.5.
........
  r52431 | georg.brandl | 2006-10-24 18:54:16 +0200 (Tue, 24 Oct 2006) | 2 lines
  Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
........
  r52446 | andrew.kuchling | 2006-10-26 21:10:46 +0200 (Thu, 26 Oct 2006) | 1 line
  [Bug #1579796] Wrong syntax for PyDateTime_IMPORT in documentation.  Reported by David Faure.
........
  r52449 | andrew.kuchling | 2006-10-26 21:16:46 +0200 (Thu, 26 Oct 2006) | 1 line
  Typo fix
........
  r52452 | martin.v.loewis | 2006-10-27 08:16:31 +0200 (Fri, 27 Oct 2006) | 3 lines
  Patch #1549049: Rewrite type conversion in structmember.
  Fixes #1545696 and #1566140. Will backport to 2.5.
........
  r52454 | martin.v.loewis | 2006-10-27 08:42:27 +0200 (Fri, 27 Oct 2006) | 2 lines
  Check for values.h. Will backport.
........
  r52456 | martin.v.loewis | 2006-10-27 09:06:52 +0200 (Fri, 27 Oct 2006) | 2 lines
  Get DBL_MAX from float.h not values.h. Will backport.
........
  r52458 | martin.v.loewis | 2006-10-27 09:13:28 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1567274: Support SMTP over TLS.
........
  r52459 | andrew.kuchling | 2006-10-27 13:33:29 +0200 (Fri, 27 Oct 2006) | 1 line
  Set svn:keywords property
........
  r52460 | andrew.kuchling | 2006-10-27 13:36:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Add item
........
  r52461 | andrew.kuchling | 2006-10-27 13:37:01 +0200 (Fri, 27 Oct 2006) | 1 line
  Some wording changes and markup fixes
........
  r52462 | andrew.kuchling | 2006-10-27 14:18:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1585690] Note that line_num was added in Python 2.5
........
  r52464 | andrew.kuchling | 2006-10-27 14:50:38 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1583946] Reword description of server and issuer
........
  r52466 | andrew.kuchling | 2006-10-27 15:06:25 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1562583] Mention the set_reuse_addr() method
........
  r52469 | andrew.kuchling | 2006-10-27 15:22:46 +0200 (Fri, 27 Oct 2006) | 4 lines
  [Bug #1542016] Report PCALL_POP value.  This makes the return value of sys.callstats() match its docstring.
  Backport candidate.  Though it's an API change, this is a pretty obscure
  portion of the API.
........
  r52473 | andrew.kuchling | 2006-10-27 16:53:41 +0200 (Fri, 27 Oct 2006) | 1 line
  Point users to the subprocess module in the docs for os.system, os.spawn*, os.popen2, and the popen2 and commands modules
........
  r52476 | andrew.kuchling | 2006-10-27 18:39:10 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1576241] Let functools.wraps work with built-in functions
........
  r52478 | andrew.kuchling | 2006-10-27 18:55:34 +0200 (Fri, 27 Oct 2006) | 1 line
  [Bug #1575506] The _singlefileMailbox class was using the wrong file object in its flush() method, causing an error
........
  r52480 | andrew.kuchling | 2006-10-27 19:06:16 +0200 (Fri, 27 Oct 2006) | 1 line
  Clarify docstring
........
  r52481 | andrew.kuchling | 2006-10-27 19:11:23 +0200 (Fri, 27 Oct 2006) | 5 lines
  [Patch #1574068 by Scott Dial] urllib and urllib2 were using
  base64.encodestring() for encoding authentication data.
  encodestring() can include newlines for very long input, which
  produced broken HTTP headers.
........
  r52483 | andrew.kuchling | 2006-10-27 20:13:46 +0200 (Fri, 27 Oct 2006) | 1 line
  Check db_setup_debug for a few print statements; change sqlite_setup_debug to False
........
  r52484 | andrew.kuchling | 2006-10-27 20:15:02 +0200 (Fri, 27 Oct 2006) | 1 line
  [Patch #1503717] Tiny patch from Chris AtLee to stop a lengthy line from being printed
........
  r52485 | thomas.heller | 2006-10-27 20:31:36 +0200 (Fri, 27 Oct 2006) | 5 lines
  WindowsError.str should display the windows error code,
  not the posix error code; with test.
  Fixes #1576174.
  Will backport to release25-maint.
........
  r52487 | thomas.heller | 2006-10-27 21:05:53 +0200 (Fri, 27 Oct 2006) | 4 lines
  Modulefinder now handles absolute and relative imports, including
  tests.
  Will backport to release25-maint.
........
  r52488 | georg.brandl | 2006-10-27 22:39:43 +0200 (Fri, 27 Oct 2006) | 2 lines
  Patch #1552024: add decorator support to unparse.py demo script.
........
  r52492 | walter.doerwald | 2006-10-28 12:47:12 +0200 (Sat, 28 Oct 2006) | 2 lines
  Port test_bufio to unittest.
........
  r52493 | georg.brandl | 2006-10-28 15:10:17 +0200 (Sat, 28 Oct 2006) | 6 lines
  Convert test_global, test_scope and test_grammar to unittest.
  I tried to enclose all tests which must be run at the toplevel
  (instead of inside a method) in exec statements.
........
  r52494 | georg.brandl | 2006-10-28 15:11:41 +0200 (Sat, 28 Oct 2006) | 3 lines
  Update outstanding bugs test file.
........
  r52495 | georg.brandl | 2006-10-28 15:51:49 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_math to unittest.
........
  r52496 | georg.brandl | 2006-10-28 15:56:58 +0200 (Sat, 28 Oct 2006) | 3 lines
  Convert test_opcodes to unittest.
........
  r52497 | georg.brandl | 2006-10-28 18:04:04 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix nth() itertool recipe.
........
  r52500 | georg.brandl | 2006-10-28 22:25:09 +0200 (Sat, 28 Oct 2006) | 2 lines
  make test_grammar pass with python -O
........
  r52501 | neal.norwitz | 2006-10-28 23:15:30 +0200 (Sat, 28 Oct 2006) | 6 lines
  Add some asserts.  In sysmodule, I think these were to try to silence
  some warnings from Klokwork.  They verify the assumptions of the format
  of svn version output.
  The assert in the thread module helped debug a problem on HP-UX.
........
  r52502 | neal.norwitz | 2006-10-28 23:16:54 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix warnings with HP's C compiler.  It doesn't recognize that infinite
  loops are, um, infinite.  These conditions should not be able to happen.
  Will backport.
........
  r52503 | neal.norwitz | 2006-10-28 23:17:51 +0200 (Sat, 28 Oct 2006) | 5 lines
  Fix crash in test on HP-UX.  Apparently, it's not possible to delete a lock if
  it's held (even by the current thread).
  Will backport.
........
  r52504 | neal.norwitz | 2006-10-28 23:19:07 +0200 (Sat, 28 Oct 2006) | 6 lines
  Fix bug #1565514, SystemError not raised on too many nested blocks.
  It seems like this should be a different error than SystemError, but
  I don't have any great ideas and SystemError was raised in 2.4 and earlier.
  Will backport.
........
  r52505 | neal.norwitz | 2006-10-28 23:20:12 +0200 (Sat, 28 Oct 2006) | 4 lines
  Prevent crash if alloc of garbage fails.  Found by Typo.pl.
  Will backport.
........
  r52506 | neal.norwitz | 2006-10-28 23:21:00 +0200 (Sat, 28 Oct 2006) | 4 lines
  Don't inline Py_ADDRESS_IN_RANGE with gcc 4+ either.
  Will backport.
........
  r52513 | neal.norwitz | 2006-10-28 23:56:49 +0200 (Sat, 28 Oct 2006) | 2 lines
  Fix test_modulefinder so it doesn't fail when run after test_distutils.
........
  r52514 | neal.norwitz | 2006-10-29 00:12:26 +0200 (Sun, 29 Oct 2006) | 4 lines
  From SF 1557890, fix problem of using wrong type in example.
  Will backport.
........
  r52517 | georg.brandl | 2006-10-29 09:39:22 +0100 (Sun, 29 Oct 2006) | 4 lines
  Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
  fix all codecs file wrappers to work correctly with the "with"
  statement (bug #1586513).
........
  r52519 | georg.brandl | 2006-10-29 09:47:08 +0100 (Sun, 29 Oct 2006) | 3 lines
  Clean up a leftover from old listcomp generation code.
........
  r52520 | georg.brandl | 2006-10-29 09:53:06 +0100 (Sun, 29 Oct 2006) | 4 lines
  Bug #1586448: the compiler module now emits the same bytecode for
  list comprehensions as the builtin compiler, using the LIST_APPEND
  opcode.
........
  r52521 | georg.brandl | 2006-10-29 10:01:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove trailing comma.
........
  r52522 | georg.brandl | 2006-10-29 10:05:04 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1357915: allow all sequence types for shell arguments in
  subprocess.
........
  r52524 | georg.brandl | 2006-10-29 10:16:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Patch #1583880: fix tarfile's problems with long names and posix/
  GNU modes.
........
  r52526 | georg.brandl | 2006-10-29 10:18:00 +0100 (Sun, 29 Oct 2006) | 3 lines
  Test assert if __debug__ is true.
........
  r52527 | georg.brandl | 2006-10-29 10:32:16 +0100 (Sun, 29 Oct 2006) | 2 lines
  Fix the new EncodedFile test to work with big endian platforms.
........
  r52529 | georg.brandl | 2006-10-29 15:39:09 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
........
  r52532 | georg.brandl | 2006-10-29 19:01:08 +0100 (Sun, 29 Oct 2006) | 2 lines
  Bug #1586773: extend hashlib docstring.
........
  r52534 | neal.norwitz | 2006-10-29 19:30:10 +0100 (Sun, 29 Oct 2006) | 4 lines
  Update comments, remove commented out code.
  Move assembler structure next to assembler code to make it easier to
  move it to a separate file.
........
  r52535 | georg.brandl | 2006-10-29 19:31:42 +0100 (Sun, 29 Oct 2006) | 3 lines
  Bug #1576657: when setting a KeyError for a tuple key, make sure that
  the tuple isn't used as the "exception arguments tuple".
........
  r52537 | georg.brandl | 2006-10-29 20:13:40 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_mmap to unittest.
........
  r52538 | georg.brandl | 2006-10-29 20:20:45 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_poll to unittest.
........
  r52539 | georg.brandl | 2006-10-29 20:24:43 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_nis to unittest.
........
  r52540 | georg.brandl | 2006-10-29 20:35:03 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_types to unittest.
........
  r52541 | georg.brandl | 2006-10-29 20:51:16 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cookie to unittest.
........
  r52542 | georg.brandl | 2006-10-29 21:09:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_cgi to unittest.
........
  r52543 | georg.brandl | 2006-10-29 21:24:01 +0100 (Sun, 29 Oct 2006) | 3 lines
  Completely convert test_httplib to unittest.
........
  r52544 | georg.brandl | 2006-10-29 21:28:26 +0100 (Sun, 29 Oct 2006) | 2 lines
  Convert test_MimeWriter to unittest.
........
  r52545 | georg.brandl | 2006-10-29 21:31:17 +0100 (Sun, 29 Oct 2006) | 3 lines
  Convert test_openpty to unittest.
........
  r52546 | georg.brandl | 2006-10-29 21:35:12 +0100 (Sun, 29 Oct 2006) | 3 lines
  Remove leftover test output file.
........
  r52547 | georg.brandl | 2006-10-29 22:54:18 +0100 (Sun, 29 Oct 2006) | 3 lines
  Move the check for openpty to the beginning.
........
  r52548 | walter.doerwald | 2006-10-29 23:06:28 +0100 (Sun, 29 Oct 2006) | 2 lines
  Add tests for basic argument errors.
........
  r52549 | walter.doerwald | 2006-10-30 00:02:27 +0100 (Mon, 30 Oct 2006) | 3 lines
  Add tests for incremental codecs with an errors
  argument.
........
  r52550 | neal.norwitz | 2006-10-30 00:39:03 +0100 (Mon, 30 Oct 2006) | 1 line
  Fix refleak
........
  r52552 | neal.norwitz | 2006-10-30 00:58:36 +0100 (Mon, 30 Oct 2006) | 1 line
  I'm assuming this is correct, it fixes the tests so they pass again
........
  r52555 | vinay.sajip | 2006-10-31 18:32:37 +0100 (Tue, 31 Oct 2006) | 1 line
  Change to improve speed of _fixupChildren
........
  r52556 | vinay.sajip | 2006-10-31 18:34:31 +0100 (Tue, 31 Oct 2006) | 1 line
  Added relativeCreated to Formatter doc (has been in the system for a long time - was unaccountably left out of the docs and not noticed until now).
........
  r52588 | thomas.heller | 2006-11-02 20:48:24 +0100 (Thu, 02 Nov 2006) | 5 lines
  Replace the XXX marker in the 'Arrays and pointers' reference manual
  section with a link to the tutorial sections.
  Will backport to release25-maint.
........
  r52592 | thomas.heller | 2006-11-02 21:22:29 +0100 (Thu, 02 Nov 2006) | 6 lines
  Fix a code example by adding a missing import.
  Fixes #1557890.
  Will backport to release25-maint.
........
  r52598 | tim.peters | 2006-11-03 03:32:46 +0100 (Fri, 03 Nov 2006) | 2 lines
  Whitespace normalization.
........
  r52619 | martin.v.loewis | 2006-11-04 19:14:06 +0100 (Sat, 04 Nov 2006) | 4 lines
  - Patch #1060577: Extract list of RPM files from spec file in
    bdist_rpm
  Will backport to 2.5.
........
  r52621 | neal.norwitz | 2006-11-04 20:25:22 +0100 (Sat, 04 Nov 2006) | 4 lines
  Bug #1588287: fix invalid assertion for `1,2` in debug builds.
  Will backport
........
  r52630 | andrew.kuchling | 2006-11-05 22:04:37 +0100 (Sun, 05 Nov 2006) | 1 line
  Update link
........
  r52631 | skip.montanaro | 2006-11-06 15:34:52 +0100 (Mon, 06 Nov 2006) | 1 line
  note that user can control directory location even if default dir is used
........
  r52644 | ronald.oussoren | 2006-11-07 16:53:38 +0100 (Tue, 07 Nov 2006) | 2 lines
  Fix a number of typos in strings and comments (sf#1589070)
........
  r52647 | ronald.oussoren | 2006-11-07 17:00:34 +0100 (Tue, 07 Nov 2006) | 2 lines
  Whitespace changes to make the source more compliant with PEP8 (SF#1589070)
........
  r52651 | thomas.heller | 2006-11-07 19:01:18 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix markup.
  Will backport to release25-maint.
........
  r52653 | thomas.heller | 2006-11-07 19:20:47 +0100 (Tue, 07 Nov 2006) | 3 lines
  Fix grammatical error as well.
  Will backport to release25-maint.
........
  r52657 | andrew.kuchling | 2006-11-07 21:39:16 +0100 (Tue, 07 Nov 2006) | 1 line
  Add missing word
........
  r52662 | martin.v.loewis | 2006-11-08 07:46:37 +0100 (Wed, 08 Nov 2006) | 4 lines
  Correctly forward exception in instance_contains().
  Fixes #1591996. Patch contributed by Neal Norwitz.
  Will backport.
........
  r52664 | martin.v.loewis | 2006-11-08 07:48:36 +0100 (Wed, 08 Nov 2006) | 2 lines
  News entry for 52662.
........
  r52665 | martin.v.loewis | 2006-11-08 08:35:55 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1351744: Add askyesnocancel helper for tkMessageBox.
........
  r52666 | georg.brandl | 2006-11-08 08:45:59 +0100 (Wed, 08 Nov 2006) | 2 lines
  Patch #1592072: fix docs for return value of PyErr_CheckSignals.
........
  r52668 | georg.brandl | 2006-11-08 11:04:29 +0100 (Wed, 08 Nov 2006) | 3 lines
  Bug #1592533: rename variable in heapq doc example, to avoid shadowing
  "sorted".
........
  r52671 | andrew.kuchling | 2006-11-08 14:35:34 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on the functional module
........
  r52672 | andrew.kuchling | 2006-11-08 15:14:30 +0100 (Wed, 08 Nov 2006) | 1 line
  Add section on operator module; make a few edits
........
  r52673 | andrew.kuchling | 2006-11-08 15:24:03 +0100 (Wed, 08 Nov 2006) | 1 line
  Add table of contents; this required fixing a few headings.  Some more smalle edits.
........
  r52674 | andrew.kuchling | 2006-11-08 15:30:14 +0100 (Wed, 08 Nov 2006) | 1 line
  More edits
........
  r52686 | martin.v.loewis | 2006-11-09 12:06:03 +0100 (Thu, 09 Nov 2006) | 3 lines
  Patch #838546: Make terminal become controlling in pty.fork().
  Will backport to 2.5.
........
  r52688 | martin.v.loewis | 2006-11-09 12:27:32 +0100 (Thu, 09 Nov 2006) | 2 lines
  Patch #1592250: Add elidge argument to Tkinter.Text.search.
........
  r52690 | andrew.kuchling | 2006-11-09 14:27:07 +0100 (Thu, 09 Nov 2006) | 7 lines
  [Bug #1569790] mailbox.Maildir.get_folder() loses factory information
  Both the Maildir and MH classes had this bug; the patch fixes both classes
  and adds a test.
  Will backport to 25-maint.
........
  r52692 | andrew.kuchling | 2006-11-09 14:51:14 +0100 (Thu, 09 Nov 2006) | 1 line
  [Patch #1514544 by David Watson] use fsync() to ensure data is really on disk
........
  r52695 | walter.doerwald | 2006-11-09 17:23:26 +0100 (Thu, 09 Nov 2006) | 2 lines
  Replace C++ comment with C comment (fixes SF bug #1593525).
........
  r52712 | andrew.kuchling | 2006-11-09 22:16:46 +0100 (Thu, 09 Nov 2006) | 11 lines
  [Patch #1514543] mailbox (Maildir): avoid losing messages on name clash
  Two changes:
  Where possible, use link()/remove() to move files into a directory; this
  makes it easier to avoid overwriting an existing file.
  Use _create_carefully() to create files in tmp/, which uses O_EXCL.
  Backport candidate.
........
  r52716 | phillip.eby | 2006-11-10 01:33:36 +0100 (Fri, 10 Nov 2006) | 4 lines
  Fix SF#1566719: not creating site-packages (or other target directory) when
  installing .egg-info for a project that contains no modules or packages,
  while using --root (as in bdist_rpm).
........
  r52719 | andrew.kuchling | 2006-11-10 14:14:01 +0100 (Fri, 10 Nov 2006) | 1 line
  Reword entry
........
  r52725 | andrew.kuchling | 2006-11-10 15:39:01 +0100 (Fri, 10 Nov 2006) | 1 line
  [Feature request #1542920] Link to wsgi.org
........
  r52731 | georg.brandl | 2006-11-11 19:29:11 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594742: wrong word in stringobject doc.
........
  r52733 | georg.brandl | 2006-11-11 19:32:47 +0100 (Sat, 11 Nov 2006) | 2 lines
  Bug #1594758: wording improvement for dict.update() docs.
........
  r52736 | martin.v.loewis | 2006-11-12 11:32:47 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1065257: Support passing open files as body in
  HTTPConnection.request().
........
  r52737 | martin.v.loewis | 2006-11-12 11:41:39 +0100 (Sun, 12 Nov 2006) | 2 lines
  Patch #1355023: support whence argument for GzipFile.seek.
........
  r52738 | martin.v.loewis | 2006-11-12 19:24:26 +0100 (Sun, 12 Nov 2006) | 2 lines
  Bug #1067760: Deprecate passing floats to file.seek.
........
  r52739 | martin.v.loewis | 2006-11-12 19:48:13 +0100 (Sun, 12 Nov 2006) | 3 lines
  Patch #1359217: Ignore 2xx response before 150 response.
  Will backport to 2.5.
........
  r52741 | martin.v.loewis | 2006-11-12 19:56:03 +0100 (Sun, 12 Nov 2006) | 4 lines
  Patch #1360200: Use unmangled_version RPM spec field to deal with
  file name mangling.
  Will backport to 2.5.
........
  r52753 | walter.doerwald | 2006-11-15 17:23:46 +0100 (Wed, 15 Nov 2006) | 2 lines
  Fix typo.
........
  r52754 | georg.brandl | 2006-11-15 18:42:03 +0100 (Wed, 15 Nov 2006) | 2 lines
  Bug #1594809: add a note to README regarding PYTHONPATH and make install.
........
  r52762 | georg.brandl | 2006-11-16 16:05:14 +0100 (Thu, 16 Nov 2006) | 2 lines
  Bug #1597576: mention that the new base64 api has been introduced in py2.4.
........
  r52764 | georg.brandl | 2006-11-16 17:50:59 +0100 (Thu, 16 Nov 2006) | 3 lines
  Bug #1597824: return the registered function from atexit.register()
  to facilitate usage as a decorator.
........
  r52765 | georg.brandl | 2006-11-16 18:08:45 +0100 (Thu, 16 Nov 2006) | 4 lines
  Bug #1588217: don't parse "= " as a soft line break in binascii's
  a2b_qp() function, instead leave it in the string as quopri.decode()
  does.
........
  r52776 | andrew.kuchling | 2006-11-17 14:30:25 +0100 (Fri, 17 Nov 2006) | 17 lines
  Remove file-locking in MH.pack() method.
  This change looks massive but it's mostly a re-indenting after
  removing some try...finally blocks.
  Also adds a test case that does a pack() while the mailbox is locked; this
  test would have turned up bugs in the original code on some platforms.
  In both nmh and GNU Mailutils' implementation of MH-format mailboxes,
  no locking is done of individual message files when renaming them.
  The original mailbox.py code did do locking, which meant that message
  files had to be opened.  This code was buggy on certain platforms
  (found through reading the code); there were code paths that closed
  the file object and then called _unlock_file() on it.
  Will backport to 25-maint once I see how the buildbots react to this patch.
........
  r52780 | martin.v.loewis | 2006-11-18 19:00:23 +0100 (Sat, 18 Nov 2006) | 5 lines
  Patch #1538878: Don't make tkSimpleDialog dialogs transient if
  the parent window is withdrawn. This mirrors what dialog.tcl
  does.
  Will backport to 2.5.
........
  r52782 | martin.v.loewis | 2006-11-18 19:05:35 +0100 (Sat, 18 Nov 2006) | 4 lines
  Patch #1594554: Always close a tkSimpleDialog on ok(), even
  if an exception occurs.
  Will backport to 2.5.
........
  r52784 | martin.v.loewis | 2006-11-18 19:42:11 +0100 (Sat, 18 Nov 2006) | 3 lines
  Patch #1472877: Fix Tix subwidget name resolution.
  Will backport to 2.5.
........
  r52786 | andrew.kuchling | 2006-11-18 23:17:33 +0100 (Sat, 18 Nov 2006) | 1 line
  Expand checking in test_sha
........
  r52787 | georg.brandl | 2006-11-19 09:48:30 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch [ 1586791 ] better error msgs for some TypeErrors
........
  r52788 | martin.v.loewis | 2006-11-19 11:41:41 +0100 (Sun, 19 Nov 2006) | 4 lines
  Make cStringIO.truncate raise IOError for negative
  arguments (even for -1). Fixes the last bit of
  #1359365.
........
  r52789 | andrew.kuchling | 2006-11-19 19:40:01 +0100 (Sun, 19 Nov 2006) | 1 line
  Add a test case of data w/ bytes > 127
........
  r52790 | martin.v.loewis | 2006-11-19 19:51:54 +0100 (Sun, 19 Nov 2006) | 3 lines
  Patch #1070046: Marshal new-style objects like InstanceType
  in xmlrpclib.
........
  r52792 | neal.norwitz | 2006-11-19 22:26:53 +0100 (Sun, 19 Nov 2006) | 4 lines
  Speed up function calls into the math module by using METH_O.
  There should be no functional changes. However, the error msgs are
  slightly different.  Also verified that the module dict is not NULL on init.
........
  r52794 | george.yoshida | 2006-11-20 03:24:48 +0100 (Mon, 20 Nov 2006) | 2 lines
  markup fix
........
  r52795 | georg.brandl | 2006-11-20 08:12:58 +0100 (Mon, 20 Nov 2006) | 3 lines
  Further markup fix.
........
  r52800 | andrew.kuchling | 2006-11-20 14:39:37 +0100 (Mon, 20 Nov 2006) | 2 lines
  Jython compatibility fix: if uu.decode() opened its output file, be sure to
  close it.
........
  r52811 | neal.norwitz | 2006-11-21 06:26:22 +0100 (Tue, 21 Nov 2006) | 9 lines
  Bug #1599782: Fix segfault on bsddb.db.DB().type().
  The problem is that _DB_get_type() can't be called without the GIL
  because it calls a bunch of PyErr_* APIs when an error occurs.
  There were no other cases in this file that it was called without the GIL.
  Removing the BEGIN/END THREAD around _DB_get_type() made everything work.
  Will backport.
........
  r52814 | neal.norwitz | 2006-11-21 06:51:51 +0100 (Tue, 21 Nov 2006) | 1 line
  Oops, convert tabs to spaces
........
  r52815 | neal.norwitz | 2006-11-21 07:23:44 +0100 (Tue, 21 Nov 2006) | 1 line
  Fix SF #1599879, socket.gethostname should ref getfqdn directly.
........
  r52817 | martin.v.loewis | 2006-11-21 19:20:25 +0100 (Tue, 21 Nov 2006) | 4 lines
  Conditionalize definition of _CRT_SECURE_NO_DEPRECATE
  and _CRT_NONSTDC_NO_DEPRECATE.
  Will backport.
........
  r52821 | martin.v.loewis | 2006-11-22 09:50:02 +0100 (Wed, 22 Nov 2006) | 4 lines
  Patch #1362975: Rework CodeContext indentation algorithm to
  avoid hard-coding pixel widths. Also make the text's scrollbar
  a child of the text frame, not the top widget.
........
  r52826 | walter.doerwald | 2006-11-23 06:03:56 +0100 (Thu, 23 Nov 2006) | 3 lines
  Change decode() so that it works with a buffer (i.e. unicode(..., 'utf-8-sig'))
  SF bug #1601501.
........
  r52833 | georg.brandl | 2006-11-23 10:55:07 +0100 (Thu, 23 Nov 2006) | 2 lines
  Bug #1601630: little improvement to getopt docs
........
  r52835 | michael.hudson | 2006-11-23 14:54:04 +0100 (Thu, 23 Nov 2006) | 3 lines
  a test for an error condition not covered by existing tests
  (noticed this when writing the equivalent code for pypy)
........
  r52839 | raymond.hettinger | 2006-11-23 22:06:03 +0100 (Thu, 23 Nov 2006) | 1 line
  Fix and/add typo
........
  r52840 | raymond.hettinger | 2006-11-23 22:35:19 +0100 (Thu, 23 Nov 2006) | 1 line
  ... and the number of the counting shall be three.
........
  r52841 | thomas.heller | 2006-11-24 19:45:39 +0100 (Fri, 24 Nov 2006) | 1 line
  Fix bug #1598620: A ctypes structure cannot contain itself.
........
  r52843 | martin.v.loewis | 2006-11-25 16:39:19 +0100 (Sat, 25 Nov 2006) | 3 lines
  Disable _XOPEN_SOURCE on NetBSD 1.x.
  Will backport to 2.5
........
  r52845 | georg.brandl | 2006-11-26 20:27:47 +0100 (Sun, 26 Nov 2006) | 2 lines
  Bug #1603321: make pstats.Stats accept Unicode file paths.
........
  r52850 | georg.brandl | 2006-11-27 19:46:21 +0100 (Mon, 27 Nov 2006) | 2 lines
  Bug #1603789: grammatical error in Tkinter docs.
........
  r52855 | thomas.heller | 2006-11-28 21:21:54 +0100 (Tue, 28 Nov 2006) | 7 lines
  Fix #1563807: _ctypes built on AIX fails with ld ffi error.
  The contents of ffi_darwin.c must be compiled unless __APPLE__ is
  defined and __ppc__ is not.
  Will backport.
........
  r52862 | armin.rigo | 2006-11-29 22:59:22 +0100 (Wed, 29 Nov 2006) | 3 lines
  Forgot a case where the locals can now be a general mapping
  instead of just a dictionary.  (backporting...)
........
  r52872 | guido.van.rossum | 2006-11-30 20:23:13 +0100 (Thu, 30 Nov 2006) | 2 lines
  Update version.
........
  r52890 | walter.doerwald | 2006-12-01 17:59:47 +0100 (Fri, 01 Dec 2006) | 3 lines
  Move xdrlib tests from the module into a separate test script,
  port the tests to unittest and add a few new tests.
........
  r52900 | raymond.hettinger | 2006-12-02 03:00:39 +0100 (Sat, 02 Dec 2006) | 1 line
  Add name to credits (for untokenize).
........
  r52905 | martin.v.loewis | 2006-12-03 10:54:46 +0100 (Sun, 03 Dec 2006) | 2 lines
  Move IDLE news into NEWS.txt.
........
  r52906 | martin.v.loewis | 2006-12-03 12:23:45 +0100 (Sun, 03 Dec 2006) | 4 lines
  Patch #1544279: Improve thread-safety of the socket module by moving
  the sock_addr_t storage out of the socket object.
  Will backport to 2.5.
........
  r52908 | martin.v.loewis | 2006-12-03 13:01:53 +0100 (Sun, 03 Dec 2006) | 3 lines
  Patch #1371075: Make ConfigParser accept optional dict type
  for ordering, sorting, etc.
........
  r52910 | matthias.klose | 2006-12-03 18:16:41 +0100 (Sun, 03 Dec 2006) | 2 lines
  - Fix build failure on kfreebsd and on the hurd.
........
  r52915 | george.yoshida | 2006-12-04 12:41:54 +0100 (Mon, 04 Dec 2006) | 2 lines
  fix a versionchanged tag
........
  r52917 | george.yoshida | 2006-12-05 06:39:50 +0100 (Tue, 05 Dec 2006) | 3 lines
  Fix pickle doc typo
  Patch #1608758
........
  r52938 | georg.brandl | 2006-12-06 23:21:18 +0100 (Wed, 06 Dec 2006) | 2 lines
  Patch #1610437: fix a tarfile bug with long filename headers.
........
  r52945 | brett.cannon | 2006-12-07 00:38:48 +0100 (Thu, 07 Dec 2006) | 3 lines
  Fix a bad assumption that all objects assigned to '__loader__' on a module
  will have a '_files' attribute.
........
  r52951 | georg.brandl | 2006-12-07 10:30:06 +0100 (Thu, 07 Dec 2006) | 3 lines
  RFE #1592899: mention string.maketrans() in docs for str.translate,
  remove reference to the old regex module in the former's doc.
........
  r52962 | raymond.hettinger | 2006-12-08 04:17:18 +0100 (Fri, 08 Dec 2006) | 1 line
  Eliminate two redundant calls to PyObject_Hash().
........
  r52963 | raymond.hettinger | 2006-12-08 05:24:33 +0100 (Fri, 08 Dec 2006) | 3 lines
  Port Armin's fix for a dict resize vulnerability (svn revision 46589, sf bug 1456209).
........
  r52964 | raymond.hettinger | 2006-12-08 05:57:50 +0100 (Fri, 08 Dec 2006) | 4 lines
  Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to setting a KeyError (svn revision 52535, sf bug
  1576657).
........
  r52966 | raymond.hettinger | 2006-12-08 18:35:25 +0100 (Fri, 08 Dec 2006) | 2 lines
  Add test for SF bug 1576657
........
  r52970 | georg.brandl | 2006-12-08 21:46:11 +0100 (Fri, 08 Dec 2006) | 3 lines
  #1577756: svnversion doesn't react to LANG=C, use LC_ALL=C to force
  English output.
........
  r52972 | georg.brandl | 2006-12-09 10:08:29 +0100 (Sat, 09 Dec 2006) | 3 lines
  Patch #1608267: fix a race condition in os.makedirs() is the directory
  to be created is already there.
........
  r52975 | matthias.klose | 2006-12-09 13:15:27 +0100 (Sat, 09 Dec 2006) | 2 lines
  - Fix the build of the library reference in info format.
........
  r52994 | neal.norwitz | 2006-12-11 02:01:06 +0100 (Mon, 11 Dec 2006) | 1 line
  Fix a typo
........
  r52996 | georg.brandl | 2006-12-11 08:56:33 +0100 (Mon, 11 Dec 2006) | 2 lines
  Move errno imports back to individual functions.
........
  r52998 | vinay.sajip | 2006-12-11 15:07:16 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by Jeremy Katz (SF #1609407)
........
  r53000 | vinay.sajip | 2006-12-11 15:26:23 +0100 (Mon, 11 Dec 2006) | 1 line
  Patch by "cuppatea" (SF #1503765)
........
											 
										 
										
											2006-12-13 04:49:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C long int from an int object or any object that has an __index__
  
						 
					
						
							
								
									
										
										
										
											2011-10-23 20:47:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   method . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   On  overflow ,  return  - 1  and  set  * overflow  to  1  or  - 1  depending  on  the  sign  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   the  result .   Otherwise  * overflow  is  0. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   For  other  errors  ( e . g . ,  TypeError ) ,  return  - 1  and  set  an  error  condition . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   In  this  case  * overflow  will  be  0. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long  
						 
					
						
							
								
									
										
										
										
											2007-12-04 22:10:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsLongAndOverflow ( PyObject  * vv ,  int  * overflow )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* This version by Tim Peters */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  x ,  prev ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  do_decref  =  0 ;  /* if PyNumber_Index was called */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * overflow  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) _PyNumber_Index ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do_decref  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if SIZEOF_LONG < SIZEOF_VOID_P 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        intptr_t  tmp  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  ( long ) tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( res  ! =  tmp )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * overflow  =  tmp  <  0  ?  - 1  :  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            prev  =  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ( x  > >  PyLong_SHIFT )  ! =  prev )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * overflow  =  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  exit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Haven't lost any bits, but casting to long requires extra
 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        *  care  ( see  comment  above ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( x  < =  ( unsigned  long ) LONG_MAX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res  =  ( long ) x  *  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  if  ( sign  <  0  & &  x  = =  PY_ABS_LONG_MIN )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res  =  LONG_MIN ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * overflow  =  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* res is already set to -1 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  exit : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( do_decref )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  res ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C long int from an int object or any object that has an __index__
  
						 
					
						
							
								
									
										
										
										
											2011-10-23 20:47:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   method .   Return  - 1  and  set  an  error  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long  
						 
					
						
							
								
									
										
										
										
											2007-12-04 22:10:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsLong ( PyObject  * obj )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long  result  =  PyLong_AsLongAndOverflow ( obj ,  & overflow ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( overflow )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* XXX: could be cute and give a different
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           message  for  overflow  = =  - 1  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " Python int too large to convert to C long " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-12-04 22:10:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C int from an int object or any object that has an __index__
  
						 
					
						
							
								
									
										
										
										
											2013-01-15 01:12:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   method .   Return  - 1  and  set  an  error  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
									
										
										
										
											2023-08-24 23:55:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsInt ( PyObject  * obj )  
						 
					
						
							
								
									
										
										
										
											2013-01-15 01:12:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long  result  =  PyLong_AsLongAndOverflow ( obj ,  & overflow ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( overflow  | |  result  >  INT_MAX  | |  result  <  INT_MIN )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* XXX: could be cute and give a different
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           message  for  overflow  = =  - 1  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " Python int too large to convert to C int " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( int ) result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a Py_ssize_t from an int object.
  
						 
					
						
							
								
									
										
											 
										
											
												Merge current trunk into p3yk. This includes the PyNumber_Index API change,
which unfortunately means the errors from the bytes type change somewhat:
bytes([300]) still raises a ValueError, but bytes([10**100]) now raises a
TypeError (either that, or bytes(1.0) also raises a ValueError --
PyNumber_AsSsize_t() can only raise one type of exception.)
Merged revisions 51188-51433 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r51189 | kurt.kaiser | 2006-08-10 19:11:09 +0200 (Thu, 10 Aug 2006) | 4 lines
  Retrieval of previous shell command was not always preserving indentation
  since 1.2a1) Patch 1528468 Tal Einat.
........
  r51190 | guido.van.rossum | 2006-08-10 19:41:07 +0200 (Thu, 10 Aug 2006) | 3 lines
  Chris McDonough's patch to defend against certain DoS attacks on FieldStorage.
  SF bug #1112549.
........
  r51191 | guido.van.rossum | 2006-08-10 19:42:50 +0200 (Thu, 10 Aug 2006) | 2 lines
  News item for SF bug 1112549.
........
  r51192 | guido.van.rossum | 2006-08-10 20:09:25 +0200 (Thu, 10 Aug 2006) | 2 lines
  Fix title -- it's rc1, not beta3.
........
  r51194 | martin.v.loewis | 2006-08-10 21:04:00 +0200 (Thu, 10 Aug 2006) | 3 lines
  Update dangling references to the 3.2 database to
  mention that this is UCD 4.1 now.
........
  r51195 | tim.peters | 2006-08-11 00:45:34 +0200 (Fri, 11 Aug 2006) | 6 lines
  Followup to bug #1069160.
  PyThreadState_SetAsyncExc():  internal correctness changes wrt
  refcount safety and deadlock avoidance.  Also added a basic test
  case (relying on ctypes) and repaired the docs.
........
  r51196 | tim.peters | 2006-08-11 00:48:45 +0200 (Fri, 11 Aug 2006) | 2 lines
  Whitespace normalization.
........
  r51197 | tim.peters | 2006-08-11 01:22:13 +0200 (Fri, 11 Aug 2006) | 5 lines
  Whitespace normalization broke test_cgi, because a line
  of quoted test data relied on preserving a single trailing
  blank.  Changed the string from raw to regular, and forced
  in the trailing blank via an explicit \x20 escape.
........
  r51198 | tim.peters | 2006-08-11 02:49:01 +0200 (Fri, 11 Aug 2006) | 10 lines
  test_PyThreadState_SetAsyncExc():  This is failing on some
  64-bit boxes.  I have no idea what the ctypes docs mean
  by "integers", and blind-guessing here that it intended to
  mean the signed C "int" type, in which case perhaps I can
  repair this by feeding the thread id argument to type
  ctypes.c_long().
  Also made the worker thread daemonic, so it doesn't hang
  Python shutdown if the test continues to fail.
........
  r51199 | tim.peters | 2006-08-11 05:49:10 +0200 (Fri, 11 Aug 2006) | 6 lines
  force_test_exit():  This has been completely ineffective
  at stopping test_signal from hanging forever on the Tru64
  buildbot.  That could be because there's no such thing as
  signal.SIGALARM.  Changed to the idiotic (but standard)
  signal.SIGALRM instead, and added some more debug output.
........
  r51202 | neal.norwitz | 2006-08-11 08:09:41 +0200 (Fri, 11 Aug 2006) | 6 lines
  Fix the failures on cygwin (2006-08-10 fixed the actual locking issue).
  The first hunk changes the colon to an ! like other Windows variants.
  We need to always wait on the child so the lock gets released and
  no other tests fail.  This is the try/finally in the second hunk.
........
  r51205 | georg.brandl | 2006-08-11 09:15:38 +0200 (Fri, 11 Aug 2006) | 3 lines
  Add Chris McDonough (latest cgi.py patch)
........
  r51206 | georg.brandl | 2006-08-11 09:26:10 +0200 (Fri, 11 Aug 2006) | 3 lines
  logging's atexit hook now runs even if the rest of the module has
  already been cleaned up.
........
  r51212 | thomas.wouters | 2006-08-11 17:02:39 +0200 (Fri, 11 Aug 2006) | 4 lines
  Add ignore of *.pyc and *.pyo to Lib/xml/etree/.
........
  r51215 | thomas.heller | 2006-08-11 21:55:35 +0200 (Fri, 11 Aug 2006) | 7 lines
  When a ctypes C callback function is called, zero out the result
  storage before converting the result to C data.  See the comment in
  the code for details.
  Provide a better context for errors when the conversion of a callback
  function's result cannot be converted.
........
  r51218 | neal.norwitz | 2006-08-12 03:43:40 +0200 (Sat, 12 Aug 2006) | 6 lines
  Klocwork made another run and found a bunch more problems.
  This is the first batch of fixes that should be easy to verify based on context.
  This fixes problem numbers: 220 (ast), 323-324 (symtable),
  321-322 (structseq), 215 (array), 210 (hotshot), 182 (codecs), 209 (etree).
........
  r51219 | neal.norwitz | 2006-08-12 03:45:47 +0200 (Sat, 12 Aug 2006) | 9 lines
  Even though _Py_Mangle() isn't truly public anyone can call it and
  there was no verification that privateobj was a PyString.  If it wasn't
  a string, this could have allowed a NULL pointer to creep in below and crash.
  I wonder if this should be PyString_CheckExact?  Must identifiers be strings
  or can they be subclasses?
  Klocwork #275
........
  r51220 | neal.norwitz | 2006-08-12 03:46:42 +0200 (Sat, 12 Aug 2006) | 5 lines
  It's highly unlikely, though possible for PyEval_Get*() to return NULLs.
  So be safe and do an XINCREF.
  Klocwork # 221-222.
........
  r51221 | neal.norwitz | 2006-08-12 03:47:59 +0200 (Sat, 12 Aug 2006) | 7 lines
  This code is actually not used unless WITHOUT_COMPLEX is defined.
  However, there was no error checking that PyFloat_FromDouble returned
  a valid pointer.  I believe this change is correct as it seemed
  to follow other code in the area.
  Klocwork # 292.
........
  r51222 | neal.norwitz | 2006-08-12 03:49:12 +0200 (Sat, 12 Aug 2006) | 5 lines
  Handle NULL nodes while parsing.  I'm not entirely sure this is correct.
  There might be something else that needs to be done to setup the error.
  Klocwork #295.
........
  r51223 | neal.norwitz | 2006-08-12 03:50:38 +0200 (Sat, 12 Aug 2006) | 6 lines
  If _stat_float_times is false, we will try to INCREF ival which could be NULL.
  Return early in that case.  The caller checks for PyErr_Occurred so this
  should be ok.
  Klocwork #297
........
  r51224 | neal.norwitz | 2006-08-12 03:51:12 +0200 (Sat, 12 Aug 2006) | 3 lines
  Move the assert which checks for a NULL pointer first.
  Klocwork #274.
........
  r51225 | neal.norwitz | 2006-08-12 03:53:28 +0200 (Sat, 12 Aug 2006) | 5 lines
  Try to handle a malloc failure.  I'm not entirely sure this is correct.
  There might be something else we need to do to handle the exception.
  Klocwork # 212-213
........
  r51226 | neal.norwitz | 2006-08-12 03:57:47 +0200 (Sat, 12 Aug 2006) | 6 lines
  I'm not sure why this code allocates this string for the error message.
  I think it would be better to always use snprintf and have the format
  limit the size of the name appropriately (like %.200s).
  Klocwork #340
........
  r51227 | neal.norwitz | 2006-08-12 04:06:34 +0200 (Sat, 12 Aug 2006) | 3 lines
  Check returned pointer is valid.
  Klocwork #233
........
  r51228 | neal.norwitz | 2006-08-12 04:12:30 +0200 (Sat, 12 Aug 2006) | 1 line
  Whoops, how did that get in there. :-)  Revert all the parts of 51227 that were not supposed to go it.  Only Modules/_ctypes/cfields.c was supposed to be changed
........
  r51229 | neal.norwitz | 2006-08-12 04:33:36 +0200 (Sat, 12 Aug 2006) | 4 lines
  Don't deref v if it's NULL.
  Klocwork #214
........
  r51230 | neal.norwitz | 2006-08-12 05:16:54 +0200 (Sat, 12 Aug 2006) | 5 lines
  Check return of PyMem_MALLOC (garbage) is non-NULL.
  Check seq in both portions of if/else.
  Klocwork #289-290.
........
  r51231 | neal.norwitz | 2006-08-12 05:17:41 +0200 (Sat, 12 Aug 2006) | 4 lines
  PyModule_GetDict() can fail, produce fatal errors if this happens on startup.
  Klocwork #298-299.
........
  r51232 | neal.norwitz | 2006-08-12 05:18:50 +0200 (Sat, 12 Aug 2006) | 5 lines
  Verify verdat which is returned from malloc is not NULL.
  Ensure we don't pass NULL to free.
  Klocwork #306 (at least the first part, checking malloc)
........
  r51233 | tim.peters | 2006-08-12 06:42:47 +0200 (Sat, 12 Aug 2006) | 35 lines
  test_signal:  Signal handling on the Tru64 buildbot
  appears to be utterly insane.  Plug some theoretical
  insecurities in the test script:
  - Verify that the SIGALRM handler was actually installed.
  - Don't call alarm() before the handler is installed.
  - Move everything that can fail inside the try/finally,
    so the test cleans up after itself more often.
  - Try sending all the expected signals in
    force_test_exit(), not just SIGALRM.  Since that was
    fixed to actually send SIGALRM (instead of invisibly
    dying with an AttributeError), we've seen that sending
    SIGALRM alone does not stop this from hanging.
  - Move the "kill the child" business into the finally
    clause, so the child doesn't survive test failure
    to send SIGALRM to other tests later (there are also
    baffling SIGALRM-related failures in test_socket).
  - Cancel the alarm in the finally clause -- if the
    test dies early, we again don't want SIGALRM showing
    up to confuse a later test.
  Alas, this still relies on timing luck wrt the spawned
  script that sends the test signals, but it's hard to see
  how waiting for seconds can so often be so unlucky.
  test_threadedsignals:  curiously, this test never fails
  on Tru64, but doesn't normally signal SIGALRM.  Anyway,
  fixed an obvious (but probably inconsequential) logic
  error.
........
  r51234 | tim.peters | 2006-08-12 07:17:41 +0200 (Sat, 12 Aug 2006) | 8 lines
  Ah, fudge.  One of the prints here actually "shouldn't be"
  protected by "if verbose:", which caused the test to fail on
  all non-Windows boxes.
  Note that I deliberately didn't convert this to unittest yet,
  because I expect it would be even harder to debug this on Tru64
  after conversion.
........
  r51235 | georg.brandl | 2006-08-12 10:32:02 +0200 (Sat, 12 Aug 2006) | 3 lines
  Repair logging test spew caused by rev. 51206.
........
  r51236 | neal.norwitz | 2006-08-12 19:03:09 +0200 (Sat, 12 Aug 2006) | 8 lines
  Patch #1538606, Patch to fix __index__() clipping.
  I modified this patch some by fixing style, some error checking, and adding
  XXX comments.  This patch requires review and some changes are to be expected.
  I'm checking in now to get the greatest possible review and establish a
  baseline for moving forward.  I don't want this to hold up release if possible.
........
  r51238 | neal.norwitz | 2006-08-12 20:44:06 +0200 (Sat, 12 Aug 2006) | 10 lines
  Fix a couple of bugs exposed by the new __index__ code.  The 64-bit buildbots
  were failing due to inappropriate clipping of numbers larger than 2**31
  with new-style classes. (typeobject.c)  In reviewing the code for classic
  classes, there were 2 problems.  Any negative value return could be returned.
  Always return -1 if there was an error.  Also make the checks similar
  with the new-style classes.  I believe this is correct for 32 and 64 bit
  boxes, including Windows64.
  Add a test of classic classes too.
........
  r51240 | neal.norwitz | 2006-08-13 02:20:49 +0200 (Sun, 13 Aug 2006) | 1 line
  SF bug #1539336, distutils example code missing
........
  r51245 | neal.norwitz | 2006-08-13 20:10:10 +0200 (Sun, 13 Aug 2006) | 6 lines
  Move/copy assert for tstate != NULL before first use.
  Verify that PyEval_Get{Globals,Locals} returned valid pointers.
  Klocwork 231-232
........
  r51246 | neal.norwitz | 2006-08-13 20:10:28 +0200 (Sun, 13 Aug 2006) | 5 lines
  Handle a whole lot of failures from PyString_FromInternedString().
  Should fix most of Klocwork 234-272.
........
  r51247 | neal.norwitz | 2006-08-13 20:10:47 +0200 (Sun, 13 Aug 2006) | 8 lines
  cpathname could be NULL if it was longer than MAXPATHLEN.  Don't try
  to write the .pyc to NULL.
  Check results of PyList_GetItem() and PyModule_GetDict() are not NULL.
  Klocwork 282, 283, 285
........
  r51248 | neal.norwitz | 2006-08-13 20:11:08 +0200 (Sun, 13 Aug 2006) | 6 lines
  Fix segfault when doing string formatting on subclasses of long if
  __oct__, __hex__ don't return a string.
  Klocwork 308
........
  r51250 | neal.norwitz | 2006-08-13 20:11:27 +0200 (Sun, 13 Aug 2006) | 5 lines
  Check return result of PyModule_GetDict().
  Fix a bunch of refleaks in the init of the module.  This would only be found
  when running python -v.
........
  r51251 | neal.norwitz | 2006-08-13 20:11:43 +0200 (Sun, 13 Aug 2006) | 5 lines
  Handle malloc and fopen failures more gracefully.
  Klocwork 180-181
........
  r51252 | neal.norwitz | 2006-08-13 20:12:03 +0200 (Sun, 13 Aug 2006) | 7 lines
  It's very unlikely, though possible that source is not a string.  Verify
  that PyString_AsString() returns a valid pointer.  (The problem can
  arise when zlib.decompress doesn't return a string.)
  Klocwork 346
........
  r51253 | neal.norwitz | 2006-08-13 20:12:26 +0200 (Sun, 13 Aug 2006) | 5 lines
  Handle failures from lookup.
  Klocwork 341-342
........
  r51254 | neal.norwitz | 2006-08-13 20:12:45 +0200 (Sun, 13 Aug 2006) | 6 lines
  Handle failure from PyModule_GetDict() (Klocwork 208).
  Fix a bunch of refleaks in the init of the module.  This would only be found
  when running python -v.
........
  r51255 | neal.norwitz | 2006-08-13 20:13:02 +0200 (Sun, 13 Aug 2006) | 4 lines
  Really address the issue of where to place the assert for leftblock.
  (Followup of Klocwork 274)
........
  r51256 | neal.norwitz | 2006-08-13 20:13:36 +0200 (Sun, 13 Aug 2006) | 4 lines
  Handle malloc failure.
  Klocwork 281
........
  r51258 | neal.norwitz | 2006-08-13 20:40:39 +0200 (Sun, 13 Aug 2006) | 4 lines
  Handle alloca failures.
  Klocwork 225-228
........
  r51259 | neal.norwitz | 2006-08-13 20:41:15 +0200 (Sun, 13 Aug 2006) | 1 line
  Get rid of compiler warning
........
  r51261 | neal.norwitz | 2006-08-14 02:51:15 +0200 (Mon, 14 Aug 2006) | 1 line
  Ignore pgen.exe and kill_python.exe for cygwin
........
  r51262 | neal.norwitz | 2006-08-14 02:59:03 +0200 (Mon, 14 Aug 2006) | 4 lines
  Can't return NULL from a void function.  If there is a memory error,
  about the best we can do is call PyErr_WriteUnraisable and go on.
  We won't be able to do the call below either, so verify delstr is valid.
........
  r51263 | neal.norwitz | 2006-08-14 03:49:54 +0200 (Mon, 14 Aug 2006) | 1 line
  Update purify doc some.
........
  r51264 | thomas.heller | 2006-08-14 09:13:05 +0200 (Mon, 14 Aug 2006) | 2 lines
  Remove unused, buggy test function.
  Fixes klockwork issue #207.
........
  r51265 | thomas.heller | 2006-08-14 09:14:09 +0200 (Mon, 14 Aug 2006) | 2 lines
  Check for NULL return value from new_CArgObject().
  Fixes klockwork issues #183, #184, #185.
........
  r51266 | thomas.heller | 2006-08-14 09:50:14 +0200 (Mon, 14 Aug 2006) | 2 lines
  Check for NULL return value of GenericCData_new().
  Fixes klockwork issues #188, #189.
........
  r51274 | thomas.heller | 2006-08-14 12:02:24 +0200 (Mon, 14 Aug 2006) | 2 lines
  Revert the change that tries to zero out a closure's result storage
  area because the size if unknown in source/callproc.c.
........
  r51276 | marc-andre.lemburg | 2006-08-14 12:55:19 +0200 (Mon, 14 Aug 2006) | 11 lines
  Slightly revised version of patch #1538956:
  Replace UnicodeDecodeErrors raised during == and !=
  compares of Unicode and other objects with a new
  UnicodeWarning.
  All other comparisons continue to raise exceptions.
  Exceptions other than UnicodeDecodeErrors are also left
  untouched.
........
  r51277 | thomas.heller | 2006-08-14 13:17:48 +0200 (Mon, 14 Aug 2006) | 13 lines
  Apply the patch #1532975 plus ideas from the patch #1533481.
  ctypes instances no longer have the internal and undocumented
  '_as_parameter_' attribute which was used to adapt them to foreign
  function calls; this mechanism is replaced by a function pointer in
  the type's stgdict.
  In the 'from_param' class methods, try the _as_parameter_ attribute if
  other conversions are not possible.
  This makes the documented _as_parameter_ mechanism work as intended.
  Change the ctypes version number to 1.0.1.
........
  r51278 | marc-andre.lemburg | 2006-08-14 13:44:34 +0200 (Mon, 14 Aug 2006) | 3 lines
  Readd NEWS items that were accidentally removed by r51276.
........
  r51279 | georg.brandl | 2006-08-14 14:36:06 +0200 (Mon, 14 Aug 2006) | 3 lines
  Improve markup in PyUnicode_RichCompare.
........
  r51280 | marc-andre.lemburg | 2006-08-14 14:57:27 +0200 (Mon, 14 Aug 2006) | 3 lines
  Correct an accidentally removed previous patch.
........
  r51281 | thomas.heller | 2006-08-14 18:17:41 +0200 (Mon, 14 Aug 2006) | 3 lines
  Patch #1536908: Add support for AMD64 / OpenBSD.
  Remove the -no-stack-protector compiler flag for OpenBSD
  as it has been reported to be unneeded.
........
  r51282 | thomas.heller | 2006-08-14 18:20:04 +0200 (Mon, 14 Aug 2006) | 1 line
  News item for rev 51281.
........
  r51283 | georg.brandl | 2006-08-14 22:25:39 +0200 (Mon, 14 Aug 2006) | 3 lines
  Fix refleak introduced in rev. 51248.
........
  r51284 | georg.brandl | 2006-08-14 23:34:08 +0200 (Mon, 14 Aug 2006) | 5 lines
  Make tabnanny recognize IndentationErrors raised by tokenize.
  Add a test to test_inspect to make sure indented source
  is recognized correctly. (fixes #1224621)
........
  r51285 | georg.brandl | 2006-08-14 23:42:55 +0200 (Mon, 14 Aug 2006) | 3 lines
  Patch #1535500: fix segfault in BZ2File.writelines and make sure it
  raises the correct exceptions.
........
  r51287 | georg.brandl | 2006-08-14 23:45:32 +0200 (Mon, 14 Aug 2006) | 3 lines
  Add an additional test: BZ2File write methods should raise IOError
  when file is read-only.
........
  r51289 | georg.brandl | 2006-08-14 23:55:28 +0200 (Mon, 14 Aug 2006) | 3 lines
  Patch #1536071: trace.py should now find the full module name of a
  file correctly even on Windows.
........
  r51290 | georg.brandl | 2006-08-15 00:01:24 +0200 (Tue, 15 Aug 2006) | 3 lines
  Cookie.py shouldn't "bogusly" use string._idmap.
........
  r51291 | georg.brandl | 2006-08-15 00:10:24 +0200 (Tue, 15 Aug 2006) | 3 lines
  Patch #1511317: don't crash on invalid hostname info
........
  r51292 | tim.peters | 2006-08-15 02:25:04 +0200 (Tue, 15 Aug 2006) | 2 lines
  Whitespace normalization.
........
  r51293 | neal.norwitz | 2006-08-15 06:14:57 +0200 (Tue, 15 Aug 2006) | 3 lines
  Georg fixed one of my bugs, so I'll repay him with 2 NEWS entries.
  Now we're even. :-)
........
  r51295 | neal.norwitz | 2006-08-15 06:58:28 +0200 (Tue, 15 Aug 2006) | 8 lines
  Fix the test for SocketServer so it should pass on cygwin and not fail
  sporadically on other platforms.  This is really a band-aid that doesn't
  fix the underlying issue in SocketServer.  It's not clear if it's worth
  it to fix SocketServer, however, I opened a bug to track it:
  	http://python.org/sf/1540386
........
  r51296 | neal.norwitz | 2006-08-15 06:59:30 +0200 (Tue, 15 Aug 2006) | 3 lines
  Update the docstring to use a version a little newer than 1999.  This was
  taken from a Debian patch.  Should we update the version for each release?
........
  r51298 | neal.norwitz | 2006-08-15 08:29:03 +0200 (Tue, 15 Aug 2006) | 2 lines
  Subclasses of int/long are allowed to define an __index__.
........
  r51300 | thomas.heller | 2006-08-15 15:07:21 +0200 (Tue, 15 Aug 2006) | 1 line
  Check for NULL return value from new_CArgObject calls.
........
  r51303 | kurt.kaiser | 2006-08-16 05:15:26 +0200 (Wed, 16 Aug 2006) | 2 lines
  The 'with' statement is now a Code Context block opener
........
  r51304 | anthony.baxter | 2006-08-16 05:42:26 +0200 (Wed, 16 Aug 2006) | 1 line
  preparing for 2.5c1
........
  r51305 | anthony.baxter | 2006-08-16 05:58:37 +0200 (Wed, 16 Aug 2006) | 1 line
  preparing for 2.5c1 - no, really this time
........
  r51306 | kurt.kaiser | 2006-08-16 07:01:42 +0200 (Wed, 16 Aug 2006) | 9 lines
  Patch #1540892: site.py Quitter() class attempts to close sys.stdin
  before raising SystemExit, allowing IDLE to honor quit() and exit().
  M    Lib/site.py
  M    Lib/idlelib/PyShell.py
  M    Lib/idlelib/CREDITS.txt
  M    Lib/idlelib/NEWS.txt
  M    Misc/NEWS
........
  r51307 | ka-ping.yee | 2006-08-16 09:02:50 +0200 (Wed, 16 Aug 2006) | 6 lines
  Update code and tests to support the 'bytes_le' attribute (for
  little-endian byte order on Windows), and to work around clocks
  with low resolution yielding duplicate UUIDs.
  Anthony Baxter has approved this change.
........
  r51308 | kurt.kaiser | 2006-08-16 09:04:17 +0200 (Wed, 16 Aug 2006) | 2 lines
  Get quit() and exit() to work cleanly when not using subprocess.
........
  r51309 | marc-andre.lemburg | 2006-08-16 10:13:26 +0200 (Wed, 16 Aug 2006) | 2 lines
  Revert to having static version numbers again.
........
  r51310 | martin.v.loewis | 2006-08-16 14:55:10 +0200 (Wed, 16 Aug 2006) | 2 lines
  Build _hashlib on Windows. Build OpenSSL with masm assembler code.
  Fixes #1535502.
........
  r51311 | thomas.heller | 2006-08-16 15:03:11 +0200 (Wed, 16 Aug 2006) | 6 lines
  Add commented assert statements to check that the result of
  PyObject_stgdict() and PyType_stgdict() calls are non-NULL before
  dereferencing the result.  Hopefully this fixes what klocwork is
  complaining about.
  Fix a few other nits as well.
........
  r51312 | anthony.baxter | 2006-08-16 15:08:25 +0200 (Wed, 16 Aug 2006) | 1 line
  news entry for 51307
........
  r51313 | andrew.kuchling | 2006-08-16 15:22:20 +0200 (Wed, 16 Aug 2006) | 1 line
  Add UnicodeWarning
........
  r51314 | andrew.kuchling | 2006-08-16 15:41:52 +0200 (Wed, 16 Aug 2006) | 1 line
  Bump document version to 1.0; remove pystone paragraph
........
  r51315 | andrew.kuchling | 2006-08-16 15:51:32 +0200 (Wed, 16 Aug 2006) | 1 line
  Link to docs; remove an XXX comment
........
  r51316 | martin.v.loewis | 2006-08-16 15:58:51 +0200 (Wed, 16 Aug 2006) | 1 line
  Make cl build step compile-only (/c). Remove libs from source list.
........
  r51317 | thomas.heller | 2006-08-16 16:07:44 +0200 (Wed, 16 Aug 2006) | 5 lines
  The __repr__ method of a NULL py_object does no longer raise an
  exception.  Remove a stray '?' character from the exception text
  when the value is retrieved of such an object.
  Includes tests.
........
  r51318 | andrew.kuchling | 2006-08-16 16:18:23 +0200 (Wed, 16 Aug 2006) | 1 line
  Update bug/patch counts
........
  r51319 | andrew.kuchling | 2006-08-16 16:21:14 +0200 (Wed, 16 Aug 2006) | 1 line
  Wording/typo fixes
........
  r51320 | thomas.heller | 2006-08-16 17:10:12 +0200 (Wed, 16 Aug 2006) | 9 lines
  Remove the special casing of Py_None when converting the return value
  of the Python part of a callback function to C.  If it cannot be
  converted, call PyErr_WriteUnraisable with the exception we got.
  Before, arbitrary data has been passed to the calling C code in this
  case.
  (I'm not really sure the NEWS entry is understandable, but I cannot
  find better words)
........
  r51321 | marc-andre.lemburg | 2006-08-16 18:11:01 +0200 (Wed, 16 Aug 2006) | 2 lines
  Add NEWS item mentioning the reverted distutils version number patch.
........
  r51322 | fredrik.lundh | 2006-08-16 18:47:07 +0200 (Wed, 16 Aug 2006) | 5 lines
  SF#1534630
  ignore data that arrives before the opening start tag
........
  r51324 | andrew.kuchling | 2006-08-16 19:11:18 +0200 (Wed, 16 Aug 2006) | 1 line
  Grammar fix
........
  r51328 | thomas.heller | 2006-08-16 20:02:11 +0200 (Wed, 16 Aug 2006) | 12 lines
  Tutorial:
      Clarify somewhat how parameters are passed to functions
      (especially explain what integer means).
      Correct the table - Python integers and longs can both be used.
      Further clarification to the table comparing ctypes types, Python
      types, and C types.
  Reference:
      Replace integer by C ``int`` where it makes sense.
........
  r51329 | kurt.kaiser | 2006-08-16 23:45:59 +0200 (Wed, 16 Aug 2006) | 8 lines
  File menu hotkeys: there were three 'p' assignments.  Reassign the
  'Save Copy As' and 'Print' hotkeys to 'y' and 't'.  Change the
  Shell menu hotkey from 's' to 'l'.
  M    Bindings.py
  M    PyShell.py
  M    NEWS.txt
........
  r51330 | neil.schemenauer | 2006-08-17 01:38:05 +0200 (Thu, 17 Aug 2006) | 3 lines
  Fix a bug in the ``compiler`` package that caused invalid code to be
  generated for generator expressions.
........
  r51342 | martin.v.loewis | 2006-08-17 21:19:32 +0200 (Thu, 17 Aug 2006) | 3 lines
  Merge 51340 and 51341 from 2.5 branch:
  Leave tk build directory to restore original path.
  Invoke debug mk1mf.pl after running Configure.
........
  r51354 | martin.v.loewis | 2006-08-18 05:47:18 +0200 (Fri, 18 Aug 2006) | 3 lines
  Bug #1541863: uuid.uuid1 failed to generate unique identifiers
  on systems with low clock resolution.
........
  r51355 | neal.norwitz | 2006-08-18 05:57:54 +0200 (Fri, 18 Aug 2006) | 1 line
  Add template for 2.6 on HEAD
........
  r51356 | neal.norwitz | 2006-08-18 06:01:38 +0200 (Fri, 18 Aug 2006) | 1 line
  More post-release wibble
........
  r51357 | neal.norwitz | 2006-08-18 06:58:33 +0200 (Fri, 18 Aug 2006) | 1 line
  Try to get Windows bots working again
........
  r51358 | neal.norwitz | 2006-08-18 07:10:00 +0200 (Fri, 18 Aug 2006) | 1 line
  Try to get Windows bots working again. Take 2
........
  r51359 | neal.norwitz | 2006-08-18 07:39:20 +0200 (Fri, 18 Aug 2006) | 1 line
  Try to get Unix bots install working again.
........
  r51360 | neal.norwitz | 2006-08-18 07:41:46 +0200 (Fri, 18 Aug 2006) | 1 line
  Set version to 2.6a0, seems more consistent.
........
  r51362 | neal.norwitz | 2006-08-18 08:14:52 +0200 (Fri, 18 Aug 2006) | 1 line
  More version wibble
........
  r51364 | georg.brandl | 2006-08-18 09:27:59 +0200 (Fri, 18 Aug 2006) | 4 lines
  Bug #1541682: Fix example in the "Refcount details" API docs.
  Additionally, remove a faulty example showing PySequence_SetItem applied
  to a newly created list object and add notes that this isn't a good idea.
........
  r51366 | anthony.baxter | 2006-08-18 09:29:02 +0200 (Fri, 18 Aug 2006) | 3 lines
  Updating IDLE's version number to match Python's (as per python-dev
  discussion).
........
  r51367 | anthony.baxter | 2006-08-18 09:30:07 +0200 (Fri, 18 Aug 2006) | 1 line
  RPM specfile updates
........
  r51368 | georg.brandl | 2006-08-18 09:35:47 +0200 (Fri, 18 Aug 2006) | 2 lines
  Typo in tp_clear docs.
........
  r51378 | andrew.kuchling | 2006-08-18 15:57:13 +0200 (Fri, 18 Aug 2006) | 1 line
  Minor edits
........
  r51379 | thomas.heller | 2006-08-18 16:38:46 +0200 (Fri, 18 Aug 2006) | 6 lines
  Add asserts to check for 'impossible' NULL values, with comments.
  In one place where I'n not 1000% sure about the non-NULL, raise
  a RuntimeError for safety.
  This should fix the klocwork issues that Neal sent me.  If so,
  it should be applied to the release25-maint branch also.
........
  r51400 | neal.norwitz | 2006-08-19 06:22:33 +0200 (Sat, 19 Aug 2006) | 5 lines
  Move initialization of interned strings to before allocating the
  object so we don't leak op.  (Fixes an earlier patch to this code)
  Klockwork #350
........
  r51401 | neal.norwitz | 2006-08-19 06:23:04 +0200 (Sat, 19 Aug 2006) | 4 lines
  Move assert to after NULL check, otherwise we deref NULL in the assert.
  Klocwork #307
........
  r51402 | neal.norwitz | 2006-08-19 06:25:29 +0200 (Sat, 19 Aug 2006) | 2 lines
  SF #1542693: Remove semi-colon at end of PyImport_ImportModuleEx macro
........
  r51403 | neal.norwitz | 2006-08-19 06:28:55 +0200 (Sat, 19 Aug 2006) | 6 lines
  Move initialization to after the asserts for non-NULL values.
  Klocwork 286-287.
  (I'm not backporting this, but if someone wants to, feel free.)
........
  r51404 | neal.norwitz | 2006-08-19 06:52:03 +0200 (Sat, 19 Aug 2006) | 6 lines
  Handle PyString_FromInternedString() failing (unlikely, but possible).
  Klocwork #325
  (I'm not backporting this, but if someone wants to, feel free.)
........
  r51416 | georg.brandl | 2006-08-20 15:15:39 +0200 (Sun, 20 Aug 2006) | 2 lines
  Patch #1542948: fix urllib2 header casing issue. With new test.
........
  r51428 | jeremy.hylton | 2006-08-21 18:19:37 +0200 (Mon, 21 Aug 2006) | 3 lines
  Move peephole optimizer to separate file.
........
  r51429 | jeremy.hylton | 2006-08-21 18:20:29 +0200 (Mon, 21 Aug 2006) | 2 lines
  Move peephole optimizer to separate file.  (Forgot .h in previous checkin.)
........
  r51432 | neal.norwitz | 2006-08-21 19:59:46 +0200 (Mon, 21 Aug 2006) | 5 lines
  Fix bug #1543303, tarfile adds padding that breaks gunzip.
  Patch # 1543897.
  Will backport to 2.5
........
  r51433 | neal.norwitz | 2006-08-21 20:01:30 +0200 (Mon, 21 Aug 2006) | 2 lines
  Add assert to make Klocwork happy (#276)
........
											 
										 
										
											2006-08-21 19:07:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Returns  - 1  and  sets  an  error  condition  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Py_ssize_t  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsSsize_t ( PyObject  * vv )  {  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_t  x ,  prev ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError ,  " an integer is required " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        prev  =  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ( x  > >  PyLong_SHIFT )  ! =  prev ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Haven't lost any bits, but casting to a signed type requires
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  extra  care  ( see  comment  above ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( x  < =  ( size_t ) PY_SSIZE_T_MAX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( Py_ssize_t ) x  *  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( sign  <  0  & &  x  = =  PY_ABS_SSIZE_T_MIN )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PY_SSIZE_T_MIN ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* else overflow */ 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  overflow : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " Python int too large to convert to C ssize_t " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C unsigned long int from an int object.
  
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Returns  - 1  and  sets  an  error  condition  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								unsigned  long  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsUnsignedLong ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  x ,  prev ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( unsigned  long ) - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError ,  " an integer is required " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( unsigned  long ) - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNonNegativeCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if SIZEOF_LONG < SIZEOF_VOID_P 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        intptr_t  tmp  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unsigned  long  res  =  ( unsigned  long ) tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( res  ! =  tmp )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( v ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " can't convert negative value to unsigned int " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long )  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        prev  =  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ( x  > >  PyLong_SHIFT )  ! =  prev )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            goto  overflow ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								overflow :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " Python int too large to convert  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " to C unsigned long " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( unsigned  long )  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C size_t from an int object. Returns (size_t)-1 and sets
  
						 
					
						
							
								
									
										
										
										
											2011-09-12 16:22:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   an  error  condition  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								size_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_AsSize_t ( PyObject  * vv )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_t  x ,  prev ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( size_t )  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError ,  " an integer is required " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( size_t ) - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNonNegativeCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( v ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   " can't convert negative value to size_t " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( size_t )  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        prev  =  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ( x  > >  PyLong_SHIFT )  ! =  prev )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " Python int too large to convert to C size_t " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-12 16:22:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  ( size_t )  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  x ; 
							 
						 
					
						
							
								
									
										
										
										
											1997-01-03 17:14:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C unsigned long int from an int object, ignoring the high bits.
  
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Returns  - 1  and  sets  an  error  condition  if  an  error  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  unsigned  long  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_AsUnsignedLongMask ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL  | |  ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( unsigned  long )  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( unsigned  long ) _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  x  *  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								unsigned  long  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsUnsignedLongMask ( PyObject  * op )  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * lo ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  val ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( op  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long ) - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( op ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_AsUnsignedLongMask ( op ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    lo  =  ( PyLongObject  * ) _PyNumber_Index ( op ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( lo  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    val  =  _PyLong_AsUnsignedLongMask ( ( PyObject  * ) lo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( lo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  val ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-01-31 15:52:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Sign ( PyObject  * vv )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-31 15:52:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( v  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( v ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_CompactSign ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-31 15:52:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-15 14:33:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bit_length_digit ( digit  x )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2022-04-20 19:26:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // digit can be larger than unsigned long, but only PyLong_SHIFT bits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // of it will be ever used.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static_assert ( PyLong_SHIFT  < =  sizeof ( unsigned  long )  *  8 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  " digit is larger than unsigned long " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-15 14:33:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  _Py_bit_length ( ( unsigned  long ) x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-01-28 20:37:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								size_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_NumBits ( PyObject  * vv )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  result  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-08 20:34:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  msd_bits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( v  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( v ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ndigits  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ndigits  = =  0  | |  v - > long_value . ob_digit [ ndigits  -  1 ]  ! =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ndigits  >  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  msd  =  v - > long_value . ob_digit [ ndigits  -  1 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-07 09:26:18 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ( size_t ) ( ndigits  -  1 )  >  SIZE_MAX  /  ( size_t ) PyLong_SHIFT ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            goto  Overflow ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-06 18:50:02 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        result  =  ( size_t ) ( ndigits  -  1 )  *  ( size_t ) PyLong_SHIFT ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-15 14:33:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        msd_bits  =  bit_length_digit ( msd ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-08 20:34:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( SIZE_MAX  -  msd_bits  <  result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  + =  msd_bits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-28 20:37:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Overflow : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyErr_SetString ( PyExc_OverflowError ,  " int has too many bits  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " to express in a platform size_t " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( size_t ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-28 20:37:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromByteArray ( const  unsigned  char *  bytes ,  size_t  n ,  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      int  little_endian ,  int  is_signed ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  unsigned  char *  pstartbyte ;     /* LSB of bytes */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  incr ;                            /* direction to move pstartbyte */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  unsigned  char *  pendbyte ;       /* MSB of bytes */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  numsignificantbytes ;          /* number of bytes that matter */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits ;                  /* number of Python int digits */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject *  v ;                     /* result */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  idigit  =  0 ;               /* next free index in v->long_value.ob_digit */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( n  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pstartbyte  =  bytes ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pendbyte  =  bytes  +  n  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        incr  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pstartbyte  =  bytes  +  n  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pendbyte  =  bytes ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        incr  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( is_signed ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        is_signed  =  * pendbyte  > =  0x80 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Compute numsignificantbytes.  This consists of finding the most
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-16 11:05:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       significant  byte .   Leading  0  bytes  are  insignificant  if  the  number 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       is  positive ,  and  leading  0xff  bytes  if  negative .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  unsigned  char *  p  =  pendbyte ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  int  pincr  =  - incr ;   /* search MSB to LSB */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 01:11:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  unsigned  char  insignificant  =  is_signed  ?  0xff  :  0x00 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  n ;  + + i ,  p  + =  pincr )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 01:11:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( * p  ! =  insignificant ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        numsignificantbytes  =  n  -  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           actually  has  2  significant  bytes .   OTOH ,  0xff0001  = = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           - 0x00ffff ,  so  we  wouldn ' t  * need *  to  bump  it  there ;  but  we 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           do  for  0xffff  =  - 0x0001 .   To  be  safe  without  bothering  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           check  every  case ,  bump  it  regardless .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( is_signed  & &  numsignificantbytes  <  n ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + numsignificantbytes ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* How many Python int digits do we need?  We have
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       8 * numsignificantbytes  bits ,  and  each  Python  int  digit  has 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       PyLong_SHIFT  bits ,  so  it ' s  the  ceiling  of  the  quotient .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* catch overflow before it happens */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( numsignificantbytes  >  ( PY_SSIZE_T_MAX  -  PyLong_SHIFT )  /  8 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " byte array too long to convert to int " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ndigits  =  ( numsignificantbytes  *  8  +  PyLong_SHIFT  -  1 )  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( ndigits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Copy the bits over.  The tricky parts are computing 2's-comp on
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  fly  for  signed  numbers ,  and  dealing  with  the  mismatch  between 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       8 - bit  bytes  and  ( probably )  15 - bit  Python  digits . */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        twodigits  carry  =  1 ;                     /* for 2's-comp calculation */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        twodigits  accum  =  0 ;                     /* sliding register */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unsigned  int  accumbits  =  0 ;              /* number of bits in accum */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  unsigned  char *  p  =  pstartbyte ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  numsignificantbytes ;  + + i ,  p  + =  incr )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  thisbyte  =  * p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Compute correction for 2's comp, if needed. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( is_signed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                thisbyte  =  ( 0xff  ^  thisbyte )  +  carry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  =  thisbyte  > >  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                thisbyte  & =  0xff ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Because we're going LSB to MSB, thisbyte is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               more  significant  than  what ' s  already  in  accum , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               so  needs  to  be  prepended  to  accum .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-06 10:42:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            accum  | =  thisbyte  < <  accumbits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            accumbits  + =  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( accumbits  > =  PyLong_SHIFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                /* There's enough to fill a Python digit. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( idigit  <  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                v - > long_value . ob_digit [ idigit ]  =  ( digit ) ( accum  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                + + idigit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                accum  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                accumbits  - =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( accumbits  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( accumbits  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( accumbits )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( idigit  <  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            v - > long_value . ob_digit [ idigit ]  =  ( digit ) accum ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            + + idigit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  sign  =  is_signed  ?  - 1 :  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( idigit  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _PyLong_SetSignAndDigitCount ( v ,  sign ,  idigit ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-16 08:06:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) maybe_small_long ( long_normalize ( v ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_AsByteArray ( PyLongObject *  v ,  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    unsigned  char *  bytes ,  size_t  n , 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    int  little_endian ,  int  is_signed , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    int  with_exceptions ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ;                /* index into v->long_value.ob_digit */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits ;          /* number of digits */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    twodigits  accum ;             /* sliding register */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  int  accumbits ;      /* # bits in accum */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  do_twos_comp ;            /* store 2's-comp?  is_signed and v < 0 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry ;                 /* for computing 2's-comp */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  j ;                    /* # bytes filled */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  char *  p ;            /* pointer to next byte in bytes */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  pincr ;                   /* direction to move p */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( v  ! =  NULL  & &  PyLong_Check ( v ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ndigits  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( v ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! is_signed )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( with_exceptions )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                " can't convert negative int to unsigned " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do_twos_comp  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do_twos_comp  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  =  bytes ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pincr  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  =  bytes  +  n  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pincr  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Copy over all the Python digits.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       It ' s  crucial  that  every  Python  digit  except  for  the  MSD  contribute 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       exactly  PyLong_SHIFT  bits  to  the  total ,  so  first  assert  that  the  int  is 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       normalized . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       NOTE :  PyLong_AsNativeBytes ( )  assumes  that  this  function  will  fill  in  ' n ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       bytes  even  if  it  eventually  fails  to  convert  the  whole  number .  Make  sure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       you  account  for  that  if  you  are  changing  this  algorithm  to  return  without 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       doing  that . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ndigits  = =  0  | |  v - > long_value . ob_digit [ ndigits  -  1 ]  ! =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    j  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    accum  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    accumbits  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    carry  =  do_twos_comp  ?  1  :  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  ndigits ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  thisdigit  =  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( do_twos_comp )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            thisdigit  =  ( thisdigit  ^  PyLong_MASK )  +  carry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            carry  =  thisdigit  > >  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            thisdigit  & =  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Because we're going LSB to MSB, thisdigit is more
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           significant  than  what ' s  already  in  accum ,  so  needs  to  be 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           prepended  to  accum .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        accum  | =  ( twodigits ) thisdigit  < <  accumbits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* The most-significant digit may be (probably is) at least
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           partly  empty .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( i  = =  ndigits  -  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Count # of sign bits -- they needn't be stored,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *  although  for  signed  conversion  we  need  later  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *  make  sure  at  least  one  sign  bit  gets  stored .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            digit  s  =  do_twos_comp  ?  thisdigit  ^  PyLong_MASK  :  thisdigit ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            while  ( s  ! =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                s  > > =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                accumbits + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            accumbits  + =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Store as many bytes as possible. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( accumbits  > =  8 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( j  > =  n ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p  =  ( unsigned  char ) ( accum  &  0xff ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p  + =  pincr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            accumbits  - =  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            accum  > > =  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Store the straggler (if any). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( accumbits  <  8 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( carry  = =  0 ) ;   /* else do_twos_comp and *every* digit was 0 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( accumbits  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( j  > =  n ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( do_twos_comp )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Fill leading bits of the byte with sign bits
 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               ( appropriately  pretending  that  the  int  had  an 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               infinite  supply  of  sign  bits ) .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            accum  | =  ( ~ ( twodigits ) 0 )  < <  accumbits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * p  =  ( unsigned  char ) ( accum  &  0xff ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p  + =  pincr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( j  = =  n  & &  n  >  0  & &  is_signed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* The main loop filled the byte array exactly, so the code
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           just  above  didn ' t  get  to  ensure  there ' s  a  sign  bit ,  and  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           loop  below  wouldn ' t  add  one  either .   Make  sure  a  sign  bit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           exists .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unsigned  char  msb  =  * ( p  -  pincr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        int  sign_bit_set  =  msb  > =  0x80 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( accumbits  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( sign_bit_set  = =  do_twos_comp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Fill remaining bytes with copies of the sign bit. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unsigned  char  signbyte  =  do_twos_comp  ?  0xffU  :  0U ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  (  ;  j  <  n ;  + + j ,  p  + =  pincr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p  =  signbyte ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Overflow : 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( with_exceptions )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError ,  " int too big to convert " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-06-11 21:23:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Refactored out for readability, not reuse
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  inline  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_fits_in_n_bits ( Py_ssize_t  v ,  Py_ssize_t  n )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( n  > =  ( Py_ssize_t ) sizeof ( Py_ssize_t )  *  8 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // If all bits above n are the same, we fit.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // (Use n-1 if we require the sign bit to be consistent.)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  v_extended  =  v  > >  ( ( int ) n  -  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  v_extended  = =  0  | |  v_extended  = =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  inline  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_resolve_endianness ( int  * endianness )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * endianness  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * endianness  =  PY_LITTLE_ENDIAN ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * endianness  ! =  0  & &  * endianness  ! =  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_SystemError ,  " invalid 'endianness' value " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Py_ssize_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_AsNativeBytes ( PyObject *  vv ,  void *  buffer ,  Py_ssize_t  n ,  int  endianness )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    union  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unsigned  char  b [ sizeof ( Py_ssize_t ) ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  cv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  do_decref  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  res  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL  | |  n  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  little_endian  =  endianness ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _resolve_endianness ( & little_endian )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) _PyNumber_Index ( vv ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( v  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do_decref  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cv . v  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Most paths result in res = sizeof(compact value). Only the case
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  where  0  <  n  <  sizeof ( compact  value )  do  we  need  to  check  and  adjust 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  our  return  value .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  sizeof ( cv . b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( n  < =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // nothing to do!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-13 23:49:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  if  ( n  < =  ( Py_ssize_t ) sizeof ( cv . b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if PY_LITTLE_ENDIAN 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memcpy ( buffer ,  cv . b ,  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  0 ;  i  <  n ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ( ( unsigned  char * ) buffer ) [ n  -  i  -  1 ]  =  cv . b [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  0 ;  i  <  n ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ( ( unsigned  char * ) buffer ) [ i ]  =  cv . b [ sizeof ( cv . b )  -  i  -  1 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memcpy ( buffer ,  & cv . b [ sizeof ( cv . b )  -  n ] ,  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* If we fit, return the requested number of bytes */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( _fits_in_n_bits ( cv . v ,  n  *  8 ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                res  =  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            unsigned  char  fill  =  cv . v  <  0  ?  0xFF  :  0x00 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if PY_LITTLE_ENDIAN 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memcpy ( buffer ,  cv . b ,  sizeof ( cv . b ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memset ( ( char  * ) buffer  +  sizeof ( cv . b ) ,  fill ,  n  -  sizeof ( cv . b ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                unsigned  char  * b  =  ( unsigned  char  * ) buffer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  0 ;  i  <  n  -  ( int ) sizeof ( cv . b ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * b + +  =  fill ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  sizeof ( cv . b ) ;  i  >  0 ;  - - i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * b + +  =  cv . b [ i  -  1 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( little_endian )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                unsigned  char  * b  =  ( unsigned  char  * ) buffer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  sizeof ( cv . b ) ;  i  >  0 ;  - - i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * b + +  =  cv . b [ i  -  1 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( Py_ssize_t  i  =  0 ;  i  <  n  -  sizeof ( cv . b ) ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * b + +  =  fill ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memset ( buffer ,  fill ,  n  -  sizeof ( cv . b ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                memcpy ( ( char  * ) buffer  +  n  -  sizeof ( cv . b ) ,  cv . b ,  sizeof ( cv . b ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( n  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_AsByteArray ( v ,  buffer ,  ( size_t ) n ,  little_endian ,  1 ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // More efficient calculation for number of bytes required?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_t  nb  =  _PyLong_NumBits ( ( PyObject  * ) v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Normally this would be((nb - 1) / 8) + 1 to avoid rounding up
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  multiples  of  8  to  the  next  byte ,  but  we  add  an  implied  bit  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  the  sign  and  it  cancels  out .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_t  n_needed  =  ( nb  /  8 )  +  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  ( Py_ssize_t ) n_needed ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( size_t ) res  ! =  n_needed )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " value too large to convert " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            res  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( do_decref )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromNativeBytes ( const  void *  buffer ,  size_t  n ,  int  endianness )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! buffer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  little_endian  =  endianness ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _resolve_endianness ( & little_endian )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_FromByteArray ( ( const  unsigned  char  * ) buffer ,  n , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 little_endian ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromUnsignedNativeBytes ( const  void *  buffer ,  size_t  n ,  int  endianness )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! buffer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  little_endian  =  endianness ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _resolve_endianness ( & little_endian )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_FromByteArray ( ( const  unsigned  char  * ) buffer ,  n , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 little_endian ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C pointer */  
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_FromVoidPtr ( void  * p )  
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2012-10-18 19:21:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if SIZEOF_VOID_P <= SIZEOF_LONG 
  
						 
					
						
							
								
									
										
										
										
											2016-09-06 13:47:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromUnsignedLong ( ( unsigned  long ) ( uintptr_t ) p ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-18 19:21:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if SIZEOF_LONG_LONG < SIZEOF_VOID_P 
  
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#    error "PyLong_FromVoidPtr: sizeof(long long) < sizeof(void*)" 
  
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2016-09-06 13:47:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromUnsignedLongLong ( ( unsigned  long  long ) ( uintptr_t ) p ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-18 19:21:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif  /* SIZEOF_VOID_P <= SIZEOF_LONG */ 
  
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C pointer from an int object. */  
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsVoidPtr ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if SIZEOF_VOID_P <= SIZEOF_LONG 
  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long  x ; 
							 
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) vv ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  PyLong_AsLong ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  PyLong_AsUnsignedLong ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if SIZEOF_LONG_LONG < SIZEOF_VOID_P 
  
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#    error "PyLong_AsVoidPtr: sizeof(long long) < sizeof(void*)" 
  
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long  long  x ; 
							 
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) vv ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  PyLong_AsLongLong ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  PyLong_AsUnsignedLongLong ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-16 08:48:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  /* SIZEOF_VOID_P <= SIZEOF_LONG */ 
  
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( x  = =  - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( void  * ) x ; 
							 
						 
					
						
							
								
									
										
										
										
											1998-09-18 14:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Initial long long support by Chris Herborth (chrish@qnx.com), later
  
						 
					
						
							
								
									
										
										
										
											2001-06-13 00:35:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  rewritten  to  use  the  newer  PyLong_ { As , From } ByteArray  API . 
							 
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-05 19:55:28 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define PY_ABS_LLONG_MIN (0-(unsigned long long)LLONG_MIN) 
  
						 
					
						
							
								
									
										
										
										
											2001-06-13 00:35:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C long long int. */  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_FromLongLong ( long  long  ival )  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  long  abs_ival ,  t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  ndigits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Handle small and medium cases. */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-24 10:19:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( - ( long  long ) PyLong_MASK  < =  ival  & &  ival  < =  ( long  long ) PyLong_MASK )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_FromMedium ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Count digits (at least two - smaller cases were handled above). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    abs_ival  =  ival  <  0  ?  0U - ( unsigned  long  long ) ival  :  ( unsigned  long  long ) ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Do shift in two steps to avoid possible undefined behavior. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t  =  abs_ival  > >  PyLong_SHIFT  > >  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ndigits  =  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-01 14:20:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Construct output value. */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( ndigits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * p  =  v - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( v ,  ival  <  0  ?  - 1  :  1 ,  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t  =  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p + +  =  ( digit ) ( t  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) v ; 
							 
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Create a new int object from a C Py_ssize_t. */  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_FromSsize_t ( Py_ssize_t  ival )  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  t ;   /* unsigned so >> doesn't propagate sign bit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  ndigits  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  negative  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 14:00:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-24 10:19:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ival  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* avoid signed overflow when ival = SIZE_T_MIN */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        abs_ival  =  ( size_t ) ( - 1 - ival ) + 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        negative  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        abs_ival  =  ( size_t ) ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Count the number of Python digits. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t  =  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( ndigits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * p  =  v - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( v ,  negative  ?  - 1  :  1 ,  ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t  =  abs_ival ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( t )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p + +  =  ( digit ) ( t  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) v ; 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C long long int from an int object or any object that has an
  
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   __index__  method .   Return  - 1  and  set  an  error  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long  long  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsLongLong ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long  long  bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  res ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  do_decref  =  0 ;  /* if PyNumber_Index was called */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) _PyNumber_Index ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        do_decref  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bytes  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        res  =  _PyLong_AsByteArray ( ( PyLongObject  * ) v ,  ( unsigned  char  * ) & bytes , 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                  SIZEOF_LONG_LONG ,  PY_LITTLE_ENDIAN ,  1 ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( do_decref )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Plan 9 can't handle long long in ? : expressions */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( res  <  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( long  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C unsigned long long int from an int object.
  
						 
					
						
							
								
									
										
										
										
											2001-06-13 00:35:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Return  - 1  and  set  an  error  if  overflow  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								unsigned  long  long  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsUnsignedLongLong ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  long  bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-09-07 21:40:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-07 21:40:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError ,  " an integer is required " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-07 21:40:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNonNegativeCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bytes  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  _PyLong_AsByteArray ( ( PyLongObject  * ) vv ,  ( unsigned  char  * ) & bytes , 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                              SIZEOF_LONG_LONG ,  PY_LITTLE_ENDIAN ,  0 ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Plan 9 can't handle long long in ? : expressions */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( res  <  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) res ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-06-13 00:35:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C unsigned long int from an int object, ignoring the high bits.
  
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Returns  - 1  and  sets  an  error  condition  if  an  error  occurs .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  unsigned  long  long  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_PyLong_AsUnsignedLongLongMask ( PyObject  * vv )  
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  long  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL  | |  ! PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-06 14:39:23 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long )  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) ( signed  long  long ) _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( x  < <  PyLong_SHIFT )  |  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  x  *  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-04-17 18:55:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								unsigned  long  long  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsUnsignedLongLongMask ( PyObject  * op )  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * lo ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  long  val ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( op  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-06 14:39:23 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( op ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_AsUnsignedLongLongMask ( op ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    lo  =  ( PyLongObject  * ) _PyNumber_Index ( op ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( lo  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( unsigned  long  long ) - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    val  =  _PyLong_AsUnsignedLongLongMask ( ( PyObject  * ) lo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( lo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  val ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											1998-08-04 22:46:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C long long int from an int object or any object that has an
  
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   __index__  method . 
							 
						 
					
						
							
								
									
										
										
										
											2011-10-23 20:47:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   On  overflow ,  return  - 1  and  set  * overflow  to  1  or  - 1  depending  on  the  sign  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   the  result .   Otherwise  * overflow  is  0. 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-30 10:30:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-10-23 20:47:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   For  other  errors  ( e . g . ,  TypeError ) ,  return  - 1  and  set  an  error  condition . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   In  this  case  * overflow  will  be  0. 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-30 10:30:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long  long  
						 
					
						
							
								
									
										
										
										
											2010-01-30 10:30:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyLong_AsLongLongAndOverflow ( PyObject  * vv ,  int  * overflow )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* This version by Tim Peters */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unsigned  long  long  x ,  prev ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long  long  res ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-27 13:43:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  do_decref  =  0 ;  /* if PyNumber_Index was called */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * overflow  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( vv  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( vv ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v  =  ( PyLongObject  * ) _PyNumber_Index ( vv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do_decref  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            prev  =  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            x  =  ( x  < <  PyLong_SHIFT )  +  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ( x  > >  PyLong_SHIFT )  ! =  prev )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * overflow  =  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                res  =  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                goto  exit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Haven't lost any bits, but casting to long requires extra
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  care  ( see  comment  above ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-05 19:55:28 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( x  < =  ( unsigned  long  long ) LLONG_MAX )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-06 10:46:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            res  =  ( long  long ) x  *  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  if  ( sign  <  0  & &  x  = =  PY_ABS_LLONG_MIN )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-05 19:55:28 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            res  =  LLONG_MIN ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * overflow  =  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            res  =  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  exit : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( do_decref )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-11 21:07:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  res ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-30 10:30:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_UnsignedShort_Converter ( PyObject  * obj ,  void  * ptr )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( obj )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) obj ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " value must be positive " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uval  =  PyLong_AsUnsignedLong ( obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  = =  ( unsigned  long ) - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  >  USHRT_MAX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " Python int too large for C unsigned short " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * ( unsigned  short  * ) ptr  =  Py_SAFE_DOWNCAST ( uval ,  unsigned  long ,  unsigned  short ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_UnsignedInt_Converter ( PyObject  * obj ,  void  * ptr )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( obj )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) obj ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " value must be positive " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uval  =  PyLong_AsUnsignedLong ( obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  = =  ( unsigned  long ) - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  >  UINT_MAX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " Python int too large for C unsigned int " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * ( unsigned  int  * ) ptr  =  Py_SAFE_DOWNCAST ( uval ,  unsigned  long ,  unsigned  int ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_UnsignedLong_Converter ( PyObject  * obj ,  void  * ptr )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( obj )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) obj ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " value must be positive " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uval  =  PyLong_AsUnsignedLong ( obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  = =  ( unsigned  long ) - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * ( unsigned  long  * ) ptr  =  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_UnsignedLongLong_Converter ( PyObject  * obj ,  void  * ptr )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unsigned  long  long  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( obj )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) obj ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " value must be positive " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uval  =  PyLong_AsUnsignedLongLong ( obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  = =  ( unsigned  long  long ) - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * ( unsigned  long  long  * ) ptr  =  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Size_t_Converter ( PyObject  * obj ,  void  * ptr )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( obj )  & &  _PyLong_IsNegative ( ( PyLongObject  * ) obj ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-26 13:22:16 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " value must be positive " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uval  =  PyLong_AsSize_t ( obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( uval  = =  ( size_t ) - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * ( size_t  * ) ptr  =  uval ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define CHECK_BINOP(v,w)                                \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {                                                 \
							 
						 
					
						
							
								
									
										
										
										
											2011-08-10 20:28:54 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! PyLong_Check ( v )  | |  ! PyLong_Check ( w ) )        \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_RETURN_NOTIMPLEMENTED ;                    \
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  while ( 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 05:09:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required.  x[0:n]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  is  modified  in  place ,  by  adding  y  to  it .   Carries  are  propagated  as  far  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  x [ m - 1 ] ,  and  the  remaining  carry  ( 0  or  1 )  is  returned . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								v_iadd ( digit  * x ,  Py_ssize_t  m ,  digit  * y ,  Py_ssize_t  n )  
						 
					
						
							
								
									
										
										
										
											2002-08-12 05:09:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( m  > =  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  n ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  + =  x [ i ]  +  y [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( ( carry  &  1 )  = =  carry ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( ;  carry  & &  i  <  m ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  + =  x [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( ( carry  &  1 )  = =  carry ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 05:09:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required.  x[0:n]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  is  modified  in  place ,  by  subtracting  y  from  it .   Borrows  are  propagated  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  far  as  x [ m - 1 ] ,  and  the  remaining  borrow  ( 0  or  1 )  is  returned . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								v_isub ( digit  * x ,  Py_ssize_t  m ,  digit  * y ,  Py_ssize_t  n )  
						 
					
						
							
								
									
										
										
										
											2002-08-12 05:09:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  borrow  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( m  > =  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  n ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  =  x [ i ]  -  y [ i ]  -  borrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x [ i ]  =  borrow  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  & =  1 ;             /* keep only 1 sign bit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( ;  borrow  & &  i  <  m ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  =  x [ i ]  -  borrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x [ i ]  =  borrow  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  & =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  borrow ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 05:09:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-23 18:44:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT.  Put
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  result  in  z [ 0 : m ] ,  and  return  the  d  bits  shifted  out  of  the  top . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								v_lshift ( digit  * z ,  digit  * a ,  Py_ssize_t  m ,  int  d )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( 0  < =  d  & &  d  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i = 0 ;  i  <  m ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        twodigits  acc  =  ( twodigits ) a [ i ]  < <  d  |  carry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z [ i ]  =  ( digit ) acc  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  =  ( digit ) ( acc  > >  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-23 18:44:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-23 18:44:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT.  Put
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  result  in  z [ 0 : m ] ,  and  return  the  d  bits  shifted  out  of  the  bottom . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								v_rshift ( digit  * z ,  digit  * a ,  Py_ssize_t  m ,  int  d )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  mask  =  ( ( digit ) 1  < <  d )  -  1U ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( 0  < =  d  & &  d  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i = m ;  i - -  >  0 ; )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        twodigits  acc  =  ( twodigits ) carry  < <  PyLong_SHIFT  |  a [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  =  ( digit ) acc  &  mask ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z [ i ]  =  ( digit ) ( acc  > >  d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   in  pout ,  and  returning  the  remainder .   pin  and  pout  point  at  the  LSD . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   It ' s  OK  for  pin  = =  pout  on  entry ,  which  saves  oodles  of  mallocs / frees  in 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   _PyLong_Format ,  but  that  should  be  done  with  great  care  since  ints  are 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-23 02:00:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   immutable . 
							 
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-23 02:00:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   This  version  of  the  code  can  be  20 %  faster  than  the  pre - 2022  version 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   on  todays  compilers  on  architectures  like  amd64 .   It  evolved  from  Mark 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   Dickinson  observing  that  a  128 : 64  divide  instruction  was  always  being 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   generated  by  the  compiler  despite  us  working  with  30 - bit  digit  values . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   See  the  thread  for  full  context : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     https : //mail.python.org/archives/list/python-dev@python.org/thread/ZICIMX5VFCX4IOFH5NUPVHCUJCQ4Q7QM/#NEUNFZU3TQU4CPTYZNF3WCN7DOJBBTK5
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   If  you  ever  want  to  change  this  code ,  pay  attention  to  performance  using 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   different  compilers ,  optimization  levels ,  and  cpu  architectures .  Beware  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   PGO / FDO  builds  doing  value  specialization  such  as  a  fast  path  for  //10. :)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   Verify  that  17  isn ' t  specialized  and  this  works  as  a  quick  test : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     python  - m  timeit  - s  ' x  =  10 * * 1000 ;  r = x //10; assert r == 10**999, r' 'x//17'
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
									
										
										
										
											2006-02-15 17:27:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								inplace_divrem1 ( digit  * pout ,  digit  * pin ,  Py_ssize_t  size ,  digit  n )  
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2022-01-23 02:00:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  remainder  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( n  >  0  & &  n  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - size  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-23 02:00:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        twodigits  dividend ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dividend  =  ( ( twodigits ) remainder  < <  PyLong_SHIFT )  |  pin [ size ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  quotient ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        quotient  =  ( digit ) ( dividend  /  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        remainder  =  dividend  %  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pout [ size ]  =  quotient ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  remainder ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-23 02:00:41 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Divide an integer by a digit, returning both the quotient
  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								   ( as  function  result )  and  the  remainder  ( through  * prem ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   The  sign  of  a  is  ignored ;  n  should  not  be  zero .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2001-07-14 12:23:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								divrem1 ( PyLongObject  * a ,  digit  n ,  digit  * prem )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  Py_ssize_t  size  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( n  >  0  & &  n  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    * prem  =  inplace_divrem1 ( z - > long_value . ob_digit ,  a - > long_value . ob_digit ,  size ,  n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  long_normalize ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Remainder of long pin, w/ size digits, by non-zero digit n,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   returning  the  remainder .  pin  points  at  the  LSD .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  digit  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								inplace_rem1 ( digit  * pin ,  Py_ssize_t  size ,  digit  n )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  rem  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( n  >  0  & &  n  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - size  > =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rem  =  ( ( rem  < <  PyLong_SHIFT )  |  pin [ size ] )  %  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( digit ) rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Get the remainder of an integer divided by a digit, returning
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   the  remainder  as  the  result  of  the  function .  The  sign  of  a  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   ignored ;  n  should  not  be  zero .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								rem1 ( PyLongObject  * a ,  digit  n )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  Py_ssize_t  size  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( n  >  0  & &  n  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyLongObject  * ) PyLong_FromLong ( 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ( long ) inplace_rem1 ( a - > long_value . ob_digit ,  size ,  n ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifdef WITH_PYLONG_MODULE 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* asymptotically faster long_to_decimal_string, using _pylong.py */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								pylong_int_to_decimal_string ( PyObject  * aa ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             PyObject  * * p_output , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             _PyUnicodeWriter  * writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             _PyBytesWriter  * bytes_writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             char  * * bytes_str ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * s  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * mod  =  PyImport_ImportModule ( " _pylong " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( mod  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    s  =  PyObject_CallMethod ( mod ,  " int_to_decimal_string " ,  " O " ,  aa ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( s  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-03 16:18:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! PyUnicode_Check ( s ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " _pylong.int_to_decimal_string did not return a str " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  size  =  PyUnicode_GET_LENGTH ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( _PyUnicodeWriter_Prepare ( writer ,  size ,  ' 9 ' )  = =  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( _PyUnicodeWriter_WriteStr ( writer ,  s )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  success ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  size  =  PyUnicode_GET_LENGTH ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  void  * data  =  PyUnicode_DATA ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        int  kind  =  PyUnicode_KIND ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * bytes_str  =  _PyBytesWriter_Prepare ( bytes_writer ,  * bytes_str ,  size ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * bytes_str  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        char  * p  =  * bytes_str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( Py_ssize_t  i = 0 ;  i  <  size ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_UCS4  ch  =  PyUnicode_READ ( kind ,  data ,  i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * p + +  =  ( char )  ch ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( * bytes_str )  =  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  success ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * p_output  =  Py_NewRef ( s ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        goto  success ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								error :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_XDECREF ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								success :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  /* WITH_PYLONG_MODULE */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Convert an integer to a base 10 string.  Returns a new non-shared
  
						 
					
						
							
								
									
										
										
										
											2009-09-16 21:23:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   string .   ( Return  value  is  non - shared  so  that  callers  can  modify  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   returned  value  if  necessary . )  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_to_decimal_string_internal ( PyObject  * aa ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                PyObject  * * p_output , 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                _PyUnicodeWriter  * writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                _PyBytesWriter  * bytes_writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                char  * * bytes_str ) 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-16 21:23:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * scratch ,  * a ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 12:10:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * str  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size ,  strlen ,  size_a ,  i ,  j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  * pout ,  * pin ,  rem ,  tenpow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  negative ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 17:26:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  d ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 12:41:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  kind ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  ( PyLongObject  * ) aa ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a  = =  NULL  | |  ! PyLong_Check ( a ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    negative  =  _PyLong_IsNegative ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 17:21:18 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* quick and dirty pre-check for overflowing the decimal digit limit,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       based  on  the  inequality  10 / 3  > =  log2 ( 10 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       explanation  in  https : //github.com/python/cpython/pull/96537
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  > =  10  *  _PY_LONG_MAX_STR_DIGITS_THRESHOLD 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  /  ( 3  *  PyLong_SHIFT )  +  2 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyInterpreterState  * interp  =  _PyInterpreterState_GET ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-19 14:27:46 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        int  max_str_digits  =  interp - > long_state . max_str_digits ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 17:21:18 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ( max_str_digits  >  0 )  & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( max_str_digits  /  ( 3  *  PyLong_SHIFT )  < =  ( size_a  -  11 )  /  10 ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_Format ( PyExc_ValueError ,  _MAX_STR_DIGITS_ERROR_FMT_TO_STR , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         max_str_digits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if WITH_PYLONG_MODULE 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  >  1000 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Switch to _pylong.int_to_decimal_string(). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  pylong_int_to_decimal_string ( aa , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         p_output , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         bytes_writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                         bytes_str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* quick and dirty upper bound for the number of digits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       required  to  express  a  in  base  _PyLong_DECIMAL_BASE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         # digits = 1 + floor(log2(a)  /  log2(_PyLong_DECIMAL_BASE)) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       But  log2 ( a )  <  size_a  *  PyLong_SHIFT ,  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       log2 ( _PyLong_DECIMAL_BASE )  =  log2 ( 10 )  *  _PyLong_DECIMAL_SHIFT 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 17:26:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                  >  3.3  *  _PyLong_DECIMAL_SHIFT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         size_a  *  PyLong_SHIFT  /  ( 3.3  *  _PyLong_DECIMAL_SHIFT )  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             size_a  +  size_a  /  d  <  size_a  +  size_a  /  floor ( d ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       where  d  =  ( 3.3  *  _PyLong_DECIMAL_SHIFT )  / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 ( PyLong_SHIFT  -  3.3  *  _PyLong_DECIMAL_SHIFT ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 17:26:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    d  =  ( 33  *  _PyLong_DECIMAL_SHIFT )  / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( 10  *  PyLong_SHIFT  -  33  *  _PyLong_DECIMAL_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( size_a  <  PY_SSIZE_T_MAX / 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size  =  1  +  size_a  +  size_a  /  d ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    scratch  =  _PyLong_New ( size ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( scratch  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* convert array of base _PyLong_BASE digits in pin to an array of
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       base  _PyLong_DECIMAL_BASE  digits  in  pout ,  following  Knuth  ( TAOCP , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Volume  2  ( 3 rd  edn ) ,  section  4.4 ,  Method  1 b ) .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    pin  =  a - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    pout  =  scratch - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  size_a ;  - - i  > =  0 ;  )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  hi  =  pin [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( j  =  0 ;  j  <  size ;  j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  z  =  ( twodigits ) pout [ j ]  < <  PyLong_SHIFT  |  hi ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            hi  =  ( digit ) ( z  /  _PyLong_DECIMAL_BASE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pout [ j ]  =  ( digit ) ( z  -  ( twodigits ) hi  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              _PyLong_DECIMAL_BASE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( hi )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pout [ size + + ]  =  hi  %  _PyLong_DECIMAL_BASE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            hi  / =  _PyLong_DECIMAL_BASE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* check for keyboard interrupt */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        SIGCHECK ( { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                Py_DECREF ( scratch ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* pout should have at least one digit, so that the case when a = 0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       works  correctly  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pout [ size + + ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* calculate exact length of output string, and allocate */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    strlen  =  negative  +  1  +  ( size  -  1 )  *  _PyLong_DECIMAL_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    tenpow  =  10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rem  =  pout [ size - 1 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( rem  > =  tenpow )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tenpow  * =  10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        strlen + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( strlen  >  _PY_LONG_MAX_STR_DIGITS_THRESHOLD )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyInterpreterState  * interp  =  _PyInterpreterState_GET ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-19 14:27:46 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        int  max_str_digits  =  interp - > long_state . max_str_digits ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_ssize_t  strlen_nosign  =  strlen  -  negative ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( max_str_digits  >  0 )  & &  ( strlen_nosign  >  max_str_digits ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( scratch ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 17:21:18 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            PyErr_Format ( PyExc_ValueError ,  _MAX_STR_DIGITS_ERROR_FMT_TO_STR , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         max_str_digits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( writer )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-10 02:51:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyUnicodeWriter_Prepare ( writer ,  strlen ,  ' 9 ' )  = =  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( scratch ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-10 02:51:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        kind  =  writer - > kind ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * bytes_str  =  _PyBytesWriter_Prepare ( bytes_writer ,  * bytes_str ,  strlen ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * bytes_str  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( scratch ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        str  =  PyUnicode_New ( strlen ,  ' 9 ' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( str  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( scratch ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        kind  =  PyUnicode_KIND ( str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define WRITE_DIGITS(p)                                               \ 
  
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    do  {                                                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* pout[0] through pout[size-2] contribute exactly            \
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           _PyLong_DECIMAL_SHIFT  digits  each  */                        \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i = 0 ;  i  <  size  -  1 ;  i + + )  {                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            rem  =  pout [ i ] ;                                             \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  ( j  =  0 ;  j  <  _PyLong_DECIMAL_SHIFT ;  j + + )  {              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * - - p  =  ' 0 '  +  rem  %  10 ;                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                rem  / =  10 ;                                             \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }                                                          \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }                                                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* pout[size-1]: always produce at least one decimal digit */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rem  =  pout [ i ] ;                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        do  {                                                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * - - p  =  ' 0 '  +  rem  %  10 ;                                     \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            rem  / =  10 ;                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  while  ( rem  ! =  0 ) ;                                            \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* and sign */                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( negative )                                                  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * - - p  =  ' - ' ;                                                \
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  while  ( 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define WRITE_UNICODE_DIGITS(TYPE)                                    \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {                                                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( writer )                                                    \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p  =  ( TYPE * ) PyUnicode_DATA ( writer - > buffer )  +  writer - > pos  +  strlen ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else                                                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p  =  ( TYPE * ) PyUnicode_DATA ( str )  +  strlen ;                   \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WRITE_DIGITS ( p ) ;                                               \
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* check we've counted correctly */                            \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( writer )                                                    \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( p  = =  ( ( TYPE * ) PyUnicode_DATA ( writer - > buffer )  +  writer - > pos ) ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else                                                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( p  = =  ( TYPE * ) PyUnicode_DATA ( str ) ) ;                   \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while  ( 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* fill the string right-to-left */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        char  * p  =  * bytes_str  +  strlen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WRITE_DIGITS ( p ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( p  = =  * bytes_str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( kind  = =  PyUnicode_1BYTE_KIND )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_UCS1  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( kind  = =  PyUnicode_2BYTE_KIND )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_UCS2  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_UCS4  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 18:51:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert  ( kind  = =  PyUnicode_4BYTE_KIND ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS4 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# undef WRITE_DIGITS 
  
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# undef WRITE_UNICODE_DIGITS 
  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( scratch ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        writer - > pos  + =  strlen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( * bytes_str )  + =  strlen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( _PyUnicode_CheckConsistency ( str ,  1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * p_output  =  ( PyObject  * ) str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_to_decimal_string ( PyObject  * aa )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * v ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( long_to_decimal_string_internal ( aa ,  & v ,  NULL ,  NULL ,  NULL )  = =  - 1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  v ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-16 21:23:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Convert an int object to a string, using a given conversion base,
  
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   which  should  be  one  of  2 ,  8  or  16.   Return  a  string  object . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   If  base  is  2 ,  8  or  16 ,  add  the  proper  prefix  ' 0 b ' ,  ' 0 o '  or  ' 0 x ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   if  alternate  is  nonzero .  */ 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_format_binary ( PyObject  * aa ,  int  base ,  int  alternate ,  
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                   PyObject  * * p_output ,  _PyUnicodeWriter  * writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   _PyBytesWriter  * bytes_writer ,  char  * * bytes_str ) 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-13 20:18:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * a  =  ( PyLongObject  * ) aa ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 12:10:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * v  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  sz ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 12:41:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  kind ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  negative ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( base  = =  2  | |  base  = =  8  | |  base  = =  16 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( a  = =  NULL  | |  ! PyLong_Check ( a ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    negative  =  _PyLong_IsNegative ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Compute a rough upper bound for the length of the string */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    switch  ( base )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  16 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bits  =  4 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  8 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bits  =  3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  2 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bits  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    default : 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-14 18:13:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_UNREACHABLE ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Compute exact length 'sz' of output string. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sz  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  size_a_in_bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Ensure overflow doesn't occur during computation of sz. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( size_a  >  ( PY_SSIZE_T_MAX  -  3 )  /  PyLong_SHIFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 12:08:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            " int too large to format " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_a_in_bits  =  ( size_a  -  1 )  *  PyLong_SHIFT  + 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         bit_length_digit ( a - > long_value . ob_digit [ size_a  -  1 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Allow 1 character for a '-' sign. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sz  =  negative  +  ( size_a_in_bits  +  ( bits  -  1 ) )  /  bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( alternate )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* 2 characters for prefix  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sz  + =  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-20 21:21:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( _PyUnicodeWriter_Prepare ( writer ,  sz ,  ' x ' )  = =  - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        kind  =  writer - > kind ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-14 09:47:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( bytes_writer )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * bytes_str  =  _PyBytesWriter_Prepare ( bytes_writer ,  * bytes_str ,  sz ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * bytes_str  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v  =  PyUnicode_New ( sz ,  ' x ' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( v  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        kind  =  PyUnicode_KIND ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define WRITE_DIGITS(p)                                                 \ 
  
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    do  {                                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( size_a  = =  0 )  {                                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * - - p  =  ' 0 ' ;                                                  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }                                                                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  {                                                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* JRH: special case for power-of-2 bases */                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  accum  =  0 ;                                         \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            int  accumbits  =  0 ;    /* # of bits in accum */                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_ssize_t  i ;                                                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  ( i  =  0 ;  i  <  size_a ;  + + i )  {                               \
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                accum  | =  ( twodigits ) a - > long_value . ob_digit [ i ]  < <  accumbits ;         \
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                accumbits  + =  PyLong_SHIFT ;                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( accumbits  > =  bits ) ;                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                do  {                                                     \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    char  cdigit ;                                         \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    cdigit  =  ( char ) ( accum  &  ( base  -  1 ) ) ;                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    cdigit  + =  ( cdigit  <  10 )  ?  ' 0 '  :  ' a ' - 10 ;              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * - - p  =  cdigit ;                                       \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    accumbits  - =  bits ;                                   \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    accum  > > =  bits ;                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  while  ( i  <  size_a - 1  ?  accumbits  > =  bits  :  accum  >  0 ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }                                                            \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }                                                                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                        \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( alternate )  {                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( base  = =  16 )                                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * - - p  =  ' x ' ;                                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  if  ( base  = =  8 )                                          \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * - - p  =  ' o ' ;                                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  /* (base == 2) */                                       \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * - - p  =  ' b ' ;                                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * - - p  =  ' 0 ' ;                                                  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }                                                                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( negative )                                                    \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * - - p  =  ' - ' ;                                                  \
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  while  ( 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define WRITE_UNICODE_DIGITS(TYPE)                                      \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {                                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( writer )                                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p  =  ( TYPE * ) PyUnicode_DATA ( writer - > buffer )  +  writer - > pos  +  sz ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else                                                             \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p  =  ( TYPE * ) PyUnicode_DATA ( v )  +  sz ;                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                        \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WRITE_DIGITS ( p ) ;                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                        \
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( writer )                                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( p  = =  ( ( TYPE * ) PyUnicode_DATA ( writer - > buffer )  +  writer - > pos ) ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else                                                             \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( p  = =  ( TYPE * ) PyUnicode_DATA ( v ) ) ;                       \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while  ( 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        char  * p  =  * bytes_str  +  sz ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WRITE_DIGITS ( p ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( p  = =  * bytes_str ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( kind  = =  PyUnicode_1BYTE_KIND )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_UCS1  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( kind  = =  PyUnicode_2BYTE_KIND )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_UCS2  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_UCS4  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 18:51:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert  ( kind  = =  PyUnicode_4BYTE_KIND ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        WRITE_UNICODE_DIGITS ( Py_UCS4 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# undef WRITE_DIGITS 
  
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# undef WRITE_UNICODE_DIGITS 
  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        writer - > pos  + =  sz ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( bytes_writer )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( * bytes_str )  + =  sz ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( _PyUnicode_CheckConsistency ( v ,  1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * p_output  =  v ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Format ( PyObject  * obj ,  int  base )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  err ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( base  = =  10 ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        err  =  long_to_decimal_string_internal ( obj ,  & str ,  NULL ,  NULL ,  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        err  =  long_format_binary ( obj ,  base ,  1 ,  & str ,  NULL ,  NULL ,  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( err  = =  - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FormatWriter ( _PyUnicodeWriter  * writer ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     PyObject  * obj , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     int  base ,  int  alternate ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( base  = =  10 ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_to_decimal_string_internal ( obj ,  NULL ,  writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                               NULL ,  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-09 22:43:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_format_binary ( obj ,  base ,  alternate ,  NULL ,  writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                  NULL ,  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								char *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FormatBytesWriter ( _PyBytesWriter  * writer ,  char  * str ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          PyObject  * obj , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                          int  base ,  int  alternate ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    char  * str2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    str2  =  str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( base  = =  10 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  long_to_decimal_string_internal ( obj ,  NULL ,  NULL , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                              writer ,  & str2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        res  =  long_format_binary ( obj ,  base ,  alternate ,  NULL ,  NULL , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                 writer ,  & str2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( res  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( str2  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  str2 ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Table of digit values for 8-bit string -> integer conversion.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ' 0 '  maps  to  0 ,  . . . ,  ' 9 '  maps  to  9. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ' a '  and  ' A '  map  to  10 ,  . . . ,  ' z '  and  ' Z '  map  to  35. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  All  other  indices  map  to  37. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Note  that  when  converting  a  base  B  string ,  a  char  c  is  a  legitimate 
							 
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 56467-56482 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
  r56477 | martin.v.loewis | 2007-07-21 09:04:38 +0200 (Sa, 21 Jul 2007) | 11 lines
  Merged revisions 56466-56476 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk
  ........
    r56476 | martin.v.loewis | 2007-07-21 08:55:02 +0200 (Sa, 21 Jul 2007) | 4 lines
    PEP 3123: Provide forward compatibility with Python 3.0, while keeping
    backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
    PyVarObject_HEAD_INIT.
  ........
................
  r56478 | martin.v.loewis | 2007-07-21 09:47:23 +0200 (Sa, 21 Jul 2007) | 2 lines
  PEP 3123: Use proper C inheritance for PyObject.
................
  r56479 | martin.v.loewis | 2007-07-21 10:06:55 +0200 (Sa, 21 Jul 2007) | 3 lines
  Add longintrepr.h to Python.h, so that the compiler can
  see that PyFalse is really some kind of PyObject*.
................
  r56480 | martin.v.loewis | 2007-07-21 10:47:18 +0200 (Sa, 21 Jul 2007) | 2 lines
  Qualify SHIFT, MASK, BASE.
................
  r56482 | martin.v.loewis | 2007-07-21 19:10:57 +0200 (Sa, 21 Jul 2007) | 2 lines
  Correctly refer to _ob_next.
................
											 
										 
										
											2007-07-21 17:22:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  base  B  digit  iff  _PyLong_DigitValue [ Py_CHARPyLong_MASK ( c ) ]  <  B . 
							 
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-09 03:58:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								unsigned  char  _PyLong_DigitValue [ 256 ]  =  {  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,   1 ,   2 ,   3 ,   4 ,   5 ,   6 ,   7 ,   8 ,   9 ,   37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  10 ,  11 ,  12 ,  13 ,  14 ,  15 ,  16 ,  17 ,  18 ,  19 ,  20 ,  21 ,  22 ,  23 ,  24 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    25 ,  26 ,  27 ,  28 ,  29 ,  30 ,  31 ,  32 ,  33 ,  34 ,  35 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  10 ,  11 ,  12 ,  13 ,  14 ,  15 ,  16 ,  17 ,  18 ,  19 ,  20 ,  21 ,  22 ,  23 ,  24 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    25 ,  26 ,  27 ,  28 ,  29 ,  30 ,  31 ,  32 ,  33 ,  34 ,  35 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 ,  37 , 
							 
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* `start` and `end` point to the start and end of a string of base `base`
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  digits .   base  is  a  power  of  2  ( 2 ,  4 ,  8 ,  16 ,  or  32 ) .  An  unnormalized  int  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  returned  in  * res .  The  string  should  be  already  validated  by  the  caller  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  consists  only  of  valid  digit  characters  and  underscores .  ` digits `  gives  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  number  of  digit  characters . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  The  point  to  this  routine  is  that  it  takes  time  linear  in  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  number  of  string  characters . 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Return  values : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    - 1  on  syntax  error  ( exception  needs  to  be  set ,  * res  is  untouched ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    0  else  ( exception  may  be  set ,  in  that  case  * res  is  set  to  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2003-02-02 07:51:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_from_binary_base ( const  char  * start ,  const  char  * end ,  Py_ssize_t  digits ,  int  base ,  PyLongObject  * * res )  
						 
					
						
							
								
									
										
										
										
											2003-02-02 07:51:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  char  * p ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  bits_per_char ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  accum ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  bits_in_accum ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  * pdigit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( base  > =  2  & &  base  < =  32  & &  ( base  &  ( base  -  1 ) )  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    n  =  base ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( bits_per_char  =  - 1 ;  n ;  + + bits_per_char )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        n  > > =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-03 14:13:44 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* n <- the number of Python digits needed,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            =  ceiling ( ( digits  *  bits_per_char )  /  PyLong_SHIFT ) .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( digits  >  ( PY_SSIZE_T_MAX  -  ( PyLong_SHIFT  -  1 ) )  /  bits_per_char )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " int string too large to convert " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-03 14:13:44 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    n  =  ( digits  *  bits_per_char  +  PyLong_SHIFT  -  1 )  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Read string from right, and fill in int from left; i.e.,
 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  from  least  to  most  significant  in  both . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    accum  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bits_in_accum  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    pdigit  =  z - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    p  =  end ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( - - p  > =  start )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        int  k ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * p  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        k  =  ( int ) _PyLong_DigitValue [ Py_CHARMASK ( * p ) ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( k  > =  0  & &  k  <  base ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        accum  | =  ( twodigits ) k  < <  bits_in_accum ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bits_in_accum  + =  bits_per_char ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( bits_in_accum  > =  PyLong_SHIFT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * pdigit + +  =  ( digit ) ( accum  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            assert ( pdigit  -  z - > long_value . ob_digit  < =  n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            accum  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            bits_in_accum  - =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( bits_in_accum  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( bits_in_accum )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( bits_in_accum  < =  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * pdigit + +  =  ( digit ) accum ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( pdigit  -  z - > long_value . ob_digit  < =  n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( pdigit  -  z - > long_value . ob_digit  <  n ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pdigit + +  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    * res  =  z ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-02-02 07:51:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  * long_neg ( PyLongObject  * v ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef WITH_PYLONG_MODULE 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* asymptotically faster str-to-long conversion for base 10, using _pylong.py */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								pylong_int_from_string ( const  char  * start ,  const  char  * end ,  PyLongObject  * * res )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * mod  =  PyImport_ImportModule ( " _pylong " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( mod  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * s  =  PyUnicode_FromStringAndSize ( start ,  end - start ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( s  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-03 16:18:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * result  =  PyObject_CallMethod ( mod ,  " int_from_string " ,  " O " ,  s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( result ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-04 14:24:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-03 16:18:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " _pylong.int_from_string did not return an int " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * res  =  ( PyLongObject  * ) result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								error :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * res  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-03 16:18:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  0 ;   // See the long_from_string_base() API comment.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  /* WITH_PYLONG_MODULE */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/***
  
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_from_non_binary_base :  parameters  and  return  values  are  the  same  as  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_from_binary_base .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Binary  bases  can  be  converted  in  time  linear  in  the  number  of  digits ,  because  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Python ' s  representation  base  is  binary .   Other  bases  ( including  decimal ! )  use  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								the  simple  quadratic - time  algorithm  below ,  complicated  by  some  speed  tricks .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								First  some  math :   the  largest  integer  that  can  be  expressed  in  N  base - B  digits  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is  B * * N - 1.   Consequently ,  if  we  have  an  N - digit  input  in  base  B ,  the  worst -  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								case  number  of  Python  digits  needed  to  hold  it  is  the  smallest  integer  n  s . t .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    BASE * * n - 1  > =  B * * N - 1   [ or ,  adding  1  to  both  sides ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    BASE * * n  > =  B * * N       [ taking  logs  to  base  BASE ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    n  > =  log ( B * * N ) / log ( BASE )  =  N  *  log ( B ) / log ( BASE ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The  static  array  log_base_BASE [ base ]  = =  log ( base ) / log ( BASE )  so  we  can  compute  
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								this  quickly .   A  Python  int  with  that  much  space  is  reserved  near  the  start ,  
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								and  the  result  is  computed  into  it .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The  input  string  is  actually  treated  as  being  in  base  base * * i  ( i . e . ,  i  digits  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								are  processed  at  a  time ) ,  where  two  more  static  arrays  hold :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    convwidth_base [ base ]  =  the  largest  integer  i  such  that  base * * i  < =  BASE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    convmultmax_base [ base ]  =  base  * *  convwidth_base [ base ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The  first  of  these  is  the  largest  i  such  that  i  consecutive  input  digits  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								must  fit  in  a  single  Python  digit .   The  second  is  effectively  the  input  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								base  we ' re  really  using .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Viewing  the  input  as  a  sequence  < c0 ,  c1 ,  . . . ,  c_n - 1 >  of  digits  in  base  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								convmultmax_base [ base ] ,  the  result  is  " simply "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   ( ( ( c0 * B  +  c1 ) * B  +  c2 ) * B  +  c3 ) * B  +  . . .  ) ) )  +  c_n - 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								where  B  =  convmultmax_base [ base ] .  
						 
					
						
							
								
									
										
											 
										
											
												Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
merge in bad ways, so I'll have to merge that extra-carefully (probably manually.)
Merged revisions 46495-46605 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r46495 | tim.peters | 2006-05-28 03:52:38 +0200 (Sun, 28 May 2006) | 2 lines
  Added missing svn:eol-style property to text files.
........
  r46497 | tim.peters | 2006-05-28 12:41:29 +0200 (Sun, 28 May 2006) | 3 lines
  PyErr_Display(), PyErr_WriteUnraisable():  Coverity found a cut-and-paste
  bug in both:  `className` was referenced before being checked for NULL.
........
  r46499 | fredrik.lundh | 2006-05-28 14:06:46 +0200 (Sun, 28 May 2006) | 5 lines
  needforspeed: added Py_MEMCPY macro (currently tuned for Visual C only),
  and use it for string copy operations.  this gives a 20% speedup on some
  string benchmarks.
........
  r46501 | michael.hudson | 2006-05-28 17:51:40 +0200 (Sun, 28 May 2006) | 26 lines
  Quality control, meet exceptions.c.
  Fix a number of problems with the need for speed code:
  One is doing this sort of thing:
      Py_DECREF(self->field);
      self->field = newval;
      Py_INCREF(self->field);
  without being very sure that self->field doesn't start with a
  value that has a __del__, because that almost certainly can lead
  to segfaults.
  As self->args is constrained to be an exact tuple we may as well
  exploit this fact consistently.  This leads to quite a lot of
  simplification (and, hey, probably better performance).
  Add some error checking in places lacking it.
  Fix some rather strange indentation in the Unicode code.
  Delete some trailing whitespace.
  More to come, I haven't fixed all the reference leaks yet...
........
  r46502 | george.yoshida | 2006-05-28 18:39:09 +0200 (Sun, 28 May 2006) | 3 lines
  Patch #1080727: add "encoding" parameter to doctest.DocFileSuite
  Contributed by Bjorn Tillenius.
........
  r46503 | martin.v.loewis | 2006-05-28 18:57:38 +0200 (Sun, 28 May 2006) | 4 lines
  Rest of patch #1490384: Commit icon source, remove
  claim that Erik von Blokland is the author of the
  installer picture.
........
  r46504 | michael.hudson | 2006-05-28 19:40:29 +0200 (Sun, 28 May 2006) | 16 lines
  Quality control, meet exceptions.c, round two.
  Make some functions that should have been static static.
  Fix a bunch of refleaks by fixing the definition of
  MiddlingExtendsException.
  Remove all the __new__ implementations apart from
  BaseException_new.  Rewrite most code that needs it to cope with
  NULL fields (such code could get excercised anyway, the
  __new__-removal just makes it more likely).  This involved
  editing the code for WindowsError, which I can't test.
  This fixes all the refleaks in at least the start of a regrtest
  -R :: run.
........
  r46505 | marc-andre.lemburg | 2006-05-28 19:46:58 +0200 (Sun, 28 May 2006) | 10 lines
  Initial version of systimes - a module to provide platform dependent
  performance measurements.
  The module is currently just a proof-of-concept implementation, but
  will integrated into pybench once it is stable enough.
  License: pybench license.
  Author: Marc-Andre Lemburg.
........
  r46507 | armin.rigo | 2006-05-28 21:13:17 +0200 (Sun, 28 May 2006) | 15 lines
  ("Forward-port" of r46506)
  Remove various dependencies on dictionary order in the standard library
  tests, and one (clearly an oversight, potentially critical) in the
  standard library itself - base64.py.
  Remaining open issues:
   * test_extcall is an output test, messy to make robust
   * tarfile.py has a potential bug here, but I'm not familiar
     enough with this code.  Filed in as SF bug #1496501.
   * urllib2.HTTPPasswordMgr() returns a random result if there is more
     than one matching root path.  I'm asking python-dev for
     clarification...
........
  r46508 | georg.brandl | 2006-05-28 22:11:45 +0200 (Sun, 28 May 2006) | 4 lines
  The empty string is a valid import path.
   (fixes #1496539)
........
  r46509 | georg.brandl | 2006-05-28 22:23:12 +0200 (Sun, 28 May 2006) | 3 lines
  Patch #1496206: urllib2 PasswordMgr ./. default ports
........
  r46510 | georg.brandl | 2006-05-28 22:57:09 +0200 (Sun, 28 May 2006) | 3 lines
  Fix refleaks in UnicodeError get and set methods.
........
  r46511 | michael.hudson | 2006-05-28 23:19:03 +0200 (Sun, 28 May 2006) | 3 lines
  use the UnicodeError traversal and clearing functions in UnicodeError
  subclasses.
........
  r46512 | thomas.wouters | 2006-05-28 23:32:12 +0200 (Sun, 28 May 2006) | 4 lines
  Make last patch valid C89 so Windows compilers can deal with it.
........
  r46513 | georg.brandl | 2006-05-28 23:42:54 +0200 (Sun, 28 May 2006) | 3 lines
  Fix ref-antileak in _struct.c which eventually lead to deallocating None.
........
  r46514 | georg.brandl | 2006-05-28 23:57:35 +0200 (Sun, 28 May 2006) | 4 lines
  Correct None refcount issue in Mac modules. (Are they
  still used?)
........
  r46515 | armin.rigo | 2006-05-29 00:07:08 +0200 (Mon, 29 May 2006) | 3 lines
  A clearer error message when passing -R to regrtest.py with
  release builds of Python.
........
  r46516 | georg.brandl | 2006-05-29 00:14:04 +0200 (Mon, 29 May 2006) | 3 lines
  Fix C function calling conventions in _sre module.
........
  r46517 | georg.brandl | 2006-05-29 00:34:51 +0200 (Mon, 29 May 2006) | 3 lines
  Convert audioop over to METH_VARARGS.
........
  r46518 | georg.brandl | 2006-05-29 00:38:57 +0200 (Mon, 29 May 2006) | 3 lines
  METH_NOARGS functions do get called with two args.
........
  r46519 | georg.brandl | 2006-05-29 11:46:51 +0200 (Mon, 29 May 2006) | 4 lines
  Fix refleak in socketmodule. Replace bogus Py_BuildValue calls.
  Fix refleak in exceptions.
........
  r46520 | nick.coghlan | 2006-05-29 14:43:05 +0200 (Mon, 29 May 2006) | 7 lines
  Apply modified version of Collin Winter's patch #1478788
  Renames functional extension module to _functools and adds a Python
  functools module so that utility functions like update_wrapper can be
  added easily.
........
  r46522 | georg.brandl | 2006-05-29 15:53:16 +0200 (Mon, 29 May 2006) | 3 lines
  Convert fmmodule to METH_VARARGS.
........
  r46523 | georg.brandl | 2006-05-29 16:13:21 +0200 (Mon, 29 May 2006) | 3 lines
  Fix #1494605.
........
  r46524 | georg.brandl | 2006-05-29 16:28:05 +0200 (Mon, 29 May 2006) | 3 lines
  Handle PyMem_Malloc failure in pystrtod.c. Closes #1494671.
........
  r46525 | georg.brandl | 2006-05-29 16:33:55 +0200 (Mon, 29 May 2006) | 3 lines
  Fix compiler warning.
........
  r46526 | georg.brandl | 2006-05-29 16:39:00 +0200 (Mon, 29 May 2006) | 3 lines
  Fix #1494787 (pyclbr counts whitespace as superclass name)
........
  r46527 | bob.ippolito | 2006-05-29 17:47:29 +0200 (Mon, 29 May 2006) | 1 line
  simplify the struct code a bit (no functional changes)
........
  r46528 | armin.rigo | 2006-05-29 19:59:47 +0200 (Mon, 29 May 2006) | 2 lines
  Silence a warning.
........
  r46529 | georg.brandl | 2006-05-29 21:39:45 +0200 (Mon, 29 May 2006) | 3 lines
  Correct some value converting strangenesses.
........
  r46530 | nick.coghlan | 2006-05-29 22:27:44 +0200 (Mon, 29 May 2006) | 1 line
  When adding a module like functools, it helps to let SVN know about the file.
........
  r46531 | georg.brandl | 2006-05-29 22:52:54 +0200 (Mon, 29 May 2006) | 4 lines
  Patches #1497027 and #972322: try HTTP digest auth first,
  and watch out for handler name collisions.
........
  r46532 | georg.brandl | 2006-05-29 22:57:01 +0200 (Mon, 29 May 2006) | 3 lines
  Add News entry for last commit.
........
  r46533 | georg.brandl | 2006-05-29 23:04:52 +0200 (Mon, 29 May 2006) | 4 lines
  Make use of METH_O and METH_NOARGS where possible.
  Use Py_UnpackTuple instead of PyArg_ParseTuple where possible.
........
  r46534 | georg.brandl | 2006-05-29 23:58:42 +0200 (Mon, 29 May 2006) | 3 lines
  Convert more modules to METH_VARARGS.
........
  r46535 | georg.brandl | 2006-05-30 00:00:30 +0200 (Tue, 30 May 2006) | 3 lines
  Whoops.
........
  r46536 | fredrik.lundh | 2006-05-30 00:42:07 +0200 (Tue, 30 May 2006) | 4 lines
  fixed "abc".count("", 100) == -96 error (hopefully, nobody's relying on
  the current behaviour ;-)
........
  r46537 | bob.ippolito | 2006-05-30 00:55:48 +0200 (Tue, 30 May 2006) | 1 line
  struct: modulo math plus warning on all endian-explicit formats for compatibility with older struct usage (ugly)
........
  r46539 | bob.ippolito | 2006-05-30 02:26:01 +0200 (Tue, 30 May 2006) | 1 line
  Add a length check to aifc to ensure it doesn't write a bogus file
........
  r46540 | tim.peters | 2006-05-30 04:25:25 +0200 (Tue, 30 May 2006) | 10 lines
  deprecated_err():  Stop bizarre warning messages when the tests
  are run in the order:
      test_genexps (or any other doctest-based test)
      test_struct
      test_doctest
  The `warnings` module needs an advertised way to save/restore
  its internal filter list.
........
  r46541 | tim.peters | 2006-05-30 04:26:46 +0200 (Tue, 30 May 2006) | 2 lines
  Whitespace normalization.
........
  r46542 | tim.peters | 2006-05-30 04:30:30 +0200 (Tue, 30 May 2006) | 2 lines
  Set a binary svn:mime-type property on this UTF-8 encoded file.
........
  r46543 | neal.norwitz | 2006-05-30 05:18:50 +0200 (Tue, 30 May 2006) | 1 line
  Simplify further by using AddStringConstant
........
  r46544 | tim.peters | 2006-05-30 06:16:25 +0200 (Tue, 30 May 2006) | 6 lines
  Convert relevant dict internals to Py_ssize_t.
  I don't have a box with nearly enough RAM, or an OS,
  that could get close to tickling this, though (requires
  a dict w/ at least 2**31 entries).
........
  r46545 | neal.norwitz | 2006-05-30 06:19:21 +0200 (Tue, 30 May 2006) | 1 line
  Remove stray | in comment
........
  r46546 | neal.norwitz | 2006-05-30 06:25:05 +0200 (Tue, 30 May 2006) | 1 line
  Use Py_SAFE_DOWNCAST for safety.  Fix format strings.  Remove 2 more stray | in comment
........
  r46547 | neal.norwitz | 2006-05-30 06:43:23 +0200 (Tue, 30 May 2006) | 1 line
  No DOWNCAST is required since sizeof(Py_ssize_t) >= sizeof(int) and Py_ReprEntr returns an int
........
  r46548 | tim.peters | 2006-05-30 07:04:59 +0200 (Tue, 30 May 2006) | 3 lines
  dict_print():  Explicitly narrow the return value
  from a (possibly) wider variable.
........
  r46549 | tim.peters | 2006-05-30 07:23:59 +0200 (Tue, 30 May 2006) | 5 lines
  dict_print():  So that Neal & I don't spend the rest of
  our lives taking turns rewriting code that works ;-),
  get rid of casting illusions by declaring a new variable
  with the obvious type.
........
  r46550 | georg.brandl | 2006-05-30 09:04:55 +0200 (Tue, 30 May 2006) | 3 lines
  Restore exception pickle support. #1497319.
........
  r46551 | georg.brandl | 2006-05-30 09:13:29 +0200 (Tue, 30 May 2006) | 3 lines
  Add a test case for exception pickling. args is never NULL.
........
  r46552 | neal.norwitz | 2006-05-30 09:21:10 +0200 (Tue, 30 May 2006) | 1 line
  Don't fail if the (sub)pkgname already exist.
........
  r46553 | georg.brandl | 2006-05-30 09:34:45 +0200 (Tue, 30 May 2006) | 3 lines
  Disallow keyword args for exceptions.
........
  r46554 | neal.norwitz | 2006-05-30 09:36:54 +0200 (Tue, 30 May 2006) | 5 lines
  I'm impatient.  I think this will fix a few more problems with the buildbots.
  I'm not sure this is the best approach, but I can't think of anything better.
  If this creates problems, feel free to revert, but I think it's safe and
  should make things a little better.
........
  r46555 | georg.brandl | 2006-05-30 10:17:00 +0200 (Tue, 30 May 2006) | 4 lines
  Do the check for no keyword arguments in __init__ so that
  subclasses of Exception can be supplied keyword args
........
  r46556 | georg.brandl | 2006-05-30 10:47:19 +0200 (Tue, 30 May 2006) | 3 lines
  Convert test_exceptions to unittest.
........
  r46557 | andrew.kuchling | 2006-05-30 14:52:01 +0200 (Tue, 30 May 2006) | 1 line
  Add SoC name, and reorganize this section a bit
........
  r46559 | tim.peters | 2006-05-30 17:53:34 +0200 (Tue, 30 May 2006) | 11 lines
  PyLong_FromString():  Continued fraction analysis (explained in
  a new comment) suggests there are almost certainly large input
  integers in all non-binary input bases for which one Python digit
  too few is initally allocated to hold the final result.  Instead
  of assert-failing when that happens, allocate more space.  Alas,
  I estimate it would take a few days to find a specific such case,
  so this isn't backed up by a new test (not to mention that such
  a case may take hours to run, since conversion time is quadratic
  in the number of digits, and preliminary attempts suggested that
  the smallest such inputs contain at least a million digits).
........
  r46560 | fredrik.lundh | 2006-05-30 19:11:48 +0200 (Tue, 30 May 2006) | 3 lines
  changed find/rfind to return -1 for matches outside the source string
........
  r46561 | bob.ippolito | 2006-05-30 19:37:54 +0200 (Tue, 30 May 2006) | 1 line
  Change wrapping terminology to overflow masking
........
  r46562 | fredrik.lundh | 2006-05-30 19:39:58 +0200 (Tue, 30 May 2006) | 3 lines
  changed count to return 0 for slices outside the source string
........
  r46568 | tim.peters | 2006-05-31 01:28:02 +0200 (Wed, 31 May 2006) | 2 lines
  Whitespace normalization.
........
  r46569 | brett.cannon | 2006-05-31 04:19:54 +0200 (Wed, 31 May 2006) | 5 lines
  Clarify wording on default values for strptime(); defaults are used when better
  values cannot be inferred.
  Closes bug #1496315.
........
  r46572 | neal.norwitz | 2006-05-31 09:43:27 +0200 (Wed, 31 May 2006) | 1 line
  Calculate smallest properly (it was off by one) and use proper ssize_t types for Win64
........
  r46573 | neal.norwitz | 2006-05-31 10:01:08 +0200 (Wed, 31 May 2006) | 1 line
  Revert last checkin, it is better to do make distclean
........
  r46574 | neal.norwitz | 2006-05-31 11:02:44 +0200 (Wed, 31 May 2006) | 3 lines
  On 64-bit platforms running test_struct after test_tarfile would fail
  since the deprecation warning wouldn't be raised.
........
  r46575 | thomas.heller | 2006-05-31 13:37:58 +0200 (Wed, 31 May 2006) | 3 lines
  PyTuple_Pack is not available in Python 2.3, but ctypes must stay
  compatible with that.
........
  r46576 | andrew.kuchling | 2006-05-31 15:18:56 +0200 (Wed, 31 May 2006) | 1 line
  'functional' module was renamed to 'functools'
........
  r46577 | kristjan.jonsson | 2006-05-31 15:35:41 +0200 (Wed, 31 May 2006) | 1 line
  Fixup the PCBuild8 project directory.  exceptions.c have moved to Objects, and the functionalmodule.c has been replaced with _functoolsmodule.c.  Other minor changes to .vcproj files and .sln to fix compilation
........
  r46578 | andrew.kuchling | 2006-05-31 16:08:48 +0200 (Wed, 31 May 2006) | 15 lines
  [Bug #1473048]
  SimpleXMLRPCServer and DocXMLRPCServer don't look at
  the path of the HTTP request at all; you can POST or
  GET from / or /RPC2 or /blahblahblah with the same results.
  Security scanners that look for /cgi-bin/phf will therefore report
  lots of vulnerabilities.
  Fix: add a .rpc_paths attribute to the SimpleXMLRPCServer class,
  and report a 404 error if the path isn't on the allowed list.
  Possibly-controversial aspect of this change: the default makes only
  '/' and '/RPC2' legal.  Maybe this will break people's applications
  (though I doubt it).  We could just set the default to an empty tuple,
  which would exactly match the current behaviour.
........
  r46579 | andrew.kuchling | 2006-05-31 16:12:47 +0200 (Wed, 31 May 2006) | 1 line
  Mention SimpleXMLRPCServer change
........
  r46580 | tim.peters | 2006-05-31 16:28:07 +0200 (Wed, 31 May 2006) | 2 lines
  Trimmed trailing whitespace.
........
  r46581 | tim.peters | 2006-05-31 17:33:22 +0200 (Wed, 31 May 2006) | 4 lines
  _range_error():  Speed and simplify (there's no real need for
  loops here).  Assert that size_t is actually big enough, and
  that f->size is at least one.  Wrap a long line.
........
  r46582 | tim.peters | 2006-05-31 17:34:37 +0200 (Wed, 31 May 2006) | 2 lines
  Repaired error in new comment.
........
  r46584 | neal.norwitz | 2006-06-01 07:32:49 +0200 (Thu, 01 Jun 2006) | 4 lines
  Remove ; at end of macro.  There was a compiler recently that warned
  about extra semi-colons.  It may have been the HP C compiler.
  This file will trigger a bunch of those warnings now.
........
  r46585 | georg.brandl | 2006-06-01 08:39:19 +0200 (Thu, 01 Jun 2006) | 3 lines
  Correctly unpickle 2.4 exceptions via __setstate__ (patch #1498571)
........
  r46586 | georg.brandl | 2006-06-01 10:27:32 +0200 (Thu, 01 Jun 2006) | 3 lines
  Correctly allocate complex types with tp_alloc. (bug #1498638)
........
  r46587 | georg.brandl | 2006-06-01 14:30:46 +0200 (Thu, 01 Jun 2006) | 2 lines
  Correctly dispatch Faults in loads (patch #1498627)
........
  r46588 | georg.brandl | 2006-06-01 15:00:49 +0200 (Thu, 01 Jun 2006) | 3 lines
  Some code style tweaks, and remove apply.
........
  r46589 | armin.rigo | 2006-06-01 15:19:12 +0200 (Thu, 01 Jun 2006) | 5 lines
  [ 1497053 ] Let dicts propagate the exceptions in user __eq__().
  [ 1456209 ] dictresize() vulnerability ( <- backport candidate ).
........
  r46590 | tim.peters | 2006-06-01 15:41:46 +0200 (Thu, 01 Jun 2006) | 2 lines
  Whitespace normalization.
........
  r46591 | tim.peters | 2006-06-01 15:49:23 +0200 (Thu, 01 Jun 2006) | 2 lines
  Record bugs 1275608 and 1456209 as being fixed.
........
  r46592 | tim.peters | 2006-06-01 15:56:26 +0200 (Thu, 01 Jun 2006) | 5 lines
  Re-enable a new empty-string test added during the NFS sprint,
  but disabled then because str and unicode strings gave different
  results.  The implementations were repaired later during the
  sprint, but the new test remained disabled.
........
  r46594 | tim.peters | 2006-06-01 17:50:44 +0200 (Thu, 01 Jun 2006) | 7 lines
  Armin committed his patch while I was reviewing it (I'm sure
  he didn't know this), so merged in some changes I made during
  review.  Nothing material apart from changing a new `mask` local
  from int to Py_ssize_t.  Mostly this is repairing comments that
  were made incorrect, and adding new comments.  Also a few
  minor code rewrites for clarity or helpful succinctness.
........
  r46599 | neal.norwitz | 2006-06-02 06:45:53 +0200 (Fri, 02 Jun 2006) | 1 line
  Convert docstrings to comments so regrtest -v prints method names
........
  r46600 | neal.norwitz | 2006-06-02 06:50:49 +0200 (Fri, 02 Jun 2006) | 2 lines
  Fix memory leak found by valgrind.
........
  r46601 | neal.norwitz | 2006-06-02 06:54:52 +0200 (Fri, 02 Jun 2006) | 1 line
  More memory leaks from valgrind
........
  r46602 | neal.norwitz | 2006-06-02 08:23:00 +0200 (Fri, 02 Jun 2006) | 11 lines
  Patch #1357836:
  Prevent an invalid memory read from test_coding in case the done flag is set.
  In that case, the loop isn't entered.  I wonder if rather than setting
  the done flag in the cases before the loop, if they should just exit early.
  This code looks like it should be refactored.
  Backport candidate (also the early break above if decoding_fgets fails)
........
  r46603 | martin.blais | 2006-06-02 15:03:43 +0200 (Fri, 02 Jun 2006) | 1 line
  Fixed struct test to not use unittest.
........
  r46605 | tim.peters | 2006-06-03 01:22:51 +0200 (Sat, 03 Jun 2006) | 10 lines
  pprint functions used to sort a dict (by key) if and only if
  the output required more than one line.  "Small" dicts got
  displayed in seemingly random order (the hash-induced order
  produced by dict.__repr__).  None of this was documented.
  Now pprint functions always sort dicts by key, and the docs
  promise it.
  This was proposed and agreed to during the PyCon 2006 core
  sprint -- I just didn't have time for it before now.
........
											 
										 
										
											2006-06-08 14:42:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Error  analysis :   as  above ,  the  number  of  Python  digits  ` n `  needed  is  worst -  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								case  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    n  > =  N  *  log ( B ) / log ( BASE ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								where  ` N `  is  the  number  of  input  digits  in  base  ` B ` .   This  is  computed  via  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_z  =  ( Py_ssize_t ) ( ( scan  -  str )  *  log_base_BASE [ base ] )  +  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								below .   Two  numeric  concerns  are  how  much  space  this  can  waste ,  and  whether  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								the  computed  result  can  be  too  small .   To  be  concrete ,  assume  BASE  =  2 * * 15 ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								which  is  the  default  ( and  it ' s  unlikely  anyone  changes  that ) .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Waste  isn ' t  a  problem :   provided  the  first  input  digit  isn ' t  0 ,  the  difference  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								between  the  worst - case  input  with  N  digits  and  the  smallest  input  with  N  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								digits  is  about  a  factor  of  B ,  but  B  is  small  compared  to  BASE  so  at  most  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								one  allocated  Python  digit  can  remain  unused  on  that  count .   If  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								N * log ( B ) / log ( BASE )  is  mathematically  an  exact  integer ,  then  truncating  that  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								and  adding  1  returns  a  result  1  larger  than  necessary .   However ,  that  can ' t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								happen :   whenever  B  is  a  power  of  2 ,  long_from_binary_base ( )  is  called  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								instead ,  and  it ' s  impossible  for  B * * i  to  be  an  integer  power  of  2 * * 15  when  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								B  is  not  a  power  of  2  ( i . e . ,  it ' s  impossible  for  N * log ( B ) / log ( BASE )  to  be  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								an  exact  integer  when  B  is  not  a  power  of  2 ,  since  B * * i  has  a  prime  factor  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								other  than  2  in  that  case ,  but  ( 2 * * 15 ) * * j ' s  only  prime  factor  is  2 ) .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The  computed  result  can  be  too  small  if  the  true  value  of  N * log ( B ) / log ( BASE )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is  a  little  bit  larger  than  an  exact  integer ,  but  due  to  roundoff  errors  ( in  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								computing  log ( B ) ,  log ( BASE ) ,  their  quotient ,  and / or  multiplying  that  by  N )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								yields  a  numeric  result  a  little  less  than  that  integer .   Unfortunately ,  " how  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								close  can  a  transcendental  function  get  to  an  integer  over  some  range ? "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								questions  are  generally  theoretically  intractable .   Computer  analysis  via  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								continued  fractions  is  practical :   expand  log ( B ) / log ( BASE )  via  continued  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fractions ,  giving  a  sequence  i / j  of  " the best "  rational  approximations .   Then  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								j * log ( B ) / log ( BASE )  is  approximately  equal  to  ( the  integer )  i .   This  shows  that  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								we  can  get  very  close  to  being  in  trouble ,  but  very  rarely .   For  example ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								76573  is  a  denominator  in  one  of  the  continued - fraction  approximations  to  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								log ( 10 ) / log ( 2 * * 15 ) ,  and  indeed :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    > > >  log ( 10 ) / log ( 2 * * 15 ) * 76573 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    16958.000000654003 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is  very  close  to  an  integer .   If  we  were  working  with  IEEE  single - precision ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								rounding  errors  could  kill  us .   Finding  worst  cases  in  IEEE  double - precision  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								requires  better - than - double - precision  log ( )  functions ,  and  Tim  didn ' t  bother .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Instead  the  code  checks  to  see  whether  the  allocated  space  is  enough  as  each  
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								new  Python  digit  is  added ,  and  copies  the  whole  thing  to  a  larger  int  if  not .  
						 
					
						
							
								
									
										
											 
										
											
												Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
merge in bad ways, so I'll have to merge that extra-carefully (probably manually.)
Merged revisions 46495-46605 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r46495 | tim.peters | 2006-05-28 03:52:38 +0200 (Sun, 28 May 2006) | 2 lines
  Added missing svn:eol-style property to text files.
........
  r46497 | tim.peters | 2006-05-28 12:41:29 +0200 (Sun, 28 May 2006) | 3 lines
  PyErr_Display(), PyErr_WriteUnraisable():  Coverity found a cut-and-paste
  bug in both:  `className` was referenced before being checked for NULL.
........
  r46499 | fredrik.lundh | 2006-05-28 14:06:46 +0200 (Sun, 28 May 2006) | 5 lines
  needforspeed: added Py_MEMCPY macro (currently tuned for Visual C only),
  and use it for string copy operations.  this gives a 20% speedup on some
  string benchmarks.
........
  r46501 | michael.hudson | 2006-05-28 17:51:40 +0200 (Sun, 28 May 2006) | 26 lines
  Quality control, meet exceptions.c.
  Fix a number of problems with the need for speed code:
  One is doing this sort of thing:
      Py_DECREF(self->field);
      self->field = newval;
      Py_INCREF(self->field);
  without being very sure that self->field doesn't start with a
  value that has a __del__, because that almost certainly can lead
  to segfaults.
  As self->args is constrained to be an exact tuple we may as well
  exploit this fact consistently.  This leads to quite a lot of
  simplification (and, hey, probably better performance).
  Add some error checking in places lacking it.
  Fix some rather strange indentation in the Unicode code.
  Delete some trailing whitespace.
  More to come, I haven't fixed all the reference leaks yet...
........
  r46502 | george.yoshida | 2006-05-28 18:39:09 +0200 (Sun, 28 May 2006) | 3 lines
  Patch #1080727: add "encoding" parameter to doctest.DocFileSuite
  Contributed by Bjorn Tillenius.
........
  r46503 | martin.v.loewis | 2006-05-28 18:57:38 +0200 (Sun, 28 May 2006) | 4 lines
  Rest of patch #1490384: Commit icon source, remove
  claim that Erik von Blokland is the author of the
  installer picture.
........
  r46504 | michael.hudson | 2006-05-28 19:40:29 +0200 (Sun, 28 May 2006) | 16 lines
  Quality control, meet exceptions.c, round two.
  Make some functions that should have been static static.
  Fix a bunch of refleaks by fixing the definition of
  MiddlingExtendsException.
  Remove all the __new__ implementations apart from
  BaseException_new.  Rewrite most code that needs it to cope with
  NULL fields (such code could get excercised anyway, the
  __new__-removal just makes it more likely).  This involved
  editing the code for WindowsError, which I can't test.
  This fixes all the refleaks in at least the start of a regrtest
  -R :: run.
........
  r46505 | marc-andre.lemburg | 2006-05-28 19:46:58 +0200 (Sun, 28 May 2006) | 10 lines
  Initial version of systimes - a module to provide platform dependent
  performance measurements.
  The module is currently just a proof-of-concept implementation, but
  will integrated into pybench once it is stable enough.
  License: pybench license.
  Author: Marc-Andre Lemburg.
........
  r46507 | armin.rigo | 2006-05-28 21:13:17 +0200 (Sun, 28 May 2006) | 15 lines
  ("Forward-port" of r46506)
  Remove various dependencies on dictionary order in the standard library
  tests, and one (clearly an oversight, potentially critical) in the
  standard library itself - base64.py.
  Remaining open issues:
   * test_extcall is an output test, messy to make robust
   * tarfile.py has a potential bug here, but I'm not familiar
     enough with this code.  Filed in as SF bug #1496501.
   * urllib2.HTTPPasswordMgr() returns a random result if there is more
     than one matching root path.  I'm asking python-dev for
     clarification...
........
  r46508 | georg.brandl | 2006-05-28 22:11:45 +0200 (Sun, 28 May 2006) | 4 lines
  The empty string is a valid import path.
   (fixes #1496539)
........
  r46509 | georg.brandl | 2006-05-28 22:23:12 +0200 (Sun, 28 May 2006) | 3 lines
  Patch #1496206: urllib2 PasswordMgr ./. default ports
........
  r46510 | georg.brandl | 2006-05-28 22:57:09 +0200 (Sun, 28 May 2006) | 3 lines
  Fix refleaks in UnicodeError get and set methods.
........
  r46511 | michael.hudson | 2006-05-28 23:19:03 +0200 (Sun, 28 May 2006) | 3 lines
  use the UnicodeError traversal and clearing functions in UnicodeError
  subclasses.
........
  r46512 | thomas.wouters | 2006-05-28 23:32:12 +0200 (Sun, 28 May 2006) | 4 lines
  Make last patch valid C89 so Windows compilers can deal with it.
........
  r46513 | georg.brandl | 2006-05-28 23:42:54 +0200 (Sun, 28 May 2006) | 3 lines
  Fix ref-antileak in _struct.c which eventually lead to deallocating None.
........
  r46514 | georg.brandl | 2006-05-28 23:57:35 +0200 (Sun, 28 May 2006) | 4 lines
  Correct None refcount issue in Mac modules. (Are they
  still used?)
........
  r46515 | armin.rigo | 2006-05-29 00:07:08 +0200 (Mon, 29 May 2006) | 3 lines
  A clearer error message when passing -R to regrtest.py with
  release builds of Python.
........
  r46516 | georg.brandl | 2006-05-29 00:14:04 +0200 (Mon, 29 May 2006) | 3 lines
  Fix C function calling conventions in _sre module.
........
  r46517 | georg.brandl | 2006-05-29 00:34:51 +0200 (Mon, 29 May 2006) | 3 lines
  Convert audioop over to METH_VARARGS.
........
  r46518 | georg.brandl | 2006-05-29 00:38:57 +0200 (Mon, 29 May 2006) | 3 lines
  METH_NOARGS functions do get called with two args.
........
  r46519 | georg.brandl | 2006-05-29 11:46:51 +0200 (Mon, 29 May 2006) | 4 lines
  Fix refleak in socketmodule. Replace bogus Py_BuildValue calls.
  Fix refleak in exceptions.
........
  r46520 | nick.coghlan | 2006-05-29 14:43:05 +0200 (Mon, 29 May 2006) | 7 lines
  Apply modified version of Collin Winter's patch #1478788
  Renames functional extension module to _functools and adds a Python
  functools module so that utility functions like update_wrapper can be
  added easily.
........
  r46522 | georg.brandl | 2006-05-29 15:53:16 +0200 (Mon, 29 May 2006) | 3 lines
  Convert fmmodule to METH_VARARGS.
........
  r46523 | georg.brandl | 2006-05-29 16:13:21 +0200 (Mon, 29 May 2006) | 3 lines
  Fix #1494605.
........
  r46524 | georg.brandl | 2006-05-29 16:28:05 +0200 (Mon, 29 May 2006) | 3 lines
  Handle PyMem_Malloc failure in pystrtod.c. Closes #1494671.
........
  r46525 | georg.brandl | 2006-05-29 16:33:55 +0200 (Mon, 29 May 2006) | 3 lines
  Fix compiler warning.
........
  r46526 | georg.brandl | 2006-05-29 16:39:00 +0200 (Mon, 29 May 2006) | 3 lines
  Fix #1494787 (pyclbr counts whitespace as superclass name)
........
  r46527 | bob.ippolito | 2006-05-29 17:47:29 +0200 (Mon, 29 May 2006) | 1 line
  simplify the struct code a bit (no functional changes)
........
  r46528 | armin.rigo | 2006-05-29 19:59:47 +0200 (Mon, 29 May 2006) | 2 lines
  Silence a warning.
........
  r46529 | georg.brandl | 2006-05-29 21:39:45 +0200 (Mon, 29 May 2006) | 3 lines
  Correct some value converting strangenesses.
........
  r46530 | nick.coghlan | 2006-05-29 22:27:44 +0200 (Mon, 29 May 2006) | 1 line
  When adding a module like functools, it helps to let SVN know about the file.
........
  r46531 | georg.brandl | 2006-05-29 22:52:54 +0200 (Mon, 29 May 2006) | 4 lines
  Patches #1497027 and #972322: try HTTP digest auth first,
  and watch out for handler name collisions.
........
  r46532 | georg.brandl | 2006-05-29 22:57:01 +0200 (Mon, 29 May 2006) | 3 lines
  Add News entry for last commit.
........
  r46533 | georg.brandl | 2006-05-29 23:04:52 +0200 (Mon, 29 May 2006) | 4 lines
  Make use of METH_O and METH_NOARGS where possible.
  Use Py_UnpackTuple instead of PyArg_ParseTuple where possible.
........
  r46534 | georg.brandl | 2006-05-29 23:58:42 +0200 (Mon, 29 May 2006) | 3 lines
  Convert more modules to METH_VARARGS.
........
  r46535 | georg.brandl | 2006-05-30 00:00:30 +0200 (Tue, 30 May 2006) | 3 lines
  Whoops.
........
  r46536 | fredrik.lundh | 2006-05-30 00:42:07 +0200 (Tue, 30 May 2006) | 4 lines
  fixed "abc".count("", 100) == -96 error (hopefully, nobody's relying on
  the current behaviour ;-)
........
  r46537 | bob.ippolito | 2006-05-30 00:55:48 +0200 (Tue, 30 May 2006) | 1 line
  struct: modulo math plus warning on all endian-explicit formats for compatibility with older struct usage (ugly)
........
  r46539 | bob.ippolito | 2006-05-30 02:26:01 +0200 (Tue, 30 May 2006) | 1 line
  Add a length check to aifc to ensure it doesn't write a bogus file
........
  r46540 | tim.peters | 2006-05-30 04:25:25 +0200 (Tue, 30 May 2006) | 10 lines
  deprecated_err():  Stop bizarre warning messages when the tests
  are run in the order:
      test_genexps (or any other doctest-based test)
      test_struct
      test_doctest
  The `warnings` module needs an advertised way to save/restore
  its internal filter list.
........
  r46541 | tim.peters | 2006-05-30 04:26:46 +0200 (Tue, 30 May 2006) | 2 lines
  Whitespace normalization.
........
  r46542 | tim.peters | 2006-05-30 04:30:30 +0200 (Tue, 30 May 2006) | 2 lines
  Set a binary svn:mime-type property on this UTF-8 encoded file.
........
  r46543 | neal.norwitz | 2006-05-30 05:18:50 +0200 (Tue, 30 May 2006) | 1 line
  Simplify further by using AddStringConstant
........
  r46544 | tim.peters | 2006-05-30 06:16:25 +0200 (Tue, 30 May 2006) | 6 lines
  Convert relevant dict internals to Py_ssize_t.
  I don't have a box with nearly enough RAM, or an OS,
  that could get close to tickling this, though (requires
  a dict w/ at least 2**31 entries).
........
  r46545 | neal.norwitz | 2006-05-30 06:19:21 +0200 (Tue, 30 May 2006) | 1 line
  Remove stray | in comment
........
  r46546 | neal.norwitz | 2006-05-30 06:25:05 +0200 (Tue, 30 May 2006) | 1 line
  Use Py_SAFE_DOWNCAST for safety.  Fix format strings.  Remove 2 more stray | in comment
........
  r46547 | neal.norwitz | 2006-05-30 06:43:23 +0200 (Tue, 30 May 2006) | 1 line
  No DOWNCAST is required since sizeof(Py_ssize_t) >= sizeof(int) and Py_ReprEntr returns an int
........
  r46548 | tim.peters | 2006-05-30 07:04:59 +0200 (Tue, 30 May 2006) | 3 lines
  dict_print():  Explicitly narrow the return value
  from a (possibly) wider variable.
........
  r46549 | tim.peters | 2006-05-30 07:23:59 +0200 (Tue, 30 May 2006) | 5 lines
  dict_print():  So that Neal & I don't spend the rest of
  our lives taking turns rewriting code that works ;-),
  get rid of casting illusions by declaring a new variable
  with the obvious type.
........
  r46550 | georg.brandl | 2006-05-30 09:04:55 +0200 (Tue, 30 May 2006) | 3 lines
  Restore exception pickle support. #1497319.
........
  r46551 | georg.brandl | 2006-05-30 09:13:29 +0200 (Tue, 30 May 2006) | 3 lines
  Add a test case for exception pickling. args is never NULL.
........
  r46552 | neal.norwitz | 2006-05-30 09:21:10 +0200 (Tue, 30 May 2006) | 1 line
  Don't fail if the (sub)pkgname already exist.
........
  r46553 | georg.brandl | 2006-05-30 09:34:45 +0200 (Tue, 30 May 2006) | 3 lines
  Disallow keyword args for exceptions.
........
  r46554 | neal.norwitz | 2006-05-30 09:36:54 +0200 (Tue, 30 May 2006) | 5 lines
  I'm impatient.  I think this will fix a few more problems with the buildbots.
  I'm not sure this is the best approach, but I can't think of anything better.
  If this creates problems, feel free to revert, but I think it's safe and
  should make things a little better.
........
  r46555 | georg.brandl | 2006-05-30 10:17:00 +0200 (Tue, 30 May 2006) | 4 lines
  Do the check for no keyword arguments in __init__ so that
  subclasses of Exception can be supplied keyword args
........
  r46556 | georg.brandl | 2006-05-30 10:47:19 +0200 (Tue, 30 May 2006) | 3 lines
  Convert test_exceptions to unittest.
........
  r46557 | andrew.kuchling | 2006-05-30 14:52:01 +0200 (Tue, 30 May 2006) | 1 line
  Add SoC name, and reorganize this section a bit
........
  r46559 | tim.peters | 2006-05-30 17:53:34 +0200 (Tue, 30 May 2006) | 11 lines
  PyLong_FromString():  Continued fraction analysis (explained in
  a new comment) suggests there are almost certainly large input
  integers in all non-binary input bases for which one Python digit
  too few is initally allocated to hold the final result.  Instead
  of assert-failing when that happens, allocate more space.  Alas,
  I estimate it would take a few days to find a specific such case,
  so this isn't backed up by a new test (not to mention that such
  a case may take hours to run, since conversion time is quadratic
  in the number of digits, and preliminary attempts suggested that
  the smallest such inputs contain at least a million digits).
........
  r46560 | fredrik.lundh | 2006-05-30 19:11:48 +0200 (Tue, 30 May 2006) | 3 lines
  changed find/rfind to return -1 for matches outside the source string
........
  r46561 | bob.ippolito | 2006-05-30 19:37:54 +0200 (Tue, 30 May 2006) | 1 line
  Change wrapping terminology to overflow masking
........
  r46562 | fredrik.lundh | 2006-05-30 19:39:58 +0200 (Tue, 30 May 2006) | 3 lines
  changed count to return 0 for slices outside the source string
........
  r46568 | tim.peters | 2006-05-31 01:28:02 +0200 (Wed, 31 May 2006) | 2 lines
  Whitespace normalization.
........
  r46569 | brett.cannon | 2006-05-31 04:19:54 +0200 (Wed, 31 May 2006) | 5 lines
  Clarify wording on default values for strptime(); defaults are used when better
  values cannot be inferred.
  Closes bug #1496315.
........
  r46572 | neal.norwitz | 2006-05-31 09:43:27 +0200 (Wed, 31 May 2006) | 1 line
  Calculate smallest properly (it was off by one) and use proper ssize_t types for Win64
........
  r46573 | neal.norwitz | 2006-05-31 10:01:08 +0200 (Wed, 31 May 2006) | 1 line
  Revert last checkin, it is better to do make distclean
........
  r46574 | neal.norwitz | 2006-05-31 11:02:44 +0200 (Wed, 31 May 2006) | 3 lines
  On 64-bit platforms running test_struct after test_tarfile would fail
  since the deprecation warning wouldn't be raised.
........
  r46575 | thomas.heller | 2006-05-31 13:37:58 +0200 (Wed, 31 May 2006) | 3 lines
  PyTuple_Pack is not available in Python 2.3, but ctypes must stay
  compatible with that.
........
  r46576 | andrew.kuchling | 2006-05-31 15:18:56 +0200 (Wed, 31 May 2006) | 1 line
  'functional' module was renamed to 'functools'
........
  r46577 | kristjan.jonsson | 2006-05-31 15:35:41 +0200 (Wed, 31 May 2006) | 1 line
  Fixup the PCBuild8 project directory.  exceptions.c have moved to Objects, and the functionalmodule.c has been replaced with _functoolsmodule.c.  Other minor changes to .vcproj files and .sln to fix compilation
........
  r46578 | andrew.kuchling | 2006-05-31 16:08:48 +0200 (Wed, 31 May 2006) | 15 lines
  [Bug #1473048]
  SimpleXMLRPCServer and DocXMLRPCServer don't look at
  the path of the HTTP request at all; you can POST or
  GET from / or /RPC2 or /blahblahblah with the same results.
  Security scanners that look for /cgi-bin/phf will therefore report
  lots of vulnerabilities.
  Fix: add a .rpc_paths attribute to the SimpleXMLRPCServer class,
  and report a 404 error if the path isn't on the allowed list.
  Possibly-controversial aspect of this change: the default makes only
  '/' and '/RPC2' legal.  Maybe this will break people's applications
  (though I doubt it).  We could just set the default to an empty tuple,
  which would exactly match the current behaviour.
........
  r46579 | andrew.kuchling | 2006-05-31 16:12:47 +0200 (Wed, 31 May 2006) | 1 line
  Mention SimpleXMLRPCServer change
........
  r46580 | tim.peters | 2006-05-31 16:28:07 +0200 (Wed, 31 May 2006) | 2 lines
  Trimmed trailing whitespace.
........
  r46581 | tim.peters | 2006-05-31 17:33:22 +0200 (Wed, 31 May 2006) | 4 lines
  _range_error():  Speed and simplify (there's no real need for
  loops here).  Assert that size_t is actually big enough, and
  that f->size is at least one.  Wrap a long line.
........
  r46582 | tim.peters | 2006-05-31 17:34:37 +0200 (Wed, 31 May 2006) | 2 lines
  Repaired error in new comment.
........
  r46584 | neal.norwitz | 2006-06-01 07:32:49 +0200 (Thu, 01 Jun 2006) | 4 lines
  Remove ; at end of macro.  There was a compiler recently that warned
  about extra semi-colons.  It may have been the HP C compiler.
  This file will trigger a bunch of those warnings now.
........
  r46585 | georg.brandl | 2006-06-01 08:39:19 +0200 (Thu, 01 Jun 2006) | 3 lines
  Correctly unpickle 2.4 exceptions via __setstate__ (patch #1498571)
........
  r46586 | georg.brandl | 2006-06-01 10:27:32 +0200 (Thu, 01 Jun 2006) | 3 lines
  Correctly allocate complex types with tp_alloc. (bug #1498638)
........
  r46587 | georg.brandl | 2006-06-01 14:30:46 +0200 (Thu, 01 Jun 2006) | 2 lines
  Correctly dispatch Faults in loads (patch #1498627)
........
  r46588 | georg.brandl | 2006-06-01 15:00:49 +0200 (Thu, 01 Jun 2006) | 3 lines
  Some code style tweaks, and remove apply.
........
  r46589 | armin.rigo | 2006-06-01 15:19:12 +0200 (Thu, 01 Jun 2006) | 5 lines
  [ 1497053 ] Let dicts propagate the exceptions in user __eq__().
  [ 1456209 ] dictresize() vulnerability ( <- backport candidate ).
........
  r46590 | tim.peters | 2006-06-01 15:41:46 +0200 (Thu, 01 Jun 2006) | 2 lines
  Whitespace normalization.
........
  r46591 | tim.peters | 2006-06-01 15:49:23 +0200 (Thu, 01 Jun 2006) | 2 lines
  Record bugs 1275608 and 1456209 as being fixed.
........
  r46592 | tim.peters | 2006-06-01 15:56:26 +0200 (Thu, 01 Jun 2006) | 5 lines
  Re-enable a new empty-string test added during the NFS sprint,
  but disabled then because str and unicode strings gave different
  results.  The implementations were repaired later during the
  sprint, but the new test remained disabled.
........
  r46594 | tim.peters | 2006-06-01 17:50:44 +0200 (Thu, 01 Jun 2006) | 7 lines
  Armin committed his patch while I was reviewing it (I'm sure
  he didn't know this), so merged in some changes I made during
  review.  Nothing material apart from changing a new `mask` local
  from int to Py_ssize_t.  Mostly this is repairing comments that
  were made incorrect, and adding new comments.  Also a few
  minor code rewrites for clarity or helpful succinctness.
........
  r46599 | neal.norwitz | 2006-06-02 06:45:53 +0200 (Fri, 02 Jun 2006) | 1 line
  Convert docstrings to comments so regrtest -v prints method names
........
  r46600 | neal.norwitz | 2006-06-02 06:50:49 +0200 (Fri, 02 Jun 2006) | 2 lines
  Fix memory leak found by valgrind.
........
  r46601 | neal.norwitz | 2006-06-02 06:54:52 +0200 (Fri, 02 Jun 2006) | 1 line
  More memory leaks from valgrind
........
  r46602 | neal.norwitz | 2006-06-02 08:23:00 +0200 (Fri, 02 Jun 2006) | 11 lines
  Patch #1357836:
  Prevent an invalid memory read from test_coding in case the done flag is set.
  In that case, the loop isn't entered.  I wonder if rather than setting
  the done flag in the cases before the loop, if they should just exit early.
  This code looks like it should be refactored.
  Backport candidate (also the early break above if decoding_fgets fails)
........
  r46603 | martin.blais | 2006-06-02 15:03:43 +0200 (Fri, 02 Jun 2006) | 1 line
  Fixed struct test to not use unittest.
........
  r46605 | tim.peters | 2006-06-03 01:22:51 +0200 (Sat, 03 Jun 2006) | 10 lines
  pprint functions used to sort a dict (by key) if and only if
  the output required more than one line.  "Small" dicts got
  displayed in seemingly random order (the hash-induced order
  produced by dict.__repr__).  None of this was documented.
  Now pprint functions always sort dicts by key, and the docs
  promise it.
  This was proposed and agreed to during the PyCon 2006 core
  sprint -- I just didn't have time for it before now.
........
											 
										 
										
											2006-06-08 14:42:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This  should  happen  extremely  rarely ,  and  in  fact  I  don ' t  have  a  test  case  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								that  triggers  it ( ! ) .   Instead  the  code  was  tested  by  artificially  allocating  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								just  1  digit  at  the  start ,  so  that  the  copying  code  was  exercised  for  every  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								digit  beyond  the  first .  
						 
					
						
							
								
									
										
											 
										
											
												Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Inherits test_gzip/test_tarfile failures on 64-bit platforms from the trunk,
but I don't want the merge to hang around too long (even though the regular
p3yk-contributors are/have been busy with other things.)
Merged revisions 45621-46490 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r45621 | george.yoshida | 2006-04-21 18:34:17 +0200 (Fri, 21 Apr 2006) | 2 lines
  Correct the grammar
........
  r45622 | tim.peters | 2006-04-21 18:34:54 +0200 (Fri, 21 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45624 | thomas.heller | 2006-04-21 18:48:56 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45625 | thomas.heller | 2006-04-21 18:51:04 +0200 (Fri, 21 Apr 2006) | 1 line
  Merge in changes from ctypes 0.9.9.6 upstream version.
........
  r45630 | thomas.heller | 2006-04-21 20:29:17 +0200 (Fri, 21 Apr 2006) | 8 lines
  Documentation for ctypes.
  I think that 'generic operating system services' is the best category.
  Note that the Doc/lib/libctypes.latex file is generated from reST sources.
  You are welcome to make typo fixes, and I'll try to keep the reST sources
  in sync, but markup changes would be lost - they should be fixed in the tool
  that creates the latex file.
  The conversion script is external/ctypes/docs/manual/mkpydoc.py.
........
  r45631 | tim.peters | 2006-04-21 23:18:10 +0200 (Fri, 21 Apr 2006) | 24 lines
  SF bug #1473760 TempFile can hang on Windows.
  Python 2.4 changed ntpath.abspath to do an import
  inside the function.  As a result, due to Python's
  import lock, anything calling abspath on Windows
  (directly, or indirectly like tempfile.TemporaryFile)
  hung when it was called from a thread spawned as a
  side effect of importing a module.
  This is a depressingly frequent problem, and
  deserves a more general fix.  I'm settling for
  a micro-fix here because this specific one accounts
  for a report of Zope Corp's ZEO hanging on Windows,
  and it was an odd way to change abspath to begin
  with (ntpath needs a different implementation
  depending on whether we're actually running on
  Windows, and the _obvious_ way to arrange for that
  is not to bury a possibly-failing import _inside_
  the function).
  Note that if/when other micro-fixes of this kind
  get made, the new Lib/test/threaded_import_hangers.py
  is a convenient place to add tests for them.
........
  r45634 | phillip.eby | 2006-04-21 23:53:37 +0200 (Fri, 21 Apr 2006) | 2 lines
  Guido wrote contextlib, not me, but thanks anyway.  ;)
........
  r45636 | andrew.kuchling | 2006-04-22 03:51:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Typo fixes
........
  r45638 | andrew.kuchling | 2006-04-22 03:58:40 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix comment typo
........
  r45639 | andrew.kuchling | 2006-04-22 04:06:03 +0200 (Sat, 22 Apr 2006) | 8 lines
  Make copy of test_mailbox.py.  We'll still want to check the backward
  compatibility classes in the new mailbox.py that I'll be committing in
  a few minutes.
  One change has been made: the tests use len(mbox) instead of len(mbox.boxes).
  The 'boxes' attribute was never documented and contains some internal state
  that seems unlikely to have been useful.
........
  r45640 | andrew.kuchling | 2006-04-22 04:32:43 +0200 (Sat, 22 Apr 2006) | 16 lines
  Add Gregory K. Johnson's revised version of mailbox.py (funded by
  the 2005 Summer of Code).
  The revision adds a number of new mailbox classes that support adding
  and removing messages; these classes also support mailbox locking and
  default to using email.Message instead of rfc822.Message.
  The old mailbox classes are largely left alone for backward compatibility.
  The exception is the Maildir class, which was present in the old module
  and now inherits from the new classes.  The Maildir class's interface
  is pretty simple, though, so I think it'll be compatible with existing
  code.
  (The change to the NEWS file also adds a missing word to a different
  news item, which unfortunately required rewrapping the line.)
........
  r45641 | tim.peters | 2006-04-22 07:52:59 +0200 (Sat, 22 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45642 | neal.norwitz | 2006-04-22 08:07:46 +0200 (Sat, 22 Apr 2006) | 1 line
  Add libctypes as a dep
........
  r45643 | martin.v.loewis | 2006-04-22 13:15:41 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t problems.
........
  r45644 | martin.v.loewis | 2006-04-22 13:40:03 +0200 (Sat, 22 Apr 2006) | 1 line
  Fix more ssize_t issues.
........
  r45645 | george.yoshida | 2006-04-22 17:10:49 +0200 (Sat, 22 Apr 2006) | 2 lines
  Typo fixes
........
  r45647 | martin.v.loewis | 2006-04-22 17:19:54 +0200 (Sat, 22 Apr 2006) | 1 line
  Port to Python 2.5. Drop .DEF file. Change output file names to .pyd.
........
  r45648 | george.yoshida | 2006-04-22 17:27:14 +0200 (Sat, 22 Apr 2006) | 3 lines
  - add versionadded tag
  - make arbitrary arguments come last
........
  r45649 | hyeshik.chang | 2006-04-22 17:48:15 +0200 (Sat, 22 Apr 2006) | 3 lines
  Remove $CJKCodecs$ RCS tags.  The CJKCodecs isn't maintained outside
  anymore.
........
  r45654 | greg.ward | 2006-04-23 05:47:58 +0200 (Sun, 23 Apr 2006) | 2 lines
  Update optparse to Optik 1.5.1.
........
  r45658 | george.yoshida | 2006-04-23 11:27:10 +0200 (Sun, 23 Apr 2006) | 2 lines
  wrap SyntaxError with \exception{}
........
  r45660 | ronald.oussoren | 2006-04-23 13:59:25 +0200 (Sun, 23 Apr 2006) | 6 lines
  Patch 1471925 - Weak linking support for OSX
  This patch causes several symbols in the socket and posix module to be weakly
  linked on OSX and disables usage of ftime on OSX. These changes make it possible
  to use a binary build on OSX 10.4 on a 10.3 system.
........
  r45661 | ronald.oussoren | 2006-04-23 14:36:23 +0200 (Sun, 23 Apr 2006) | 5 lines
  Patch 1471761 - test for broken poll at runtime
  This patch checks if poll is broken when the select module is loaded instead
  of doing so at configure-time. This functionality is only active on Mac OS X.
........
  r45662 | nick.coghlan | 2006-04-23 17:13:32 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a Context Types section to parallel the Iterator Types section (uses the same terminology as the 2.5a1 implementation)
........
  r45663 | nick.coghlan | 2006-04-23 17:14:37 +0200 (Sun, 23 Apr 2006) | 1 line
  Update contextlib documentation to use the same terminology as the module implementation
........
  r45664 | gerhard.haering | 2006-04-23 17:24:26 +0200 (Sun, 23 Apr 2006) | 2 lines
  Updated the sqlite3 module to the external pysqlite 2.2.2 version.
........
  r45666 | nick.coghlan | 2006-04-23 17:39:16 +0200 (Sun, 23 Apr 2006) | 1 line
  Update with statement documentation to use same terminology as 2.5a1 implementation
........
  r45667 | nick.coghlan | 2006-04-23 18:05:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Add a (very) brief mention of the with statement to the end of chapter 8
........
  r45668 | nick.coghlan | 2006-04-23 18:35:19 +0200 (Sun, 23 Apr 2006) | 1 line
  Take 2 on mentioning the with statement, this time without inadvertently killing the Unicode examples
........
  r45669 | nick.coghlan | 2006-04-23 19:04:07 +0200 (Sun, 23 Apr 2006) | 1 line
  Backdated NEWS entry to record the implementation of PEP 338 for alpha 1
........
  r45670 | tim.peters | 2006-04-23 20:13:45 +0200 (Sun, 23 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45671 | skip.montanaro | 2006-04-23 21:14:27 +0200 (Sun, 23 Apr 2006) | 1 line
  first cut at trace module doc
........
  r45672 | skip.montanaro | 2006-04-23 21:26:33 +0200 (Sun, 23 Apr 2006) | 1 line
  minor tweak
........
  r45673 | skip.montanaro | 2006-04-23 21:30:50 +0200 (Sun, 23 Apr 2006) | 1 line
  it's always helpful if the example works...
........
  r45674 | skip.montanaro | 2006-04-23 21:32:14 +0200 (Sun, 23 Apr 2006) | 1 line
  correct example
........
  r45675 | andrew.kuchling | 2006-04-23 23:01:04 +0200 (Sun, 23 Apr 2006) | 1 line
  Edits to the PEP 343 section
........
  r45676 | andrew.kuchling | 2006-04-23 23:51:10 +0200 (Sun, 23 Apr 2006) | 1 line
  Add two items
........
  r45677 | tim.peters | 2006-04-24 04:03:16 +0200 (Mon, 24 Apr 2006) | 5 lines
  Bug #1337990: clarified that `doctest` does not support examples
  requiring both expected output and an exception.
  I'll backport to 2.4 next.
........
  r45679 | nick.coghlan | 2006-04-24 05:04:43 +0200 (Mon, 24 Apr 2006) | 1 line
  Note changes made to PEP 343 related documentation
........
  r45681 | nick.coghlan | 2006-04-24 06:17:02 +0200 (Mon, 24 Apr 2006) | 1 line
  Change PEP 343 related documentation to use the term context specifier instead of context object
........
  r45682 | nick.coghlan | 2006-04-24 06:32:47 +0200 (Mon, 24 Apr 2006) | 1 line
  Add unit tests for the -m and -c command line switches
........
  r45683 | nick.coghlan | 2006-04-24 06:37:15 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix contextlib.nested to cope with exit methods raising and handling exceptions
........
  r45685 | nick.coghlan | 2006-04-24 06:59:28 +0200 (Mon, 24 Apr 2006) | 1 line
  Fix broken contextlib test from last checkin (I'd've sworn I tested that before checking it in. . .)
........
  r45686 | nick.coghlan | 2006-04-24 07:24:26 +0200 (Mon, 24 Apr 2006) | 1 line
  Back out new command line tests (broke buildbot)
........
  r45687 | nick.coghlan | 2006-04-24 07:52:15 +0200 (Mon, 24 Apr 2006) | 1 line
  More reliable version of new command line tests that just checks the exit codes
........
  r45688 | thomas.wouters | 2006-04-24 13:37:13 +0200 (Mon, 24 Apr 2006) | 4 lines
  Stop test_tcl's testLoadTk from leaking the Tk commands 'loadtk' registers.
........
  r45690 | andrew.kuchling | 2006-04-24 16:30:47 +0200 (Mon, 24 Apr 2006) | 2 lines
  Edits, using the new term
  'context specifier' in a few places
........
  r45697 | phillip.eby | 2006-04-24 22:53:13 +0200 (Mon, 24 Apr 2006) | 2 lines
  Revert addition of setuptools
........
  r45698 | tim.peters | 2006-04-25 00:45:13 +0200 (Tue, 25 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45700 | trent.mick | 2006-04-25 02:34:50 +0200 (Tue, 25 Apr 2006) | 4 lines
  Put break at correct level so *all* root HKEYs acutally get checked for
  an installed VC6. Otherwise only the first such tree gets checked and this
  warning doesn't get displayed.
........
  r45701 | tim.peters | 2006-04-25 05:31:36 +0200 (Tue, 25 Apr 2006) | 3 lines
  Patch #1475231:  add a new SKIP doctest option, thanks to
  Edward Loper.
........
  r45702 | neal.norwitz | 2006-04-25 07:04:35 +0200 (Tue, 25 Apr 2006) | 1 line
  versionadded for SKIP
........
  r45703 | neal.norwitz | 2006-04-25 07:05:03 +0200 (Tue, 25 Apr 2006) | 1 line
  Restore Walters name
........
  r45704 | neal.norwitz | 2006-04-25 07:49:42 +0200 (Tue, 25 Apr 2006) | 1 line
  Revert previous change, SKIP had a versionadded elsewhere
........
  r45706 | nick.coghlan | 2006-04-25 12:56:51 +0200 (Tue, 25 Apr 2006) | 31 lines
  Move the PEP 343 documentation and implementation closer to the
  terminology in the alpha 1 documentation.
   - "context manager" reverts to its alpha 1 definition
   - the term "context specifier" goes away entirely
   - contextlib.GeneratorContextManager is renamed GeneratorContext
  There are still a number of changes relative to alpha 1:
    - the expression in the with statement is explicitly called the
      "context expression" in the language reference
    - the terms 'with statement context', 'context object' or 'with
      statement context' are used in several places instead of a bare
      'context'. The aim of this is to avoid ambiguity in relation to the
      runtime context set up when the block is executed, and the context
      objects that already exist in various application domains (such as
      decimal.Context)
    - contextlib.contextmanager is renamed to contextfactory
      This best reflects the nature of the function resulting from the
      use of that decorator
    - decimal.ContextManager is renamed to WithStatementContext
      Simple dropping the 'Manager' part wasn't possible due to the
      fact that decimal.Context already exists and means something
      different. WithStatementContext is ugly but workable.
  A technically unrelated change snuck into this commit:
  contextlib.closing now avoids the overhead of creating a
  generator, since it's trivial to implement that particular
  context manager directly.
........
  r45707 | nick.coghlan | 2006-04-25 13:05:56 +0200 (Tue, 25 Apr 2006) | 1 line
  Fix latex typo
........
  r45708 | thomas.wouters | 2006-04-25 14:28:56 +0200 (Tue, 25 Apr 2006) | 4 lines
  Fix markup glitch in unittest docs. Will backport.
........
  r45710 | andrew.kuchling | 2006-04-25 14:31:38 +0200 (Tue, 25 Apr 2006) | 1 line
  Add two items; easy_install is now off the table, though pkgutil still is
........
  r45711 | andrew.kuchling | 2006-04-25 14:47:25 +0200 (Tue, 25 Apr 2006) | 1 line
  Rework context terminology
........
  r45712 | thomas.wouters | 2006-04-25 15:53:23 +0200 (Tue, 25 Apr 2006) | 9 lines
  SF bug/patch #1433877: string parameter to ioctl not null terminated
  The new char-array used in ioctl calls wasn't explicitly NUL-terminated;
  quite probably the cause for the test_pty failures on Solaris that we
  circumvented earlier. (I wasn't able to reproduce it with this patch, but it
  has been somewhat elusive to start with.)
........
  r45713 | george.yoshida | 2006-04-25 16:09:58 +0200 (Tue, 25 Apr 2006) | 2 lines
  minor tweak
........
  r45714 | thomas.wouters | 2006-04-25 17:08:10 +0200 (Tue, 25 Apr 2006) | 7 lines
  Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
  AF_PACKET cases in getsockaddrarg were missing their own checks for
  tuple-ness of the address argument, which means a confusing SystemError was
  raised by PyArg_ParseTuple instead.
........
  r45715 | thomas.wouters | 2006-04-25 17:29:46 +0200 (Tue, 25 Apr 2006) | 10 lines
  Define MAXPATHLEN to be at least PATH_MAX, if that's defined. Python uses
  MAXPATHLEN-sized buffers for various output-buffers (like to realpath()),
  and that's correct on BSD platforms, but not Linux (which uses PATH_MAX, and
  does not define MAXPATHLEN.) Cursory googling suggests Linux is following a
  newer standard than BSD, but in cases like this, who knows. Using the
  greater of PATH_MAX and 1024 as a fallback for MAXPATHLEN seems to be the
  most portable solution.
........
  r45717 | thomas.heller | 2006-04-25 20:26:08 +0200 (Tue, 25 Apr 2006) | 3 lines
  Fix compiler warnings on Darwin.
  Patch by Brett Canon, see
  https://sourceforge.net/tracker/?func=detail&atid=532156&aid=1475959&group_id=71702
........
  r45718 | guido.van.rossum | 2006-04-25 22:12:45 +0200 (Tue, 25 Apr 2006) | 4 lines
  Implement MvL's improvement on __context__ in Condition;
  this can just call __context__ on the underlying lock.
  (The same change for Semaphore does *not* work!)
........
  r45721 | tim.peters | 2006-04-26 03:15:53 +0200 (Wed, 26 Apr 2006) | 13 lines
  Rev 45706 renamed stuff in contextlib.py, but didn't rename
  uses of it in test_with.py.  As a result, test_with has been skipped
  (due to failing imports) on all buildbot boxes since.  Alas, that's
  not a test failure -- you have to pay attention to the
      1 skip unexpected on PLATFORM:
          test_with
  kinds of output at the ends of test runs to notice that this got
  broken.
  It's likely that more renaming in test_with.py would be desirable.
........
  r45722 | fred.drake | 2006-04-26 07:15:41 +0200 (Wed, 26 Apr 2006) | 1 line
  markup fixes, cleanup
........
  r45723 | fred.drake | 2006-04-26 07:19:39 +0200 (Wed, 26 Apr 2006) | 1 line
  minor adjustment suggested by Peter Gephardt
........
  r45724 | neal.norwitz | 2006-04-26 07:34:03 +0200 (Wed, 26 Apr 2006) | 10 lines
  Patch from Aldo Cortesi (OpenBSD buildbot owner).
  After the patch (45590) to add extra debug stats to the gc module, Python
  was crashing on OpenBSD due to:
  	Fatal Python error: Interpreter not initialized (version mismatch?)
  This seems to occur due to calling collect() when initialized (in pythonrun.c)
  is set to 0.  Now, the import will occur in the init function which
  shouldn't suffer this problem.
........
  r45725 | neal.norwitz | 2006-04-26 08:26:12 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix this test on Solaris.  There can be embedded \r, so don't just replace
  the one at the end.
........
  r45727 | nick.coghlan | 2006-04-26 13:50:04 +0200 (Wed, 26 Apr 2006) | 1 line
  Fix an error in the last contextlib.closing example
........
  r45728 | andrew.kuchling | 2006-04-26 14:21:06 +0200 (Wed, 26 Apr 2006) | 1 line
  [Bug #1475080] Fix example
........
  r45729 | andrew.kuchling | 2006-04-26 14:23:39 +0200 (Wed, 26 Apr 2006) | 1 line
  Add labels to all sections
........
  r45730 | thomas.wouters | 2006-04-26 17:53:30 +0200 (Wed, 26 Apr 2006) | 7 lines
  The result of SF patch #1471578: big-memory tests for strings, lists and
  tuples. Lots to be added, still, but this will give big-memory people
  something to play with in 2.5 alpha 2, and hopefully get more people to
  write these tests.
........
  r45731 | tim.peters | 2006-04-26 19:11:16 +0200 (Wed, 26 Apr 2006) | 2 lines
  Whitespace normalization.
........
  r45732 | martin.v.loewis | 2006-04-26 19:19:44 +0200 (Wed, 26 Apr 2006) | 1 line
  Use GS- and bufferoverlowU.lib where appropriate, for AMD64.
........
  r45733 | thomas.wouters | 2006-04-26 20:46:01 +0200 (Wed, 26 Apr 2006) | 5 lines
  Add tests for += and *= on strings, and fix the memory-use estimate for the
  list.extend tests (they were estimating half the actual use.)
........
  r45734 | thomas.wouters | 2006-04-26 21:14:46 +0200 (Wed, 26 Apr 2006) | 5 lines
  Some more test-size-estimate fixes: test_append and test_insert trigger a
  list resize, which overallocates.
........
  r45735 | hyeshik.chang | 2006-04-26 21:20:26 +0200 (Wed, 26 Apr 2006) | 3 lines
  Fix build on MIPS for libffi.  I haven't tested this yet because I
  don't have an access on MIPS machines.  Will be tested by buildbot. :)
........
  r45737 | fred.drake | 2006-04-27 01:40:32 +0200 (Thu, 27 Apr 2006) | 1 line
  one more place to use the current Python version
........
  r45738 | fred.drake | 2006-04-27 02:02:24 +0200 (Thu, 27 Apr 2006) | 3 lines
  - update version numbers in file names again, until we have a better way
  - elaborate instructions for Cygwin support (closes SF #839709)
........
  r45739 | fred.drake | 2006-04-27 02:20:14 +0200 (Thu, 27 Apr 2006) | 1 line
  add missing word
........
  r45740 | anthony.baxter | 2006-04-27 04:11:24 +0200 (Thu, 27 Apr 2006) | 2 lines
  2.5a2
........
  r45741 | anthony.baxter | 2006-04-27 04:13:13 +0200 (Thu, 27 Apr 2006) | 1 line
  2.5a2
........
  r45749 | andrew.kuchling | 2006-04-27 14:22:37 +0200 (Thu, 27 Apr 2006) | 1 line
  Now that 2.5a2 is out, revert to the current date
........
  r45750 | andrew.kuchling | 2006-04-27 14:23:07 +0200 (Thu, 27 Apr 2006) | 1 line
  Bump document version
........
  r45751 | andrew.kuchling | 2006-04-27 14:34:39 +0200 (Thu, 27 Apr 2006) | 6 lines
  [Bug #1477102] Add necessary import to example
  This may be a useful style question for the docs -- should examples show
  the necessary imports, or should it be assumed that the reader will
  figure it out?  In the What's New, I'm not consistent but usually opt
  for omitting the imports.
........
  r45753 | andrew.kuchling | 2006-04-27 14:38:35 +0200 (Thu, 27 Apr 2006) | 1 line
  [Bug #1477140] Import Error base class
........
  r45754 | andrew.kuchling | 2006-04-27 14:42:54 +0200 (Thu, 27 Apr 2006) | 1 line
  Mention the xmlrpclib.Error base class, which is used in one of the examples
........
  r45756 | george.yoshida | 2006-04-27 15:41:07 +0200 (Thu, 27 Apr 2006) | 2 lines
  markup fix
........
  r45757 | thomas.wouters | 2006-04-27 15:46:59 +0200 (Thu, 27 Apr 2006) | 4 lines
  Some more size-estimate fixes, for large-list-tests.
........
  r45758 | thomas.heller | 2006-04-27 17:50:42 +0200 (Thu, 27 Apr 2006) | 3 lines
  Rerun the libffi configuration if any of the files used for that
  are newer then fficonfig.py.
........
  r45766 | thomas.wouters | 2006-04-28 00:37:50 +0200 (Fri, 28 Apr 2006) | 6 lines
  Some style fixes and size-calculation fixes. Also do the small-memory run
  using a prime number, rather than a convenient power-of-2-and-multiple-of-5,
  so incorrect testing algorithms fail more easily.
........
  r45767 | thomas.wouters | 2006-04-28 00:38:32 +0200 (Fri, 28 Apr 2006) | 6 lines
  Do the small-memory run of big-meormy tests using a prime number, rather
  than a convenient power-of-2-and-multiple-of-5, so incorrect testing
  algorithms fail more easily.
........
  r45768 | david.goodger | 2006-04-28 00:53:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Added SVN access for Steven Bethard and Talin, for PEP updating.
........
  r45770 | thomas.wouters | 2006-04-28 01:13:20 +0200 (Fri, 28 Apr 2006) | 16 lines
   - Add new Warning class, ImportWarning
   - Warn-raise ImportWarning when importing would have picked up a directory
     as package, if only it'd had an __init__.py. This swaps two tests (for
     case-ness and __init__-ness), but case-test is not really more expensive,
     and it's not in a speed-critical section.
   - Test for the new warning by importing a common non-package directory on
     sys.path: site-packages
   - In regrtest.py, silence warnings generated by the build-environment
     because Modules/ (which is added to sys.path for Setup-created modules)
     has 'zlib' and '_ctypes' directories without __init__.py's.
........
  r45771 | thomas.wouters | 2006-04-28 01:41:27 +0200 (Fri, 28 Apr 2006) | 6 lines
  Add more ignores of ImportWarnings; these are all just potential triggers
  (since they won't trigger if zlib is already sucessfully imported); they
  were found by grepping .py files, instead of looking at warning output :)
........
  r45773 | neal.norwitz | 2006-04-28 06:32:20 +0200 (Fri, 28 Apr 2006) | 1 line
  Add some whitespace to be more consistent.
........
  r45774 | neal.norwitz | 2006-04-28 06:34:43 +0200 (Fri, 28 Apr 2006) | 5 lines
  Try to really fix the slow buildbots this time.
  Printing to stdout, doesn't mean the data was actually written.
  It depends on the buffering, so we need to flush.  This will hopefully
  really fix the buildbots getting killed due to no output on the slow bots.
........
  r45775 | neal.norwitz | 2006-04-28 07:28:05 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix some warnings on Mac OS X 10.4
........
  r45776 | neal.norwitz | 2006-04-28 07:28:30 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on alpha
........
  r45777 | neal.norwitz | 2006-04-28 07:28:54 +0200 (Fri, 28 Apr 2006) | 1 line
  Fix a warning on ppc (debian)
........
  r45778 | george.yoshida | 2006-04-28 18:09:45 +0200 (Fri, 28 Apr 2006) | 2 lines
  fix markup glitch
........
  r45780 | georg.brandl | 2006-04-28 18:31:17 +0200 (Fri, 28 Apr 2006) | 3 lines
  Add SeaMonkey to the list of Mozilla browsers.
........
  r45781 | georg.brandl | 2006-04-28 18:36:55 +0200 (Fri, 28 Apr 2006) | 2 lines
  Bug #1475009: clarify ntpath.join behavior with absolute components
........
  r45783 | george.yoshida | 2006-04-28 18:40:14 +0200 (Fri, 28 Apr 2006) | 2 lines
  correct a dead link
........
  r45785 | georg.brandl | 2006-04-28 18:54:25 +0200 (Fri, 28 Apr 2006) | 4 lines
  Bug #1472949: stringify IOErrors in shutil.copytree when appending
  them to the Error errors list.
........
  r45786 | georg.brandl | 2006-04-28 18:58:52 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478326: don't allow '/' in distutils.util.get_platform machine names
  since this value is used to name the build directory.
........
  r45788 | thomas.heller | 2006-04-28 19:02:18 +0200 (Fri, 28 Apr 2006) | 1 line
  Remove a duplicated test (the same test is in test_incomplete.py).
........
  r45792 | georg.brandl | 2006-04-28 21:09:24 +0200 (Fri, 28 Apr 2006) | 3 lines
  Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
  possibly "rounding up" to the next whole second.
........
  r45796 | george.yoshida | 2006-04-29 04:43:30 +0200 (Sat, 29 Apr 2006) | 2 lines
  grammar fix
........
  r45800 | ronald.oussoren | 2006-04-29 13:31:35 +0200 (Sat, 29 Apr 2006) | 2 lines
  Patch 1471883: --enable-universalsdk on Mac OS X
........
  r45801 | andrew.kuchling | 2006-04-29 13:53:15 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45802 | andrew.kuchling | 2006-04-29 14:10:28 +0200 (Sat, 29 Apr 2006) | 1 line
  Make case of 'ZIP' consistent
........
  r45803 | andrew.kuchling | 2006-04-29 14:10:43 +0200 (Sat, 29 Apr 2006) | 1 line
  Add item
........
  r45808 | martin.v.loewis | 2006-04-29 14:37:25 +0200 (Sat, 29 Apr 2006) | 3 lines
  Further changes for #1471883: Edit Misc/NEWS, and
  add expat_config.h.
........
  r45809 | brett.cannon | 2006-04-29 23:29:50 +0200 (Sat, 29 Apr 2006) | 2 lines
  Fix docstring for contextfactory; mentioned old contextmanager name.
........
  r45810 | gerhard.haering | 2006-04-30 01:12:41 +0200 (Sun, 30 Apr 2006) | 3 lines
  This is the start of documentation for the sqlite3 module. Please feel free to
  find a better place for the link to it than alongside bsddb & friends.
........
  r45811 | andrew.kuchling | 2006-04-30 03:07:09 +0200 (Sun, 30 Apr 2006) | 1 line
  Add two items
........
  r45814 | george.yoshida | 2006-04-30 05:49:56 +0200 (Sun, 30 Apr 2006) | 2 lines
  Use \versionchanged instead of \versionadded for new parameter support.
........
  r45815 | georg.brandl | 2006-04-30 09:06:11 +0200 (Sun, 30 Apr 2006) | 2 lines
  Patch #1470846: fix urllib2 ProxyBasicAuthHandler.
........
  r45817 | georg.brandl | 2006-04-30 10:57:35 +0200 (Sun, 30 Apr 2006) | 3 lines
  In stdlib, use hashlib instead of deprecated md5 and sha modules.
........
  r45819 | georg.brandl | 2006-04-30 11:23:59 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1470976: don't NLST files when retrieving over FTP.
........
  r45821 | georg.brandl | 2006-04-30 13:13:56 +0200 (Sun, 30 Apr 2006) | 6 lines
  Bug #1473625: stop cPickle making float dumps locale dependent in protocol 0.
  On the way, add a decorator to test_support to facilitate running single
  test functions in different locales with automatic cleanup.
........
  r45822 | phillip.eby | 2006-04-30 17:59:26 +0200 (Sun, 30 Apr 2006) | 2 lines
  Fix infinite regress when inspecting <string> or <stdin> frames.
........
  r45824 | georg.brandl | 2006-04-30 19:42:26 +0200 (Sun, 30 Apr 2006) | 3 lines
  Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache.
........
  r45825 | georg.brandl | 2006-04-30 20:14:54 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.
........
  r45826 | georg.brandl | 2006-04-30 21:34:19 +0200 (Sun, 30 Apr 2006) | 3 lines
  Patch #1479438: add \keyword markup for "with".
........
  r45827 | andrew.kuchling | 2006-04-30 23:19:31 +0200 (Sun, 30 Apr 2006) | 1 line
  Add urllib2 HOWTO from Michael Foord
........
  r45828 | andrew.kuchling | 2006-04-30 23:19:49 +0200 (Sun, 30 Apr 2006) | 1 line
  Add item
........
  r45830 | barry.warsaw | 2006-05-01 05:03:02 +0200 (Mon, 01 May 2006) | 11 lines
  Port forward from 2.4 branch:
  Patch #1464708 from William McVey: fixed handling of nested comments in mail
  addresses.  E.g.
  "Foo ((Foo Bar)) <foo@example.com>"
  Fixes for both rfc822.py and email package.  This patch needs to be back
  ported to Python 2.3 for email 2.5.
........
  r45832 | fred.drake | 2006-05-01 08:25:58 +0200 (Mon, 01 May 2006) | 4 lines
  - minor clarification in section title
  - markup adjustments
  (there is clearly much to be done in this section)
........
  r45833 | martin.v.loewis | 2006-05-01 08:28:01 +0200 (Mon, 01 May 2006) | 2 lines
  Work around deadlock risk. Will backport.
........
  r45836 | andrew.kuchling | 2006-05-01 14:45:02 +0200 (Mon, 01 May 2006) | 1 line
  Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren()
........
  r45837 | gerhard.haering | 2006-05-01 17:14:48 +0200 (Mon, 01 May 2006) | 3 lines
  Further integration of the documentation for the sqlite3 module. There's still
  quite some content to move over from the pysqlite manual, but it's a start now.
........
  r45838 | martin.v.loewis | 2006-05-01 17:56:03 +0200 (Mon, 01 May 2006) | 2 lines
  Rename uisample to text, drop all non-text tables.
........
  r45839 | martin.v.loewis | 2006-05-01 18:12:44 +0200 (Mon, 01 May 2006) | 2 lines
  Add msilib documentation.
........
  r45840 | martin.v.loewis | 2006-05-01 18:14:16 +0200 (Mon, 01 May 2006) | 4 lines
  Rename parameters to match the documentation (which
  in turn matches Microsoft's documentation).
  Drop unused parameter in CAB.append.
........
  r45841 | fred.drake | 2006-05-01 18:28:54 +0200 (Mon, 01 May 2006) | 1 line
  add dependency
........
  r45842 | andrew.kuchling | 2006-05-01 18:30:25 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes; add some XXX comments noting problems
........
  r45843 | andrew.kuchling | 2006-05-01 18:32:49 +0200 (Mon, 01 May 2006) | 1 line
  Add item
........
  r45844 | andrew.kuchling | 2006-05-01 19:06:54 +0200 (Mon, 01 May 2006) | 1 line
  Markup fixes
........
  r45850 | neal.norwitz | 2006-05-02 06:43:14 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479181: split open() and file() from being aliases for each other.
........
  r45852 | neal.norwitz | 2006-05-02 08:23:22 +0200 (Tue, 02 May 2006) | 1 line
  Try to fix breakage caused by patch #1479181, r45850
........
  r45853 | fred.drake | 2006-05-02 08:53:59 +0200 (Tue, 02 May 2006) | 3 lines
  SF #1479988: add methods to allow access to weakrefs for the
  weakref.WeakKeyDictionary and weakref.WeakValueDictionary
........
  r45854 | neal.norwitz | 2006-05-02 09:27:47 +0200 (Tue, 02 May 2006) | 5 lines
  Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1.
  The problem was that pyconfig.h was being included before some system headers
  which caused redefinitions and other breakage.  This moves system headers
  after expat_config.h which includes pyconfig.h.
........
  r45855 | vinay.sajip | 2006-05-02 10:35:36 +0200 (Tue, 02 May 2006) | 1 line
  Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!?
........
  r45856 | andrew.kuchling | 2006-05-02 13:30:03 +0200 (Tue, 02 May 2006) | 1 line
  Provide encoding as keyword argument; soften warning paragraph about encodings
........
  r45858 | guido.van.rossum | 2006-05-02 19:36:09 +0200 (Tue, 02 May 2006) | 2 lines
  Fix the formatting of KeyboardInterrupt -- a bad issubclass() call.
........
  r45862 | guido.van.rossum | 2006-05-02 21:47:52 +0200 (Tue, 02 May 2006) | 7 lines
  Get rid of __context__, per the latest changes to PEP 343 and python-dev
  discussion.
  There are two places of documentation that still mention __context__:
  Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without
  spending a whole lot of time thinking about it; and whatsnew, which Andrew
  usually likes to change himself.
........
  r45863 | armin.rigo | 2006-05-02 21:52:32 +0200 (Tue, 02 May 2006) | 4 lines
  Documentation bug: PySet_Pop() returns a new reference (because the
  caller becomes the owner of that reference).
........
  r45864 | guido.van.rossum | 2006-05-02 22:47:36 +0200 (Tue, 02 May 2006) | 4 lines
  Hopefully this will fix the spurious failures of test_mailbox.py that I'm
  experiencing.  (This code and mailbox.py itself are full of calls to file()
  that should be calls to open() -- but I'm not fixing those.)
........
  r45865 | andrew.kuchling | 2006-05-02 23:44:33 +0200 (Tue, 02 May 2006) | 1 line
  Use open() instead of file()
........
  r45866 | andrew.kuchling | 2006-05-03 00:47:49 +0200 (Wed, 03 May 2006) | 1 line
  Update context manager section for removal of __context__
........
  r45867 | fred.drake | 2006-05-03 03:46:52 +0200 (Wed, 03 May 2006) | 1 line
  remove unnecessary assignment
........
  r45868 | fred.drake | 2006-05-03 03:48:24 +0200 (Wed, 03 May 2006) | 4 lines
  tell LaTeX2HTML to:
  - use UTF-8 output
  - not mess with the >>> prompt!
........
  r45869 | fred.drake | 2006-05-03 04:04:40 +0200 (Wed, 03 May 2006) | 3 lines
  avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to
  guillemets; no need for magic here
........
  r45870 | fred.drake | 2006-05-03 04:12:47 +0200 (Wed, 03 May 2006) | 1 line
  at least comment on why curly-quotes are not enabled
........
  r45871 | fred.drake | 2006-05-03 04:27:40 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup
........
  r45872 | fred.drake | 2006-05-03 04:29:09 +0200 (Wed, 03 May 2006) | 1 line
  one more place to avoid extra markup (how many will there be?)
........
  r45873 | fred.drake | 2006-05-03 04:29:39 +0200 (Wed, 03 May 2006) | 1 line
  fix up whitespace in prompt strings
........
  r45876 | tim.peters | 2006-05-03 06:46:14 +0200 (Wed, 03 May 2006) | 2 lines
  Whitespace normalization.
........
  r45877 | martin.v.loewis | 2006-05-03 06:52:04 +0200 (Wed, 03 May 2006) | 2 lines
  Correct some formulations, fix XXX comments.
........
  r45879 | georg.brandl | 2006-05-03 07:05:02 +0200 (Wed, 03 May 2006) | 2 lines
  Patch #1480067: don't redirect HTTP digest auth in urllib2
........
  r45881 | georg.brandl | 2006-05-03 07:15:10 +0200 (Wed, 03 May 2006) | 3 lines
  Move network tests from test_urllib2 to test_urllib2net.
........
  r45887 | nick.coghlan | 2006-05-03 15:02:47 +0200 (Wed, 03 May 2006) | 1 line
  Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager()
........
  r45888 | nick.coghlan | 2006-05-03 15:17:49 +0200 (Wed, 03 May 2006) | 1 line
  Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception.
........
  r45889 | georg.brandl | 2006-05-03 19:46:13 +0200 (Wed, 03 May 2006) | 3 lines
  Add seamonkey to list of Windows browsers too.
........
  r45890 | georg.brandl | 2006-05-03 20:03:22 +0200 (Wed, 03 May 2006) | 3 lines
  RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary.
........
  r45891 | georg.brandl | 2006-05-03 20:12:33 +0200 (Wed, 03 May 2006) | 2 lines
  Bug #1472191: convert breakpoint indices to ints before comparing them to ints
........
  r45893 | georg.brandl | 2006-05-03 20:18:32 +0200 (Wed, 03 May 2006) | 3 lines
  Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
........
  r45894 | thomas.heller | 2006-05-03 20:35:39 +0200 (Wed, 03 May 2006) | 1 line
  Don't fail the tests when libglut.so or libgle.so cannot be loaded.
........
  r45895 | georg.brandl | 2006-05-04 07:08:10 +0200 (Thu, 04 May 2006) | 2 lines
  Bug #1481530: allow "from os.path import ..." with imputil
........
  r45897 | martin.v.loewis | 2006-05-04 07:51:03 +0200 (Thu, 04 May 2006) | 2 lines
  Patch #1475845: Raise IndentationError for unexpected indent.
........
  r45898 | martin.v.loewis | 2006-05-04 12:08:42 +0200 (Thu, 04 May 2006) | 1 line
  Implement os.{chdir,rename,rmdir,remove} using Win32 directly.
........
  r45899 | martin.v.loewis | 2006-05-04 14:04:27 +0200 (Thu, 04 May 2006) | 2 lines
  Drop now-unnecessary arguments to posix_2str.
........
  r45900 | martin.v.loewis | 2006-05-04 16:27:52 +0200 (Thu, 04 May 2006) | 1 line
  Update checks to consider Windows error numbers.
........
  r45913 | thomas.heller | 2006-05-05 20:42:14 +0200 (Fri, 05 May 2006) | 2 lines
  Export the 'free' standard C function for use in the test suite.
........
  r45914 | thomas.heller | 2006-05-05 20:43:24 +0200 (Fri, 05 May 2006) | 3 lines
  Fix memory leaks in the ctypes test suite, reported by valgrind, by
  free()ing the memory we allocate.
........
  r45915 | thomas.heller | 2006-05-05 20:46:27 +0200 (Fri, 05 May 2006) | 1 line
  oops - the function is exported as 'my_free', not 'free'.
........
  r45916 | thomas.heller | 2006-05-05 21:14:24 +0200 (Fri, 05 May 2006) | 2 lines
  Clean up.
........
  r45920 | george.yoshida | 2006-05-06 15:09:45 +0200 (Sat, 06 May 2006) | 2 lines
  describe optional arguments for DocFileSuite
........
  r45924 | george.yoshida | 2006-05-06 16:16:51 +0200 (Sat, 06 May 2006) | 2 lines
  Use \versionchanged for the feature change
........
  r45925 | martin.v.loewis | 2006-05-06 18:32:54 +0200 (Sat, 06 May 2006) | 1 line
  Port access, chmod, parts of getcwdu, mkdir, and utime to direct Win32 API.
........
  r45926 | martin.v.loewis | 2006-05-06 22:04:08 +0200 (Sat, 06 May 2006) | 2 lines
  Handle ERROR_ALREADY_EXISTS.
........
  r45931 | andrew.kuchling | 2006-05-07 19:12:12 +0200 (Sun, 07 May 2006) | 1 line
  [Patch #1479977] Revised version of urllib2 HOWTO, edited by John J. Lee
........
  r45932 | andrew.kuchling | 2006-05-07 19:14:53 +0200 (Sun, 07 May 2006) | 1 line
  Minor language edit
........
  r45934 | georg.brandl | 2006-05-07 22:44:34 +0200 (Sun, 07 May 2006) | 3 lines
  Patch #1483395: add new TLDs to cookielib
........
  r45936 | martin.v.loewis | 2006-05-08 07:25:56 +0200 (Mon, 08 May 2006) | 2 lines
  Add missing PyMem_Free.
........
  r45938 | georg.brandl | 2006-05-08 19:28:47 +0200 (Mon, 08 May 2006) | 3 lines
  Add test for rev. 45934.
........
  r45939 | georg.brandl | 2006-05-08 19:36:08 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1479302: Make urllib2 digest auth and basic auth play together.
........
  r45940 | georg.brandl | 2006-05-08 19:48:01 +0200 (Mon, 08 May 2006) | 3 lines
  Patch #1478993: take advantage of BaseException/Exception split in cookielib
........
  r45941 | neal.norwitz | 2006-05-09 07:38:56 +0200 (Tue, 09 May 2006) | 5 lines
  Micro optimization.  In the first case, we know that frame->f_exc_type
  is NULL, so there's no reason to do anything with it.  In the second case,
  we know frame->f_exc_type is not NULL, so we can just do an INCREF.
........
  r45943 | thomas.heller | 2006-05-09 22:20:15 +0200 (Tue, 09 May 2006) | 2 lines
  Disable a test that is unreliable.
........
  r45944 | tim.peters | 2006-05-10 04:43:01 +0200 (Wed, 10 May 2006) | 4 lines
  Variant of patch #1478292.  doctest.register_optionflag(name)
  shouldn't create a new flag when `name` is already the name of
  an option flag.
........
  r45947 | neal.norwitz | 2006-05-10 08:57:58 +0200 (Wed, 10 May 2006) | 14 lines
  Fix problems found by Coverity.
  longobject.c: also fix an ssize_t problem
    <a> could have been NULL, so hoist the size calc to not use <a>.
  _ssl.c: under fail: self is DECREF'd, but it would have been NULL.
  _elementtree.c: delete self if there was an error.
  _csv.c: I'm not sure if lineterminator could have been anything other than
  a string.  However, other string method calls are checked, so check this
  one too.
........
  r45948 | thomas.wouters | 2006-05-10 17:04:11 +0200 (Wed, 10 May 2006) | 4 lines
  Ignore reflog.txt, too.
........
  r45949 | georg.brandl | 2006-05-10 17:59:06 +0200 (Wed, 10 May 2006) | 3 lines
  Bug #1482988: indicate more prominently that the Stats class is in the pstats module.
........
  r45950 | georg.brandl | 2006-05-10 18:09:03 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1485447: subprocess: document that the "cwd" parameter isn't used to find the executable. Misc. other markup fixes.
........
  r45952 | georg.brandl | 2006-05-10 18:11:44 +0200 (Wed, 10 May 2006) | 2 lines
  Bug #1484978: curses.panel: clarify that Panel objects are destroyed on garbage collection.
........
  r45954 | georg.brandl | 2006-05-10 18:26:03 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.
........
  r45955 | georg.brandl | 2006-05-10 19:13:20 +0200 (Wed, 10 May 2006) | 4 lines
  Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.
........
  r45956 | andrew.kuchling | 2006-05-10 19:19:04 +0200 (Wed, 10 May 2006) | 1 line
  Clarify description of exception handling
........
  r45957 | georg.brandl | 2006-05-10 22:09:23 +0200 (Wed, 10 May 2006) | 2 lines
  Fix two small errors in argument lists.
........
  r45960 | brett.cannon | 2006-05-11 07:11:33 +0200 (Thu, 11 May 2006) | 5 lines
  Detect if %zd is supported by printf() during configure and sets
  PY_FORMAT_SIZE_T appropriately.  Removes warnings on
  OS X under gcc 4.0.1 when PY_FORMAT_SIZE_T is set to "" instead of "z" as is
  needed.
........
  r45963 | neal.norwitz | 2006-05-11 09:51:59 +0200 (Thu, 11 May 2006) | 1 line
  Don't mask a no memory error with a less meaningful one as discussed on python-checkins
........
  r45964 | martin.v.loewis | 2006-05-11 15:28:43 +0200 (Thu, 11 May 2006) | 3 lines
  Change WindowsError to carry the Win32 error code in winerror,
  and the DOS error code in errno. Revert changes where
  WindowsError catch blocks unnecessarily special-case OSError.
........
  r45965 | george.yoshida | 2006-05-11 17:53:27 +0200 (Thu, 11 May 2006) | 2 lines
  Grammar fix
........
  r45967 | andrew.kuchling | 2006-05-11 18:32:24 +0200 (Thu, 11 May 2006) | 1 line
  typo fix
........
  r45968 | tim.peters | 2006-05-11 18:37:42 +0200 (Thu, 11 May 2006) | 5 lines
  BaseThreadedTestCase.setup():  stop special-casing WindowsError.
  Rev 45964 fiddled with WindowsError, and broke test_bsddb3 on all
  the Windows buildbot slaves as a result.  This should repair it.
........
  r45969 | georg.brandl | 2006-05-11 21:57:09 +0200 (Thu, 11 May 2006) | 2 lines
  Typo fix.
........
  r45970 | tim.peters | 2006-05-12 03:57:59 +0200 (Fri, 12 May 2006) | 5 lines
  SF patch #1473132:  Improve docs for tp_clear and tp_traverse,
  by Collin Winter.
  Bugfix candidate (but I'm not going to bother).
........
  r45974 | martin.v.loewis | 2006-05-12 14:27:28 +0200 (Fri, 12 May 2006) | 4 lines
  Dynamically allocate path name buffer for Unicode
  path name in listdir. Fixes #1431582.
  Stop overallocating MAX_PATH characters for ANSI
  path names. Stop assigning to errno.
........
  r45975 | martin.v.loewis | 2006-05-12 15:57:36 +0200 (Fri, 12 May 2006) | 1 line
  Move icon files into DLLs dir. Fixes #1477968.
........
  r45976 | george.yoshida | 2006-05-12 18:40:11 +0200 (Fri, 12 May 2006) | 2 lines
  At first there were 6 steps, but one was removed after that.
........
  r45977 | martin.v.loewis | 2006-05-12 19:22:04 +0200 (Fri, 12 May 2006) | 1 line
  Fix alignment error on Itanium.
........
  r45978 | george.yoshida | 2006-05-12 19:25:26 +0200 (Fri, 12 May 2006) | 3 lines
  Duplicated description about the illegal continue usage can be found in nearly the same place.
  They are same, so keep the original one and remove the later-added one.
........
  r45980 | thomas.heller | 2006-05-12 20:16:03 +0200 (Fri, 12 May 2006) | 2 lines
  Add missing svn properties.
........
  r45981 | thomas.heller | 2006-05-12 20:47:35 +0200 (Fri, 12 May 2006) | 1 line
  set svn properties
........
  r45982 | thomas.heller | 2006-05-12 21:31:46 +0200 (Fri, 12 May 2006) | 1 line
  add svn:eol-style native svn:keywords Id
........
  r45987 | gerhard.haering | 2006-05-13 01:49:49 +0200 (Sat, 13 May 2006) | 3 lines
  Integrated the rest of the pysqlite reference manual into the Python
  documentation. Ready to be reviewed and improved upon.
........
  r45988 | george.yoshida | 2006-05-13 08:53:31 +0200 (Sat, 13 May 2006) | 2 lines
  Add \exception markup
........
  r45990 | martin.v.loewis | 2006-05-13 15:34:04 +0200 (Sat, 13 May 2006) | 2 lines
  Revert 43315: Printing of %zd must be signed.
........
  r45992 | tim.peters | 2006-05-14 01:28:20 +0200 (Sun, 14 May 2006) | 11 lines
  Teach PyString_FromFormat, PyErr_Format, and PyString_FromFormatV
  about "%u", "%lu" and "%zu" formats.
  Since PyString_FromFormat and PyErr_Format have exactly the same rules
  (both inherited from PyString_FromFormatV), it would be good if someone
  with more LaTeX Fu changed one of them to just point to the other.
  Their docs were way out of synch before this patch, and I just did a
  mass copy+paste to repair that.
  Not a backport candidate (this is a new feature).
........
  r45993 | tim.peters | 2006-05-14 01:31:05 +0200 (Sun, 14 May 2006) | 2 lines
  Typo repair.
........
  r45994 | tim.peters | 2006-05-14 01:33:19 +0200 (Sun, 14 May 2006) | 2 lines
  Remove lie in new comment.
........
  r45995 | ronald.oussoren | 2006-05-14 21:56:34 +0200 (Sun, 14 May 2006) | 11 lines
  Rework the build system for osx applications:
  * Don't use xcodebuild for building PythonLauncher, but use a normal unix
    makefile. This makes it a lot easier to use the same build flags as for the
    rest of python (e.g. make a universal version of python launcher)
  * Convert the mac makefile-s to makefile.in-s and use configure to set makefile
    variables instead of forwarding them as command-line arguments
  * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw'
  * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow
    easier modification of the bundle contents later on.
........
  r45996 | ronald.oussoren | 2006-05-14 22:35:41 +0200 (Sun, 14 May 2006) | 6 lines
  A first cut at replacing the icons on MacOS X. This replaces all icons by icons
  based on the new python.org logo. These are also the first icons that are
  "proper" OSX icons.
  These icons were created by Jacob Rus.
........
  r45997 | ronald.oussoren | 2006-05-14 23:07:41 +0200 (Sun, 14 May 2006) | 3 lines
  I missed one small detail in my rewrite of the osx build files: the path
  to the Python.app template.
........
  r45998 | martin.v.loewis | 2006-05-15 07:51:36 +0200 (Mon, 15 May 2006) | 2 lines
  Fix memory leak.
........
  r45999 | neal.norwitz | 2006-05-15 08:48:14 +0200 (Mon, 15 May 2006) | 1 line
  Move items implemented after a2 into the new a3 section
........
  r46000 | neal.norwitz | 2006-05-15 09:04:36 +0200 (Mon, 15 May 2006) | 5 lines
  - Bug #1487966: Fix SystemError with conditional expression in assignment
  Most of the test_syntax changes are just updating the numbers.
........
  r46001 | neal.norwitz | 2006-05-15 09:17:23 +0200 (Mon, 15 May 2006) | 1 line
  Patch #1488312, Fix memory alignment problem on SPARC in unicode.  Will backport
........
  r46003 | martin.v.loewis | 2006-05-15 11:22:27 +0200 (Mon, 15 May 2006) | 3 lines
  Remove bogus DECREF of self.
  Change __str__() functions to METH_O.
  Change WindowsError__str__ to use PyTuple_Pack.
........
  r46005 | georg.brandl | 2006-05-15 21:30:35 +0200 (Mon, 15 May 2006) | 3 lines
  [ 1488881 ] tarfile.py: support for file-objects and bz2 (cp. #1488634)
........
  r46007 | tim.peters | 2006-05-15 22:44:10 +0200 (Mon, 15 May 2006) | 9 lines
  ReadDetectFileobjTest:  repair Windows disasters by opening
  the file object in binary mode.
  The Windows buildbot slaves shouldn't swap themselves to death
  anymore.  However, test_tarfile may still fail because of a
  temp directory left behind from a previous failing run.
  Windows buildbot owners may need to remove that directory
  by hand.
........
  r46009 | tim.peters | 2006-05-15 23:32:25 +0200 (Mon, 15 May 2006) | 3 lines
  test_directory():  Remove the leftover temp directory that's making
  the Windows buildbots fail test_tarfile.
........
  r46010 | martin.v.loewis | 2006-05-16 09:05:37 +0200 (Tue, 16 May 2006) | 4 lines
  - Test for sys/statvfs.h before including it, as statvfs is present
    on some OSX installation, but its header file is not.
  Will backport to 2.4
........
  r46012 | georg.brandl | 2006-05-16 09:38:27 +0200 (Tue, 16 May 2006) | 3 lines
  Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.
........
  r46015 | andrew.kuchling | 2006-05-16 18:11:54 +0200 (Tue, 16 May 2006) | 1 line
  Add item
........
  r46016 | andrew.kuchling | 2006-05-16 18:27:31 +0200 (Tue, 16 May 2006) | 3 lines
  PEP 243 has been withdrawn, so don't refer to it any more.
  The PyPI upload material has been moved into the section on PEP314.
........
  r46017 | george.yoshida | 2006-05-16 19:42:16 +0200 (Tue, 16 May 2006) | 2 lines
  Update for 'ImportWarning'
........
  r46018 | george.yoshida | 2006-05-16 20:07:00 +0200 (Tue, 16 May 2006) | 4 lines
  Mention that Exception is now a subclass of BaseException.
  Remove a sentence that says that BaseException inherits from BaseException.
  (I guess this is just a copy & paste mistake.)
........
  r46019 | george.yoshida | 2006-05-16 20:26:10 +0200 (Tue, 16 May 2006) | 2 lines
  Document ImportWarning
........
  r46020 | tim.peters | 2006-05-17 01:22:20 +0200 (Wed, 17 May 2006) | 2 lines
  Whitespace normalization.
........
  r46021 | tim.peters | 2006-05-17 01:24:08 +0200 (Wed, 17 May 2006) | 2 lines
  Text files missing the SVN eol-style property.
........
  r46022 | tim.peters | 2006-05-17 03:30:11 +0200 (Wed, 17 May 2006) | 2 lines
  PyZlib_copy(), PyZlib_uncopy():  Repair leaks on the normal-case path.
........
  r46023 | georg.brandl | 2006-05-17 16:06:07 +0200 (Wed, 17 May 2006) | 3 lines
  Remove misleading comment about type-class unification.
........
  r46024 | georg.brandl | 2006-05-17 16:11:36 +0200 (Wed, 17 May 2006) | 3 lines
  Apply patch #1489784 from Michael Foord.
........
  r46025 | georg.brandl | 2006-05-17 16:18:20 +0200 (Wed, 17 May 2006) | 3 lines
  Fix typo in os.utime docstring (patch #1490189)
........
  r46026 | georg.brandl | 2006-05-17 16:26:50 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1490224: set time.altzone correctly on Cygwin.
........
  r46027 | georg.brandl | 2006-05-17 16:45:06 +0200 (Wed, 17 May 2006) | 4 lines
  Add global debug flag to cookielib to avoid heavy dependency on the logging module.
  Resolves #1484758.
........
  r46028 | georg.brandl | 2006-05-17 16:56:04 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.
........
  r46029 | georg.brandl | 2006-05-17 17:17:00 +0200 (Wed, 17 May 2006) | 4 lines
  Delay-import some large modules to speed up urllib2 import.
  (fixes #1484793).
........
  r46030 | georg.brandl | 2006-05-17 17:51:16 +0200 (Wed, 17 May 2006) | 3 lines
  Patch #1180296: improve locale string formatting functions
........
  r46032 | tim.peters | 2006-05-18 04:06:40 +0200 (Thu, 18 May 2006) | 2 lines
  Whitespace normalization.
........
  r46033 | georg.brandl | 2006-05-18 08:11:19 +0200 (Thu, 18 May 2006) | 3 lines
  Amendments to patch #1484695.
........
  r46034 | georg.brandl | 2006-05-18 08:18:06 +0200 (Thu, 18 May 2006) | 3 lines
  Remove unused import.
........
  r46035 | georg.brandl | 2006-05-18 08:33:27 +0200 (Thu, 18 May 2006) | 3 lines
  Fix test_locale for platforms without a default thousands separator.
........
  r46036 | neal.norwitz | 2006-05-18 08:51:46 +0200 (Thu, 18 May 2006) | 1 line
  Little cleanup
........
  r46037 | georg.brandl | 2006-05-18 09:01:27 +0200 (Thu, 18 May 2006) | 4 lines
  Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.
........
  r46038 | georg.brandl | 2006-05-18 09:20:05 +0200 (Thu, 18 May 2006) | 3 lines
  Bug #1490688: properly document %e, %f, %g format subtleties.
........
  r46039 | vinay.sajip | 2006-05-18 09:28:58 +0200 (Thu, 18 May 2006) | 1 line
  Changed status from "beta" to "production"; since logging has been part of the stdlib since 2.3, it should be safe to make this assertion ;-)
........
  r46040 | ronald.oussoren | 2006-05-18 11:04:15 +0200 (Thu, 18 May 2006) | 2 lines
  Fix some minor issues with the generated application bundles on MacOSX
........
  r46041 | andrew.kuchling | 2006-05-19 02:03:55 +0200 (Fri, 19 May 2006) | 1 line
  Typo fix; add clarifying word
........
  r46044 | neal.norwitz | 2006-05-19 08:31:23 +0200 (Fri, 19 May 2006) | 3 lines
  Fix #132 from Coverity, retval could have been derefed
  if a continue inside a try failed.
........
  r46045 | neal.norwitz | 2006-05-19 08:43:50 +0200 (Fri, 19 May 2006) | 2 lines
  Fix #1474677, non-keyword argument following keyword.
........
  r46046 | neal.norwitz | 2006-05-19 09:00:58 +0200 (Fri, 19 May 2006) | 4 lines
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46047 | neal.norwitz | 2006-05-19 09:05:01 +0200 (Fri, 19 May 2006) | 7 lines
  Oops, I forgot to include this file in the last commit (46046):
  Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.
  I suppose this could be backported if anyone cares.
........
  r46050 | ronald.oussoren | 2006-05-19 20:17:31 +0200 (Fri, 19 May 2006) | 6 lines
  * Change working directory to the users home
    directory, that makes the file open/save
    dialogs more useable.
  * Don't use argv emulator, its not needed
    for idle.
........
  r46052 | tim.peters | 2006-05-19 21:16:34 +0200 (Fri, 19 May 2006) | 2 lines
  Whitespace normalization.
........
  r46054 | ronald.oussoren | 2006-05-20 08:17:01 +0200 (Sat, 20 May 2006) | 9 lines
  Fix bug #1000914 (again).
  This patches a file that is generated by bgen, however the code is now the
  same as a current copy of bgen would generate.  Without this patch most types
  in the Carbon.CF module are unusable.
  I haven't managed to coax bgen into generating a complete copy of _CFmodule.c
  yet :-(, hence the manual patching.
........
  r46055 | george.yoshida | 2006-05-20 17:36:19 +0200 (Sat, 20 May 2006) | 3 lines
  - markup fix
  - add clarifying words
........
  r46057 | george.yoshida | 2006-05-20 18:29:14 +0200 (Sat, 20 May 2006) | 3 lines
  - Add 'as' and 'with' as new keywords in 2.5.
  - Regenerate keyword lists with reswords.py.
........
  r46058 | george.yoshida | 2006-05-20 20:07:26 +0200 (Sat, 20 May 2006) | 2 lines
  Apply patch #1492147 from Mike Foord.
........
  r46059 | andrew.kuchling | 2006-05-20 21:25:16 +0200 (Sat, 20 May 2006) | 1 line
  Minor edits
........
  r46061 | george.yoshida | 2006-05-21 06:22:59 +0200 (Sun, 21 May 2006) | 2 lines
  Fix the TeX compile error.
........
  r46062 | george.yoshida | 2006-05-21 06:40:32 +0200 (Sun, 21 May 2006) | 2 lines
  Apply patch #1492255 from Mike Foord.
........
  r46063 | martin.v.loewis | 2006-05-22 10:48:14 +0200 (Mon, 22 May 2006) | 1 line
  Patch 1490384: New Icons for the PC build.
........
  r46064 | martin.v.loewis | 2006-05-22 11:15:18 +0200 (Mon, 22 May 2006) | 1 line
  Patch #1492356: Port to Windows CE (patch set 1).
........
  r46065 | tim.peters | 2006-05-22 13:29:41 +0200 (Mon, 22 May 2006) | 4 lines
  Define SIZEOF_{DOUBLE,FLOAT} on Windows.  Else
  Michael Hudson's nice gimmicks for IEEE special
  values (infinities, NaNs) don't work.
........
  r46070 | bob.ippolito | 2006-05-22 16:31:24 +0200 (Mon, 22 May 2006) | 2 lines
  GzipFile.readline performance improvement (~30-40%), patch #1281707
........
  r46071 | bob.ippolito | 2006-05-22 17:22:46 +0200 (Mon, 22 May 2006) | 1 line
  Revert gzip readline performance patch #1281707 until a more generic performance improvement can be found
........
  r46073 | fredrik.lundh | 2006-05-22 17:35:12 +0200 (Mon, 22 May 2006) | 4 lines
  docstring tweaks: count counts non-overlapping substrings, not
  total number of occurences
........
  r46075 | bob.ippolito | 2006-05-22 17:59:12 +0200 (Mon, 22 May 2006) | 1 line
  Apply revised patch for GzipFile.readline performance #1281707
........
  r46076 | fredrik.lundh | 2006-05-22 18:29:30 +0200 (Mon, 22 May 2006) | 3 lines
  needforspeed: speed up unicode repeat, unicode string copy
........
  r46079 | fredrik.lundh | 2006-05-22 19:12:58 +0200 (Mon, 22 May 2006) | 4 lines
  needforspeed: use memcpy for "long" strings; use a better algorithm
  for long repeats.
........
  r46084 | tim.peters | 2006-05-22 21:17:04 +0200 (Mon, 22 May 2006) | 7 lines
  PyUnicode_Join():  Recent code changes introduced new
  compiler warnings on Windows (signed vs unsigned mismatch
  in comparisons).  Cleaned that up by switching more locals
  to Py_ssize_t.  Simplified overflow checking (it can _be_
  simpler because while these things are declared as
  Py_ssize_t, then should in fact never be negative).
........
  r46085 | tim.peters | 2006-05-23 07:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  unicode_repeat():  Change type of local to Py_ssize_t,
  since that's what it should be.
........
  r46094 | fredrik.lundh | 2006-05-23 12:10:57 +0200 (Tue, 23 May 2006) | 3 lines
  needforspeed: check first *and* last character before doing a full memcmp
........
  r46095 | fredrik.lundh | 2006-05-23 12:12:21 +0200 (Tue, 23 May 2006) | 4 lines
  needforspeed: fixed unicode "in" operator to use same implementation
  approach as find/index
........
  r46096 | richard.jones | 2006-05-23 12:37:38 +0200 (Tue, 23 May 2006) | 7 lines
  Merge from rjones-funccall branch.
  Applied patch zombie-frames-2.diff from sf patch 876206 with updates for
  Python 2.5 and also modified to retain the free_list to avoid the 67%
  slow-down in pybench recursion test. 5% speed up in function call pybench.
........
  r46098 | ronald.oussoren | 2006-05-23 13:04:24 +0200 (Tue, 23 May 2006) | 2 lines
  Avoid creating a mess when installing a framework for the second time.
........
  r46101 | georg.brandl | 2006-05-23 13:17:21 +0200 (Tue, 23 May 2006) | 3 lines
  PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.
........
  r46103 | ronald.oussoren | 2006-05-23 13:47:16 +0200 (Tue, 23 May 2006) | 3 lines
  Disable linking extensions with -lpython2.5 for darwin. This should fix bug
  #1487105.
........
  r46104 | ronald.oussoren | 2006-05-23 14:01:11 +0200 (Tue, 23 May 2006) | 6 lines
  Patch #1488098.
  This patchs makes it possible to create a universal build on OSX 10.4 and use
  the result to build extensions on 10.3. It also makes it possible to override
  the '-arch' and '-isysroot' compiler arguments for specific extensions.
........
  r46108 | andrew.kuchling | 2006-05-23 14:44:36 +0200 (Tue, 23 May 2006) | 1 line
  Add some items; mention the sprint
........
  r46109 | andrew.kuchling | 2006-05-23 14:47:01 +0200 (Tue, 23 May 2006) | 1 line
  Mention string improvements
........
  r46110 | andrew.kuchling | 2006-05-23 14:49:35 +0200 (Tue, 23 May 2006) | 4 lines
  Use 'speed' instead of 'performance', because I agree with the argument
  at http://zestyping.livejournal.com/193260.html that 'erformance' really means
  something more general.
........
  r46113 | ronald.oussoren | 2006-05-23 17:09:57 +0200 (Tue, 23 May 2006) | 2 lines
  An improved script for building the binary distribution on MacOSX.
........
  r46128 | richard.jones | 2006-05-23 20:28:17 +0200 (Tue, 23 May 2006) | 3 lines
  Applied patch 1337051 by Neal Norwitz, saving 4 ints on frame objects.
........
  r46129 | richard.jones | 2006-05-23 20:32:11 +0200 (Tue, 23 May 2006) | 1 line
  fix broken merge
........
  r46130 | bob.ippolito | 2006-05-23 20:41:17 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46131 | bob.ippolito | 2006-05-23 20:43:47 +0200 (Tue, 23 May 2006) | 1 line
  Update Misc/NEWS for gzip patch #1281707
........
  r46132 | fredrik.lundh | 2006-05-23 20:44:25 +0200 (Tue, 23 May 2006) | 7 lines
  needforspeed: use append+reverse for rsplit, use "bloom filters" to
  speed up splitlines and strip with charsets; etc.  rsplit is now as
  fast as split in all our tests (reverse takes no time at all), and
  splitlines() is nearly as fast as a plain split("\n") in our tests.
  and we're not done yet... ;-)
........
  r46133 | tim.peters | 2006-05-23 20:45:30 +0200 (Tue, 23 May 2006) | 38 lines
  Bug #1334662 / patch #1335972:  int(string, base) wrong answers.
  In rare cases of strings specifying true values near sys.maxint,
  and oddball bases (not decimal or a power of 2), int(string, base)
  could deliver insane answers.  This repairs all such problems, and
  also speeds string->int significantly.  On my box, here are %
  speedups for decimal strings of various lengths:
  length speedup
  ------ -------
   1       12.4%
   2       15.7%
   3       20.6%
   4       28.1%
   5       33.2%
   6       37.5%
   7       41.9%
   8       46.3%
   9       51.2%
  10       19.5%
  11       19.9%
  12       23.9%
  13       23.7%
  14       23.3%
  15       24.9%
  16       25.3%
  17       28.3%
  18       27.9%
  19       35.7%
  Note that the difference between 9 and 10 is the difference between
  short and long Python ints on a 32-bit box.  The patch doesn't
  actually do anything to speed conversion to long:  the speedup is
  due to detecting "unsigned long" overflow more quickly.
  This is a bugfix candidate, but it's a non-trivial patch and it
  would be painful to separate the "bug fix" from the "speed up" parts.
........
  r46134 | bob.ippolito | 2006-05-23 20:46:41 +0200 (Tue, 23 May 2006) | 1 line
  Patch #1493701: performance enhancements for struct module.
........
  r46136 | andrew.kuchling | 2006-05-23 21:00:45 +0200 (Tue, 23 May 2006) | 1 line
  Remove duplicate item
........
  r46141 | bob.ippolito | 2006-05-23 21:09:51 +0200 (Tue, 23 May 2006) | 1 line
  revert #1493701
........
  r46142 | bob.ippolito | 2006-05-23 21:11:34 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46144 | bob.ippolito | 2006-05-23 21:12:41 +0200 (Tue, 23 May 2006) | 1 line
  patch #1493701: performance enhancements for struct module
........
  r46148 | bob.ippolito | 2006-05-23 21:25:52 +0200 (Tue, 23 May 2006) | 1 line
  fix linking issue, warnings, in struct
........
  r46149 | andrew.kuchling | 2006-05-23 21:29:38 +0200 (Tue, 23 May 2006) | 1 line
  Add two items
........
  r46150 | bob.ippolito | 2006-05-23 21:31:23 +0200 (Tue, 23 May 2006) | 1 line
  forward declaration for PyStructType
........
  r46151 | bob.ippolito | 2006-05-23 21:32:25 +0200 (Tue, 23 May 2006) | 1 line
  fix typo in _struct
........
  r46152 | andrew.kuchling | 2006-05-23 21:32:35 +0200 (Tue, 23 May 2006) | 1 line
  Add item
........
  r46153 | tim.peters | 2006-05-23 21:34:37 +0200 (Tue, 23 May 2006) | 3 lines
  Get the Windows build working again (recover from
  `struct` module changes).
........
  r46155 | fredrik.lundh | 2006-05-23 21:47:35 +0200 (Tue, 23 May 2006) | 3 lines
  return 0 on misses, not -1.
........
  r46156 | tim.peters | 2006-05-23 23:51:35 +0200 (Tue, 23 May 2006) | 4 lines
  test_struct grew weird behavior under regrtest.py -R,
  due to a module-level cache.  Clearing the cache should
  make it stop showing up in refleak reports.
........
  r46157 | tim.peters | 2006-05-23 23:54:23 +0200 (Tue, 23 May 2006) | 2 lines
  Whitespace normalization.
........
  r46158 | tim.peters | 2006-05-23 23:55:53 +0200 (Tue, 23 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46161 | fredrik.lundh | 2006-05-24 12:20:36 +0200 (Wed, 24 May 2006) | 3 lines
  use Py_ssize_t for string indexes (thanks, neal!)
........
  r46173 | fredrik.lundh | 2006-05-24 16:28:11 +0200 (Wed, 24 May 2006) | 14 lines
  needforspeed: use "fastsearch" for count and findstring helpers.  this
  results in a 2.5x speedup on the stringbench count tests, and a 20x (!)
  speedup on the stringbench search/find/contains test, compared to 2.5a2.
  for more on the algorithm, see:
      http://effbot.org/zone/stringlib.htm
  if you get weird results, you can disable the new algoritm by undefining
  USE_FAST in Objects/unicodeobject.c.
  enjoy /F
........
  r46182 | fredrik.lundh | 2006-05-24 17:11:01 +0200 (Wed, 24 May 2006) | 3 lines
  needforspeedindeed: use fastsearch also for __contains__
........
  r46184 | bob.ippolito | 2006-05-24 17:32:06 +0200 (Wed, 24 May 2006) | 1 line
  refactor unpack, add unpack_from
........
  r46189 | fredrik.lundh | 2006-05-24 18:35:18 +0200 (Wed, 24 May 2006) | 4 lines
  needforspeed: refactored the replace code slightly; special-case
  constant-length changes; use fastsearch to locate the first match.
........
  r46198 | andrew.dalke | 2006-05-24 20:55:37 +0200 (Wed, 24 May 2006) | 10 lines
  Added a slew of test for string replace, based various corner cases from
  the Need For Speed sprint coding.  Includes commented out overflow tests
  which will be uncommented once the code is fixed.
  This test will break the 8-bit string tests because
      "".replace("", "A") == "" when it should == "A"
  We have a fix for it, which should be added tomorrow.
........
  r46200 | tim.peters | 2006-05-24 22:27:18 +0200 (Wed, 24 May 2006) | 2 lines
  We can't leave the checked-in tests broken.
........
  r46201 | tim.peters | 2006-05-24 22:29:44 +0200 (Wed, 24 May 2006) | 2 lines
  Whitespace normalization.
........
  r46202 | tim.peters | 2006-05-24 23:00:45 +0200 (Wed, 24 May 2006) | 4 lines
  Disable the damn empty-string replace test -- it can't
  be make to pass now for unicode if it passes for str, or
  vice versa.
........
  r46203 | tim.peters | 2006-05-24 23:10:40 +0200 (Wed, 24 May 2006) | 58 lines
  Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
  ``long(str, base)`` is now up to 6x faster for non-power-of-2 bases.  The
  largest speedup is for inputs with about 1000 decimal digits.  Conversion
  from non-power-of-2 bases remains quadratic-time in the number of input
  digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
  Speedups at various lengths for decimal inputs, comparing 2.4.3 with
  current trunk.  Note that it's actually a bit slower for 1-digit strings:
    len  speedup
   ----  -------
     1     -4.5%
     2      4.6%
     3      8.3%
     4     12.7%
     5     16.9%
     6     28.6%
     7     35.5%
     8     44.3%
     9     46.6%
    10     55.3%
    11     65.7%
    12     77.7%
    13     73.4%
    14     75.3%
    15     85.2%
    16    103.0%
    17     95.1%
    18    112.8%
    19    117.9%
    20    128.3%
    30    174.5%
    40    209.3%
    50    236.3%
    60    254.3%
    70    262.9%
    80    295.8%
    90    297.3%
   100    324.5%
   200    374.6%
   300    403.1%
   400    391.1%
   500    388.7%
   600    440.6%
   700    468.7%
   800    498.0%
   900    507.2%
  1000    501.2%
  2000    450.2%
  3000    463.2%
  4000    452.5%
  5000    440.6%
  6000    439.6%
  7000    424.8%
  8000    418.1%
  9000    417.7%
........
  r46204 | andrew.kuchling | 2006-05-25 02:23:03 +0200 (Thu, 25 May 2006) | 1 line
  Minor edits; add an item
........
  r46205 | fred.drake | 2006-05-25 04:42:25 +0200 (Thu, 25 May 2006) | 3 lines
  fix broken links in PDF
  (SF patch #1281291, contributed by Rory Yorke)
........
  r46208 | walter.doerwald | 2006-05-25 10:53:28 +0200 (Thu, 25 May 2006) | 2 lines
  Replace tab inside comment with space.
........
  r46209 | thomas.wouters | 2006-05-25 13:25:51 +0200 (Thu, 25 May 2006) | 4 lines
  Fix #1488915, Multiple dots in relative import statement raise SyntaxError.
........
  r46210 | thomas.wouters | 2006-05-25 13:26:25 +0200 (Thu, 25 May 2006) | 5 lines
  Update graminit.c for the fix for #1488915, Multiple dots in relative import
  statement raise SyntaxError, and add testcase.
........
  r46211 | andrew.kuchling | 2006-05-25 14:27:59 +0200 (Thu, 25 May 2006) | 1 line
  Add entry; and fix a typo
........
  r46214 | fredrik.lundh | 2006-05-25 17:22:03 +0200 (Thu, 25 May 2006) | 7 lines
  needforspeed: speed up upper and lower for 8-bit string objects.
  (the unicode versions of these are still 2x faster on windows,
  though...)
  based on work by Andrew Dalke, with tweaks by yours truly.
........
  r46216 | fredrik.lundh | 2006-05-25 17:49:45 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: make new upper/lower work properly for single-character
  strings too... (thanks to georg brandl for spotting the exact problem
  faster than anyone else)
........
  r46217 | kristjan.jonsson | 2006-05-25 17:53:30 +0200 (Thu, 25 May 2006) | 1 line
  Added a new macro, Py_IS_FINITE(X).  On windows there is an intrinsic for this and it is more efficient than to use !Py_IS_INFINITE(X) && !Py_IS_NAN(X).  No change on other platforms
........
  r46219 | fredrik.lundh | 2006-05-25 18:10:12 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: _toupper/_tolower is a SUSv2 thing; fall back on ISO C
  versions if they're not defined.
........
  r46220 | andrew.kuchling | 2006-05-25 18:23:15 +0200 (Thu, 25 May 2006) | 1 line
  Fix comment typos
........
  r46221 | andrew.dalke | 2006-05-25 18:30:52 +0200 (Thu, 25 May 2006) | 2 lines
  Added tests for implementation error we came up with in the need for speed sprint.
........
  r46222 | andrew.kuchling | 2006-05-25 18:34:54 +0200 (Thu, 25 May 2006) | 1 line
  Fix another typo
........
  r46223 | kristjan.jonsson | 2006-05-25 18:39:27 +0200 (Thu, 25 May 2006) | 1 line
  Fix incorrect documentation for the Py_IS_FINITE(X) macro.
........
  r46224 | fredrik.lundh | 2006-05-25 18:46:54 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: check for overflow in replace (from Andrew Dalke)
........
  r46226 | fredrik.lundh | 2006-05-25 19:08:14 +0200 (Thu, 25 May 2006) | 5 lines
  needforspeed: new replace implementation by Andrew Dalke.  replace is
  now about 3x faster on my machine, for the replace tests from string-
  bench.
........
  r46227 | tim.peters | 2006-05-25 19:34:03 +0200 (Thu, 25 May 2006) | 5 lines
  A new table to help string->integer conversion was added yesterday to
  both mystrtoul.c and longobject.c.  Share the table instead.  Also
  cut its size by 64 entries (they had been used for an inscrutable
  trick originally, but the code no longer tries to use that trick).
........
  r46229 | andrew.dalke | 2006-05-25 19:53:00 +0200 (Thu, 25 May 2006) | 11 lines
  Fixed problem identified by Georg.  The special-case in-place code for replace
  made a copy of the string using PyString_FromStringAndSize(s, n) and modify
  the copied string in-place.  However, 1 (and 0) character strings are shared
  from a cache.  This cause "A".replace("A", "a") to change the cached version
  of "A" -- used by everyone.
  Now may the copy with NULL as the string and do the memcpy manually.  I've
  added regression tests to check if this happens in the future.  Perhaps
  there should be a PyString_Copy for this case?
........
  r46230 | fredrik.lundh | 2006-05-25 19:55:31 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use "fastsearch" for count.  this results in a 3x speedup
  for the related stringbench tests.
........
  r46231 | andrew.dalke | 2006-05-25 20:03:25 +0200 (Thu, 25 May 2006) | 4 lines
  Code had returned an ssize_t, upcast to long, then converted with PyInt_FromLong.
  Now using PyInt_FromSsize_t.
........
  r46233 | andrew.kuchling | 2006-05-25 20:11:16 +0200 (Thu, 25 May 2006) | 1 line
  Comment typo
........
  r46234 | andrew.dalke | 2006-05-25 20:18:39 +0200 (Thu, 25 May 2006) | 4 lines
  Added overflow test for adding two (very) large strings where the
  new string is over max Py_ssize_t.  I have no way to test it on my
  box or any box I have access to.  At least it doesn't break anything.
........
  r46235 | bob.ippolito | 2006-05-25 20:20:23 +0200 (Thu, 25 May 2006) | 1 line
  Faster path for PyLong_FromLongLong, using PyLong_FromLong algorithm
........
  r46238 | georg.brandl | 2006-05-25 20:44:09 +0200 (Thu, 25 May 2006) | 3 lines
  Guard the _active.remove() call to avoid errors when there is no _active list.
........
  r46239 | fredrik.lundh | 2006-05-25 20:44:29 +0200 (Thu, 25 May 2006) | 4 lines
  needforspeed: use fastsearch also for find/index and contains.  the
  related tests are now about 10x faster.
........
  r46240 | bob.ippolito | 2006-05-25 20:44:50 +0200 (Thu, 25 May 2006) | 1 line
  Struct now unpacks to PY_LONG_LONG directly when possible, also include #ifdef'ed out code that will return int instead of long when in bounds (not active since it's an API and doc change)
........
  r46241 | jack.diederich | 2006-05-25 20:47:15 +0200 (Thu, 25 May 2006) | 1 line
  * eliminate warning by reverting tmp_s type to 'const char*'
........
  r46242 | bob.ippolito | 2006-05-25 21:03:19 +0200 (Thu, 25 May 2006) | 1 line
  Fix Cygwin compiler issue
........
  r46243 | bob.ippolito | 2006-05-25 21:15:27 +0200 (Thu, 25 May 2006) | 1 line
  fix a struct regression where long would be returned for short unsigned integers
........
  r46244 | georg.brandl | 2006-05-25 21:15:31 +0200 (Thu, 25 May 2006) | 4 lines
  Replace PyObject_CallFunction calls with only object args
  with PyObject_CallFunctionObjArgs, which is 30% faster.
........
  r46245 | fredrik.lundh | 2006-05-25 21:19:05 +0200 (Thu, 25 May 2006) | 3 lines
  needforspeed: use insert+reverse instead of append
........
  r46246 | bob.ippolito | 2006-05-25 21:33:38 +0200 (Thu, 25 May 2006) | 1 line
  Use LONG_MIN and LONG_MAX to check Python integer bounds instead of the incorrect INT_MIN and INT_MAX
........
  r46248 | bob.ippolito | 2006-05-25 21:56:56 +0200 (Thu, 25 May 2006) | 1 line
  Use faster struct pack/unpack functions for the endian table that matches the host's
........
  r46249 | bob.ippolito | 2006-05-25 21:59:56 +0200 (Thu, 25 May 2006) | 1 line
  enable darwin/x86 support for libffi and hence ctypes (doesn't yet support --enable-universalsdk)
........
  r46252 | georg.brandl | 2006-05-25 22:28:10 +0200 (Thu, 25 May 2006) | 4 lines
  Someone seems to just have copy-pasted the docs of
  tp_compare to tp_richcompare ;)
........
  r46253 | brett.cannon | 2006-05-25 22:44:08 +0200 (Thu, 25 May 2006) | 2 lines
  Swap out bare malloc()/free() use for PyMem_MALLOC()/PyMem_FREE() .
........
  r46254 | bob.ippolito | 2006-05-25 22:52:38 +0200 (Thu, 25 May 2006) | 1 line
  squelch gcc4 darwin/x86 compiler warnings
........
  r46255 | bob.ippolito | 2006-05-25 23:09:45 +0200 (Thu, 25 May 2006) | 1 line
  fix test_float regression and 64-bit size mismatch issue
........
  r46256 | georg.brandl | 2006-05-25 23:11:56 +0200 (Thu, 25 May 2006) | 3 lines
  Add a x-ref to newer calling APIs.
........
  r46257 | ronald.oussoren | 2006-05-25 23:30:54 +0200 (Thu, 25 May 2006) | 2 lines
  Fix minor typo in prep_cif.c
........
  r46259 | brett.cannon | 2006-05-25 23:33:11 +0200 (Thu, 25 May 2006) | 4 lines
  Change test_values so that it compares the lowercasing of group names since getgrall() can return all lowercase names while getgrgid() returns proper casing.
  Discovered on Ubuntu 5.04 (custom).
........
  r46261 | tim.peters | 2006-05-25 23:50:17 +0200 (Thu, 25 May 2006) | 7 lines
  Some Win64 pre-release in 2000 didn't support
  QueryPerformanceCounter(), but we believe Win64 does
  support it now.  So use in time.clock().
  It would be peachy if someone with a Win64 box tried
  this ;-)
........
  r46262 | tim.peters | 2006-05-25 23:52:19 +0200 (Thu, 25 May 2006) | 2 lines
  Whitespace normalization.
........
  r46263 | bob.ippolito | 2006-05-25 23:58:05 +0200 (Thu, 25 May 2006) | 1 line
  Add missing files from x86 darwin ctypes patch
........
  r46264 | brett.cannon | 2006-05-26 00:00:14 +0200 (Fri, 26 May 2006) | 2 lines
  Move over to use of METH_O and METH_NOARGS.
........
  r46265 | tim.peters | 2006-05-26 00:25:25 +0200 (Fri, 26 May 2006) | 3 lines
  Repair idiot typo, and complete the job of trying to
  use the Windows time.clock() implementation on Win64.
........
  r46266 | tim.peters | 2006-05-26 00:28:46 +0200 (Fri, 26 May 2006) | 9 lines
  Patch #1494387: SVN longobject.c compiler warnings
  The SIGCHECK macro defined here has always been bizarre, but
  it apparently causes compiler warnings on "Sun Studio 11".
  I believe the warnings are bogus, but it doesn't hurt to make
  the macro definition saner.
  Bugfix candidate (but I'm not going to bother).
........
  r46268 | fredrik.lundh | 2006-05-26 01:27:53 +0200 (Fri, 26 May 2006) | 8 lines
  needforspeed: partition for 8-bit strings.  for some simple tests,
  this is on par with a corresponding find, and nearly twice as fast
  as split(sep, 1)
  full tests, a unicode version, and documentation will follow to-
  morrow.
........
  r46271 | andrew.kuchling | 2006-05-26 03:46:22 +0200 (Fri, 26 May 2006) | 1 line
  Add Soc student
........
  r46272 | ronald.oussoren | 2006-05-26 10:41:25 +0200 (Fri, 26 May 2006) | 3 lines
  Without this patch OSX users couldn't add new help sources because the code
  tried to update one item in a tuple.
........
  r46273 | fredrik.lundh | 2006-05-26 10:54:28 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: partition implementation, part two.
  feel free to improve the documentation and the docstrings.
........
  r46274 | georg.brandl | 2006-05-26 11:05:54 +0200 (Fri, 26 May 2006) | 3 lines
  Clarify docs for str.partition().
........
  r46278 | fredrik.lundh | 2006-05-26 11:46:59 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use METH_O for argument handling, which made partition some
  ~15% faster for the current tests (which is noticable faster than a corre-
  sponding find call).  thanks to neal-who-never-sleeps for the tip.
........
  r46280 | fredrik.lundh | 2006-05-26 12:27:17 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: use Py_ssize_t for the fastsearch counter and skip
  length (thanks, neal!).  and yes, I've verified that this doesn't
  slow things down ;-)
........
  r46285 | andrew.dalke | 2006-05-26 13:11:38 +0200 (Fri, 26 May 2006) | 2 lines
  Added a few more test cases for whitespace split.  These strings have leading whitespace.
........
  r46286 | jack.diederich | 2006-05-26 13:15:17 +0200 (Fri, 26 May 2006) | 1 line
  use Py_ssize_t in places that may need it
........
  r46287 | andrew.dalke | 2006-05-26 13:15:22 +0200 (Fri, 26 May 2006) | 2 lines
  Added split whitespace checks for characters other than space.
........
  r46288 | ronald.oussoren | 2006-05-26 13:17:55 +0200 (Fri, 26 May 2006) | 2 lines
  Fix buglet in postinstall script, it would generate an invalid .cshrc file.
........
  r46290 | georg.brandl | 2006-05-26 13:26:11 +0200 (Fri, 26 May 2006) | 3 lines
  Add "partition" to UserString.
........
  r46291 | fredrik.lundh | 2006-05-26 13:29:39 +0200 (Fri, 26 May 2006) | 5 lines
  needforspeed: added Py_LOCAL macro, based on the LOCAL macro used
  for SRE and others.  applied Py_LOCAL to relevant portion of ceval,
  which gives a 1-2% speedup on my machine.  ymmv.
........
  r46292 | jack.diederich | 2006-05-26 13:37:20 +0200 (Fri, 26 May 2006) | 1 line
  when generating python code prefer to generate valid python code
........
  r46293 | fredrik.lundh | 2006-05-26 13:38:15 +0200 (Fri, 26 May 2006) | 3 lines
  use Py_LOCAL also for string and unicode objects
........
  r46294 | ronald.oussoren | 2006-05-26 13:38:39 +0200 (Fri, 26 May 2006) | 12 lines
  - Search the sqlite specific search directories
    after the normal include directories when looking
    for the version of sqlite to use.
  - On OSX:
    * Extract additional include and link directories
      from the CFLAGS and LDFLAGS, if the user has
      bothered to specify them we might as wel use them.
    * Add '-Wl,-search_paths_first' to the extra_link_args
      for readline and sqlite. This makes it possible to
      use a static library to override the system provided
      dynamic library.
........
  r46295 | ronald.oussoren | 2006-05-26 13:43:26 +0200 (Fri, 26 May 2006) | 6 lines
  Integrate installing a framework in the 'make install'
  target. Until now users had to use 'make frameworkinstall'
  to install python when it is configured with '--enable-framework'.
  This tends to confuse users that don't hunt for readme files
  hidden in platform specific directories :-)
........
  r46297 | fredrik.lundh | 2006-05-26 13:54:04 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: added PY_LOCAL_AGGRESSIVE macro to enable "aggressive"
  LOCAL inlining; also added some missing whitespace
........
  r46298 | andrew.kuchling | 2006-05-26 14:01:44 +0200 (Fri, 26 May 2006) | 1 line
  Typo fixes
........
  r46299 | fredrik.lundh | 2006-05-26 14:01:49 +0200 (Fri, 26 May 2006) | 4 lines
  Py_LOCAL shouldn't be used for data; it works for some .NET 2003 compilers,
  but Trent's copy thinks that it's an anachronism...
........
  r46300 | martin.blais | 2006-05-26 14:03:27 +0200 (Fri, 26 May 2006) | 12 lines
  Support for buffer protocol for socket and struct.
  * Added socket.recv_buf() and socket.recvfrom_buf() methods, that use the buffer
    protocol (send and sendto already did).
  * Added struct.pack_to(), that is the corresponding buffer compatible method to
    unpack_from().
  * Fixed minor typos in arraymodule.
........
  r46302 | ronald.oussoren | 2006-05-26 14:23:20 +0200 (Fri, 26 May 2006) | 6 lines
  - Remove previous version of the binary distribution script for OSX
  - Some small bugfixes for the IDLE.app wrapper
  - Tweaks to build-installer to ensure that python gets build in the right way,
    including sqlite3.
  - Updated readme files
........
  r46305 | tim.peters | 2006-05-26 14:26:21 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46307 | andrew.dalke | 2006-05-26 14:28:15 +0200 (Fri, 26 May 2006) | 7 lines
  I like tests.
  The new split functions use a preallocated list.  Added tests which exceed
  the preallocation size, to exercise list appends/resizes.
  Also added more edge case tests.
........
  r46308 | andrew.dalke | 2006-05-26 14:31:00 +0200 (Fri, 26 May 2006) | 2 lines
  Test cases for off-by-one errors in string split with multicharacter pattern.
........
  r46309 | tim.peters | 2006-05-26 14:31:20 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46313 | andrew.kuchling | 2006-05-26 14:39:48 +0200 (Fri, 26 May 2006) | 1 line
  Add str.partition()
........
  r46314 | bob.ippolito | 2006-05-26 14:52:53 +0200 (Fri, 26 May 2006) | 1 line
  quick hack to fix busted binhex test
........
  r46316 | andrew.dalke | 2006-05-26 15:05:55 +0200 (Fri, 26 May 2006) | 2 lines
  Added more rstrip tests, including for prealloc'ed arrays
........
  r46320 | bob.ippolito | 2006-05-26 15:15:44 +0200 (Fri, 26 May 2006) | 1 line
  fix #1229380 No struct.pack exception for some out of range integers
........
  r46325 | tim.peters | 2006-05-26 15:39:17 +0200 (Fri, 26 May 2006) | 2 lines
  Use open() to open files (was using file()).
........
  r46327 | andrew.dalke | 2006-05-26 16:00:45 +0200 (Fri, 26 May 2006) | 37 lines
  Changes to string.split/rsplit on whitespace to preallocate space in the
  results list.
  Originally it allocated 0 items and used the list growth during append.  Now
  it preallocates 12 items so the first few appends don't need list reallocs.
  ("Here are some words ."*2).split(None, 1) is 7% faster
  ("Here are some words ."*2).split() is is 15% faster
    (Your milage may vary, see dealership for details.)
  File parsing like this
      for line in f:
          count += len(line.split())
  is also about 15% faster.  There is a slowdown of about 3% for large
  strings because of the additional overhead of checking if the append is
  to a preallocated region of the list or not.  This will be the rare case.
  It could be improved with special case code but we decided it was not
  useful enough.
  There is a cost of 12*sizeof(PyObject *) bytes per list.  For the normal
  case of file parsing this is not a problem because of the lists have
  a short lifetime.  We have not come up with cases where this is a problem
  in real life.
  I chose 12 because human text averages about 11 words per line in books,
  one of my data sets averages 6.2 words with a final peak at 11 words per
  line, and I work with a tab delimited data set with 8 tabs per line (or
  9 words per line).  12 encompasses all of these.
  Also changed the last rstrip code to append then reverse, rather than
  doing insert(0).  The strip() and rstrip() times are now comparable.
........
  r46328 | tim.peters | 2006-05-26 16:02:05 +0200 (Fri, 26 May 2006) | 5 lines
  Explicitly close files.  I'm trying to stop the frequent spurious test_tarfile
  failures on Windows buildbots, but it's hard to know how since the regrtest
  failure output is useless here, and it never fails when a buildbot slave runs
  test_tarfile the second time in verbose mode.
........
  r46329 | andrew.kuchling | 2006-05-26 16:03:41 +0200 (Fri, 26 May 2006) | 1 line
  Add buffer support for struct, socket
........
  r46330 | andrew.kuchling | 2006-05-26 16:04:19 +0200 (Fri, 26 May 2006) | 1 line
  Typo fix
........
  r46331 | bob.ippolito | 2006-05-26 16:07:23 +0200 (Fri, 26 May 2006) | 1 line
  Fix distutils so that libffi will cross-compile between darwin/x86 and darwin/ppc
........
  r46333 | bob.ippolito | 2006-05-26 16:23:21 +0200 (Fri, 26 May 2006) | 1 line
  Fix _struct typo that broke some 64-bit platforms
........
  r46335 | bob.ippolito | 2006-05-26 16:29:35 +0200 (Fri, 26 May 2006) | 1 line
  Enable PY_USE_INT_WHEN_POSSIBLE in struct
........
  r46343 | andrew.dalke | 2006-05-26 17:21:01 +0200 (Fri, 26 May 2006) | 2 lines
  Eeked out another 3% or so performance in split whitespace by cleaning up the algorithm.
........
  r46352 | andrew.dalke | 2006-05-26 18:22:52 +0200 (Fri, 26 May 2006) | 3 lines
  Test for more edge strip cases; leading and trailing separator gets removed
  even with strip(..., 0)
........
  r46354 | bob.ippolito | 2006-05-26 18:23:28 +0200 (Fri, 26 May 2006) | 1 line
  fix signed/unsigned mismatch in struct
........
  r46355 | steve.holden | 2006-05-26 18:27:59 +0200 (Fri, 26 May 2006) | 5 lines
  Add -t option to allow easy test selection.
  Action verbose option correctly.
  Tweak operation counts. Add empty and new instances tests.
  Enable comparisons across different warp factors. Change version.
........
  r46356 | fredrik.lundh | 2006-05-26 18:32:42 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use Py_LOCAL on a few more locals in stringobject.c
........
  r46357 | thomas.heller | 2006-05-26 18:42:44 +0200 (Fri, 26 May 2006) | 4 lines
  For now, I gave up with automatic conversion of reST to Python-latex,
  so I'm writing this in latex now.
  Skeleton for the ctypes reference.
........
  r46358 | tim.peters | 2006-05-26 18:49:28 +0200 (Fri, 26 May 2006) | 3 lines
  Repair Windows compiler warnings about mixing
  signed and unsigned integral types in comparisons.
........
  r46359 | tim.peters | 2006-05-26 18:52:04 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46360 | tim.peters | 2006-05-26 18:53:04 +0200 (Fri, 26 May 2006) | 2 lines
  Add missing svn:eol-style property to text files.
........
  r46362 | fredrik.lundh | 2006-05-26 19:04:58 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46363 | thomas.heller | 2006-05-26 19:18:33 +0200 (Fri, 26 May 2006) | 1 line
  Write some docs.
........
  r46364 | fredrik.lundh | 2006-05-26 19:22:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring (in progress)
........
  r46366 | fredrik.lundh | 2006-05-26 19:26:39 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: cleanup
........
  r46367 | fredrik.lundh | 2006-05-26 19:31:41 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: remove remaining USE_FAST macros; if fastsearch was
  broken, someone would have noticed by now ;-)
........
  r46368 | steve.holden | 2006-05-26 19:41:32 +0200 (Fri, 26 May 2006) | 5 lines
  Use minimum calibration time rather than avergae to avoid
  the illusion of negative run times. Halt with an error if
  run times go below 10 ms, indicating that results will be
  unreliable.
........
  r46370 | thomas.heller | 2006-05-26 19:47:40 +0200 (Fri, 26 May 2006) | 2 lines
  Reordered, and wrote more docs.
........
  r46372 | georg.brandl | 2006-05-26 20:03:31 +0200 (Fri, 26 May 2006) | 9 lines
  Need for speed: Patch #921466 : sys.path_importer_cache is now used to cache valid and
    invalid file paths for the built-in import machinery which leads to
    fewer open calls on startup.
    Also fix issue with PEP 302 style import hooks which lead to more open()
    calls than necessary.
........
  r46373 | fredrik.lundh | 2006-05-26 20:05:34 +0200 (Fri, 26 May 2006) | 3 lines
  removed unnecessary include
........
  r46377 | fredrik.lundh | 2006-05-26 20:15:38 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: added rpartition implementation
........
  r46380 | fredrik.lundh | 2006-05-26 20:24:15 +0200 (Fri, 26 May 2006) | 5 lines
  needspeed: rpartition documentation, tests, and a bug fixes.
  feel free to add more tests and improve the documentation.
........
  r46381 | steve.holden | 2006-05-26 20:26:21 +0200 (Fri, 26 May 2006) | 4 lines
  Revert tests to MAL's original round sizes to retiain comparability
  from long ago and far away. Stop calling this pybench 1.4 because it
  isn't. Remove the empty test, which was a bad idea.
........
  r46387 | andrew.kuchling | 2006-05-26 20:41:18 +0200 (Fri, 26 May 2006) | 1 line
  Add rpartition() and path caching
........
  r46388 | andrew.dalke | 2006-05-26 21:02:09 +0200 (Fri, 26 May 2006) | 10 lines
  substring split now uses /F's fast string matching algorithm.
    (If compiled without FAST search support, changed the pre-memcmp test
     to check the last character as well as the first.  This gave a 25%
     speedup for my test case.)
  Rewrote the split algorithms so they stop when maxsplit gets to 0.
  Previously they did a string match first then checked if the maxsplit
  was reached.  The new way prevents a needless string search.
........
  r46391 | brett.cannon | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 2 lines
  Change C spacing to 4 spaces by default to match PEP 7 for new C files.
........
  r46392 | georg.brandl | 2006-05-26 21:04:47 +0200 (Fri, 26 May 2006) | 3 lines
  Exception isn't the root of all exception classes anymore.
........
  r46397 | fredrik.lundh | 2006-05-26 21:23:21 +0200 (Fri, 26 May 2006) | 3 lines
  added rpartition method to UserString class
........
  r46398 | fredrik.lundh | 2006-05-26 21:24:53 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring, continued.  added count and
  find helpers; updated unicodeobject to use stringlib_count
........
  r46400 | fredrik.lundh | 2006-05-26 21:29:05 +0200 (Fri, 26 May 2006) | 4 lines
  needforspeed: stringlib refactoring: use stringlib/find for unicode
  find
........
  r46403 | fredrik.lundh | 2006-05-26 21:33:03 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: use a macro to fix slice indexes
........
  r46404 | thomas.heller | 2006-05-26 21:43:45 +0200 (Fri, 26 May 2006) | 1 line
  Write more docs.
........
  r46406 | fredrik.lundh | 2006-05-26 21:48:07 +0200 (Fri, 26 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use stringlib/find for string find
........
  r46407 | andrew.kuchling | 2006-05-26 21:51:10 +0200 (Fri, 26 May 2006) | 1 line
  Comment typo
........
  r46409 | georg.brandl | 2006-05-26 22:04:44 +0200 (Fri, 26 May 2006) | 3 lines
  Replace Py_BuildValue("OO") by PyTuple_Pack.
........
  r46411 | georg.brandl | 2006-05-26 22:14:47 +0200 (Fri, 26 May 2006) | 2 lines
  Patch #1492218: document None being a constant.
........
  r46415 | georg.brandl | 2006-05-26 22:22:50 +0200 (Fri, 26 May 2006) | 3 lines
  Simplify calling.
........
  r46416 | andrew.dalke | 2006-05-26 22:25:22 +0200 (Fri, 26 May 2006) | 4 lines
  Added limits to the replace code so it does not count all of the matching
  patterns in a string, only the number needed by the max limit.
........
  r46417 | bob.ippolito | 2006-05-26 22:25:23 +0200 (Fri, 26 May 2006) | 1 line
  enable all of the struct tests, use ssize_t, fix some whitespace
........
  r46418 | tim.peters | 2006-05-26 22:56:56 +0200 (Fri, 26 May 2006) | 2 lines
  Record Iceland sprint attendees.
........
  r46421 | tim.peters | 2006-05-26 23:51:13 +0200 (Fri, 26 May 2006) | 2 lines
  Whitespace normalization.
........
  r46422 | steve.holden | 2006-05-27 00:17:54 +0200 (Sat, 27 May 2006) | 2 lines
  Add Richard Tew to developers
........
  r46423 | steve.holden | 2006-05-27 00:33:20 +0200 (Sat, 27 May 2006) | 2 lines
  Update help text and documentaition.
........
  r46424 | steve.holden | 2006-05-27 00:39:27 +0200 (Sat, 27 May 2006) | 2 lines
  Blasted typos ...
........
  r46425 | andrew.dalke | 2006-05-27 00:49:03 +0200 (Sat, 27 May 2006) | 2 lines
  Added description of why splitlines doesn't use the prealloc strategy
........
  r46426 | tim.peters | 2006-05-27 01:14:37 +0200 (Sat, 27 May 2006) | 19 lines
  Patch 1145039.
  set_exc_info(), reset_exc_info():  By exploiting the
  likely (who knows?) invariant that when an exception's
  `type` is NULL, its `value` and `traceback` are also NULL,
  save some cycles in heavily-executed code.
  This is a "a kronar saved is a kronar earned" patch:  the
  speedup isn't reliably measurable, but it obviously does
  reduce the operation count in the normal (no exception
  raised) path through PyEval_EvalFrameEx().
  The tim-exc_sanity branch tries to push this harder, but
  is still blowing up (at least in part due to pre-existing
  subtle bugs that appear to have no other visible
  consequences!).
  Not a bugfix candidate.
........
  r46429 | steve.holden | 2006-05-27 02:51:52 +0200 (Sat, 27 May 2006) | 2 lines
  Reinstate new-style object tests.
........
  r46430 | neal.norwitz | 2006-05-27 07:18:57 +0200 (Sat, 27 May 2006) | 1 line
  Fix compiler warning (and whitespace) on Mac OS 10.4.  (A lot of this code looked duplicated, I wonder if a utility function could help reduce the duplication here.)
........
  r46431 | neal.norwitz | 2006-05-27 07:21:30 +0200 (Sat, 27 May 2006) | 4 lines
  Fix Coverity warnings.
   - Check the correct variable (str_obj, not str) for NULL
   - sep_len was already verified it wasn't 0
........
  r46432 | martin.v.loewis | 2006-05-27 10:36:52 +0200 (Sat, 27 May 2006) | 2 lines
  Patch 1494554: Update numeric properties to Unicode 4.1.
........
  r46433 | martin.v.loewis | 2006-05-27 10:54:29 +0200 (Sat, 27 May 2006) | 2 lines
  Explain why 'consumed' is initialized.
........
  r46436 | fredrik.lundh | 2006-05-27 12:05:10 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: more stringlib refactoring
........
  r46438 | fredrik.lundh | 2006-05-27 12:39:48 +0200 (Sat, 27 May 2006) | 5 lines
  needforspeed: backed out the Py_LOCAL-isation of ceval; the massive in-
  lining killed performance on certain Intel boxes, and the "aggressive"
  macro itself gives most of the benefits on others.
........
  r46439 | andrew.dalke | 2006-05-27 13:04:36 +0200 (Sat, 27 May 2006) | 2 lines
  fixed typo
........
  r46440 | martin.v.loewis | 2006-05-27 13:07:49 +0200 (Sat, 27 May 2006) | 2 lines
  Revert bogus change committed in 46432 to this file.
........
  r46444 | andrew.kuchling | 2006-05-27 13:26:33 +0200 (Sat, 27 May 2006) | 1 line
  Add Py_LOCAL macros
........
  r46450 | bob.ippolito | 2006-05-27 13:47:12 +0200 (Sat, 27 May 2006) | 1 line
  Remove the range checking and int usage #defines from _struct and strip out the now-dead code
........
  r46454 | bob.ippolito | 2006-05-27 14:11:36 +0200 (Sat, 27 May 2006) | 1 line
  Fix up struct docstrings, add struct.pack_to function for symmetry
........
  r46456 | richard.jones | 2006-05-27 14:29:24 +0200 (Sat, 27 May 2006) | 2 lines
  Conversion of exceptions over from faked-up classes to new-style C types.
........
  r46457 | georg.brandl | 2006-05-27 14:30:25 +0200 (Sat, 27 May 2006) | 3 lines
  Add news item for new-style exception class branch merge.
........
  r46458 | tim.peters | 2006-05-27 14:36:53 +0200 (Sat, 27 May 2006) | 3 lines
  More random thrashing trying to understand spurious
  Windows failures.  Who's keeping a bz2 file open?
........
  r46460 | andrew.kuchling | 2006-05-27 15:44:37 +0200 (Sat, 27 May 2006) | 1 line
  Mention new-style exceptions
........
  r46461 | richard.jones | 2006-05-27 15:50:42 +0200 (Sat, 27 May 2006) | 1 line
  credit where credit is due
........
  r46462 | georg.brandl | 2006-05-27 16:02:03 +0200 (Sat, 27 May 2006) | 3 lines
  Always close BZ2Proxy object. Remove unnecessary struct usage.
........
  r46463 | tim.peters | 2006-05-27 16:13:13 +0200 (Sat, 27 May 2006) | 2 lines
  The cheery optimism of old age.
........
  r46464 | andrew.dalke | 2006-05-27 16:16:40 +0200 (Sat, 27 May 2006) | 2 lines
  cleanup - removed trailing whitespace
........
  r46465 | georg.brandl | 2006-05-27 16:41:55 +0200 (Sat, 27 May 2006) | 3 lines
  Remove spurious semicolons after macro invocations.
........
  r46468 | fredrik.lundh | 2006-05-27 16:58:20 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: replace improvements, changed to Py_LOCAL_INLINE
  where appropriate
........
  r46469 | fredrik.lundh | 2006-05-27 17:20:22 +0200 (Sat, 27 May 2006) | 4 lines
  needforspeed: stringlib refactoring: changed find_obj to find_slice,
  to enable use from stringobject
........
  r46470 | fredrik.lundh | 2006-05-27 17:26:19 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: stringlib refactoring: use find_slice for stringobject
........
  r46472 | kristjan.jonsson | 2006-05-27 17:41:31 +0200 (Sat, 27 May 2006) | 1 line
  Add a PCBuild8 build directory for building with Visual Studio .NET 2005.  Contains a special project to perform profile guided optimizations on the pythoncore.dll, by instrumenting and running pybench.py
........
  r46473 | jack.diederich | 2006-05-27 17:44:34 +0200 (Sat, 27 May 2006) | 3 lines
  needforspeed: use PyObject_MALLOC instead of system malloc for small
  allocations.  Use PyMem_MALLOC for larger (1k+) chunks.  1%-2% speedup.
........
  r46474 | bob.ippolito | 2006-05-27 17:53:49 +0200 (Sat, 27 May 2006) | 1 line
  fix struct regression on 64-bit platforms
........
  r46475 | richard.jones | 2006-05-27 18:07:28 +0200 (Sat, 27 May 2006) | 1 line
  doc string additions and tweaks
........
  r46477 | richard.jones | 2006-05-27 18:15:11 +0200 (Sat, 27 May 2006) | 1 line
  move semicolons
........
  r46478 | george.yoshida | 2006-05-27 18:32:44 +0200 (Sat, 27 May 2006) | 2 lines
  minor markup nits
........
  r46488 | george.yoshida | 2006-05-27 18:51:43 +0200 (Sat, 27 May 2006) | 3 lines
  End of Ch.3 is now about "with statement".
  Avoid obsolescence by directly referring to the section.
........
  r46489 | george.yoshida | 2006-05-27 19:09:17 +0200 (Sat, 27 May 2006) | 2 lines
  fix typo
........
											 
										 
										
											2006-05-27 19:21:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								* * */  
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_from_non_binary_base ( const  char  * start ,  const  char  * end ,  Py_ssize_t  digits ,  int  base ,  PyLongObject  * * res )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  c ;            /* current input character */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  size_z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  convwidth ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  convmultmax ,  convmult ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  * pz ,  * pzstop ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  char  * p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  double  log_base_BASE [ 37 ]  =  { 0.0e0 , } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  int  convwidth_base [ 37 ]  =  { 0 , } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  twodigits  convmultmax_base [ 37 ]  =  { 0 , } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( log_base_BASE [ base ]  = =  0.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        twodigits  convmax  =  base ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        int  i  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        log_base_BASE [ base ]  =  ( log ( ( double ) base )  / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               log ( ( double ) PyLong_BASE ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( ; ; )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  next  =  convmax  *  base ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( next  >  PyLong_BASE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            convmax  =  next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        convmultmax_base [ base ]  =  convmax ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( i  >  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        convwidth_base [ base ]  =  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Create an int object that can contain the largest possible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  integer  with  this  base  and  length .   Note  that  there ' s  no 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  need  to  initialize  z - > long_value . ob_digit  - -  no  slot  is  read  up  before 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  being  stored  into . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    double  fsize_z  =  ( double ) digits  *  log_base_BASE [ base ]  +  1.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( fsize_z  >  ( double ) MAX_LONG_DIGITS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* The same exception as in _PyLong_New(). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " too many digits in integer " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_z  =  ( Py_ssize_t ) fsize_z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Uncomment next line to test exceedingly rare copy code */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* size_z = 1; */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( size_z  >  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size_z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyLong_SetSignAndDigitCount ( z ,  0 ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* `convwidth` consecutive input digits are treated as a single
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  digit  in  base  ` convmultmax ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    convwidth  =  convwidth_base [ base ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    convmultmax  =  convmultmax_base [ base ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Work ;-) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    p  =  start ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( p  <  end )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * p  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            p + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* grab up to convwidth digits from the input string */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  ( digit ) _PyLong_DigitValue [ Py_CHARMASK ( * p + + ) ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  1 ;  i  <  convwidth  & &  p  ! =  end ;  + + p )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( * p  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            i + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c  =  ( twodigits ) ( c  *   base  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ( int ) _PyLong_DigitValue [ Py_CHARMASK ( * p ) ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( c  <  PyLong_BASE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        convmult  =  convmultmax ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Calculate the shift only if we couldn't get
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  convwidth  digits . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( i  ! =  convwidth )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            convmult  =  base ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  (  ;  i  >  1 ;  - - i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                convmult  * =  base ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Multiply z by convmult, and add c. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        pz  =  z - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        pzstop  =  pz  +  _PyLong_DigitCount ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( ;  pz  <  pzstop ;  + + pz )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c  + =  ( twodigits ) * pz  *  convmult ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * pz  =  ( digit ) ( c  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* carry off the current end? */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( c )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( c  <  PyLong_BASE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( _PyLong_DigitCount ( z )  <  size_z )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                * pz  =  ( digit ) c ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                assert ( ! _PyLong_IsNegative ( z ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                _PyLong_SetSignAndDigitCount ( z ,  1 ,  _PyLong_DigitCount ( z )  +  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                PyLongObject  * tmp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                /* Extremely rare.  Get more space. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                assert ( _PyLong_DigitCount ( z )  = =  size_z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                tmp  =  _PyLong_New ( size_z  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( tmp  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    Py_DECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                memcpy ( tmp - > long_value . ob_digit , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       z - > long_value . ob_digit , 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                       sizeof ( digit )  *  size_z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                Py_SETREF ( z ,  tmp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                z - > long_value . ob_digit [ size_z ]  =  ( digit ) c ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                + + size_z ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * res  =  z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* *str points to the first digit in a string of base `base` digits. base is an
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  integer  from  2  to  36  inclusive .  Here  we  don ' t  need  to  worry  about  prefixes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  like  0 x  or  leading  + -  signs .  The  string  should  be  null  terminated  consisting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  of  ASCII  digits  and  separating  underscores  possibly  with  trailing  whitespace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  but  we  have  to  validate  all  of  those  points  here . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  If  base  is  a  power  of  2  then  the  complexity  is  linear  in  the  number  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  characters  in  the  string .  Otherwise  a  quadratic  algorithm  is  used  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  non - binary  bases . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Return  values : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    -  Returns  - 1  on  syntax  error  ( exception  needs  to  be  set ,  * res  is  untouched ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-03 16:18:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *    -  Returns  0  and  sets  * res  to  NULL  for  MemoryError ,  OverflowError ,  or 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      _pylong . int_from_string ( )  errors . 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *    -  Returns  0  and  sets  * res  to  an  unsigned ,  unnormalized  PyLong  ( success ! ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Afterwards  * str  is  set  to  point  to  the  first  non - digit  ( which  may  be  * str ! ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_from_string_base ( const  char  * * str ,  int  base ,  PyLongObject  * * res )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  char  * start ,  * end ,  * p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    char  prev  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  digits  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  is_binary_base  =  ( base  &  ( base  -  1 ) )  = =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Here we do four things:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  Find  the  ` end `  of  the  string . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  Validate  the  string . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  Count  the  number  of  ` digits `  ( rather  than  underscores ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  Point  * str  to  the  end - of - string  or  first  invalid  character . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    start  =  p  =  * str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Leading underscore not allowed. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * start  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Verify all characters are digits and underscores. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( _PyLong_DigitValue [ Py_CHARMASK ( * p ) ]  <  base  | |  * p  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * p  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Double underscore not allowed. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( prev  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * str  =  p  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + digits ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        prev  =  * p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Trailing underscore not allowed. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( prev  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * str  =  p  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * str  =  end  =  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Reject empty strings */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( start  = =  end )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Allow only trailing whitespace after `end` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( * p  & &  Py_ISSPACE ( * p ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * str  =  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * p  ! =  ' \0 ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Pass  a  validated  string  consisting  of  only  valid  digits  and  underscores 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  to  long_from_xxx_base . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( is_binary_base )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Use the linear algorithm for binary bases. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  long_from_binary_base ( start ,  end ,  digits ,  base ,  res ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Limit the size to avoid excessive computation attacks exploiting the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  quadratic  algorithm .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( digits  >  _PY_LONG_MAX_STR_DIGITS_THRESHOLD )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyInterpreterState  * interp  =  _PyInterpreterState_GET ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-19 14:27:46 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            int  max_str_digits  =  interp - > long_state . max_str_digits ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( ( max_str_digits  >  0 )  & &  ( digits  >  max_str_digits ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 17:21:18 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                PyErr_Format ( PyExc_ValueError ,  _MAX_STR_DIGITS_ERROR_FMT_TO_INT , 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                             max_str_digits ,  digits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                * res  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if WITH_PYLONG_MODULE 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( digits  >  6000  & &  base  = =  10 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Switch to _pylong.int_from_string() */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  pylong_int_from_string ( start ,  end ,  res ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Use the quadratic algorithm for non binary bases. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  long_from_non_binary_base ( start ,  end ,  digits ,  base ,  res ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Parses an int from a bytestring. Leading and trailing whitespace will be
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ignored . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  If  successful ,  a  PyLong  object  will  be  returned  and  ' pend '  will  be  pointing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  to  the  first  unused  byte  unless  it ' s  NULL . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  If  unsuccessful ,  NULL  will  be  returned . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromString ( const  char  * str ,  char  * * pend ,  int  base )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign  =  1 ,  error_if_nonzero  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  char  * orig_str  =  str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * strobj ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  slen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( base  ! =  0  & &  base  <  2 )  | |  base  >  36 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " int() arg 2 must be >= 2 and <= 36 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( * str  ! =  ' \0 '  & &  Py_ISSPACE ( * str ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * str  = =  ' + ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( * str  = =  ' - ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + str ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( base  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( str [ 0 ]  ! =  ' 0 ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            base  =  10 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-03 22:16:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  if  ( str [ 1 ]  = =  ' x '  | |  str [ 1 ]  = =  ' X ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            base  =  16 ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  if  ( str [ 1 ]  = =  ' o '  | |  str [ 1 ]  = =  ' O ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            base  =  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  if  ( str [ 1 ]  = =  ' b '  | |  str [ 1 ]  = =  ' B ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            base  =  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* "old" (C-style) octal literal, now invalid.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               it  might  still  be  zero  though  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            error_if_nonzero  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            base  =  10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( str [ 0 ]  = =  ' 0 '  & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( ( base  = =  16  & &  ( str [ 1 ]  = =  ' x '  | |  str [ 1 ]  = =  ' X ' ) )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         ( base  = =  8   & &  ( str [ 1 ]  = =  ' o '  | |  str [ 1 ]  = =  ' O ' ) )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         ( base  = =  2   & &  ( str [ 1 ]  = =  ' b '  | |  str [ 1 ]  = =  ' B ' ) ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        str  + =  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* One underscore allowed here. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * str  = =  ' _ ' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            + + str ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* long_from_string_base is the main workhorse here. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  ret  =  long_from_string_base ( & str ,  base ,  & z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ret  = =  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Syntax error. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  onError ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Error. exception already set. */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( error_if_nonzero )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* reset the base to 0, else the exception message
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           doesn ' t  make  too  much  sense  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        base  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! _PyLong_IsZero ( z ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            goto  onError ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* there might still be other problems, therefore base
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           remains  zero  here  for  the  same  reason  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Set sign and normalize */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( sign  <  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_normalize ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z  =  maybe_small_long ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-25 10:09:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( pend  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-19 21:03:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pend  =  ( char  * ) str ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * )  z ; 
							 
						 
					
						
							
								
									
										
										
										
											2000-04-05 20:11:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  onError : 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( pend  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-19 21:03:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pend  =  ( char  * ) str ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_XDECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    slen  =  strlen ( orig_str )  <  200  ?  strlen ( orig_str )  :  200 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    strobj  =  PyUnicode_FromStringAndSize ( orig_str ,  slen ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( strobj  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 14:57:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyErr_Format ( PyExc_ValueError , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 21:14:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 " invalid literal for int() with base %d: %.200R " , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 base ,  strobj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( strobj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2000-04-05 20:11:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Since PyLong_FromString doesn't have a length parameter,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  check  here  for  possible  NULs  in  the  string . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Reports  an  invalid  literal  as  a  bytes  object . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FromBytes ( const  char  * s ,  Py_ssize_t  len ,  int  base )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * result ,  * strobj ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    char  * end  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-09-28 11:27:24 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    result  =  PyLong_FromString ( s ,  & end ,  base ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( end  = =  NULL  | |  ( result  ! =  NULL  & &  end  = =  s  +  len ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    strobj  =  PyBytes_FromStringAndSize ( s ,  Py_MIN ( len ,  200 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( strobj  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_Format ( PyExc_ValueError , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 21:14:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                     " invalid literal for int() with base %d: %.200R " , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                     base ,  strobj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( strobj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_FromUnicodeObject ( PyObject  * u ,  int  base )  
						 
					
						
							
								
									
										
										
										
											2000-04-05 20:11:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-08-03 21:14:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * result ,  * asciidig ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-20 10:16:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  char  * buffer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    char  * end  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  buflen ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    asciidig  =  _PyUnicode_TransformDecimalAndSpaceToASCII ( u ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-04 03:38:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( asciidig  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-13 21:23:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( PyUnicode_IS_ASCII ( asciidig ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Simply get a pointer to existing ASCII characters. */ 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    buffer  =  PyUnicode_AsUTF8AndSize ( asciidig ,  & buflen ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-13 21:23:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( buffer  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  PyLong_FromString ( buffer ,  & end ,  base ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( end  = =  NULL  | |  ( result  ! =  NULL  & &  end  = =  buffer  +  buflen ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( asciidig ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-13 21:23:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  result ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-04 03:38:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-13 21:23:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( asciidig ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( result ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 21:14:05 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyErr_Format ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 " invalid literal for int() with base %d: %.200R " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 base ,  u ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* forward */  
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  * x_divrem  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( PyLongObject  * ,  PyLongObject  * ,  PyLongObject  * * ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  * long_long ( PyObject  * v ) ;  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Int division with remainder, top-level routine */  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_divrem ( PyLongObject  * a ,  PyLongObject  * b ,  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            PyLongObject  * * pdiv ,  PyLongObject  * * prem ) 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a  =  _PyLong_DigitCount ( a ) ,  size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_b  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ZeroDivisionError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " integer division or modulo by zero " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  <  size_b  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( size_a  = =  size_b  & & 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         a - > long_value . ob_digit [ size_a - 1 ]  <  b - > long_value . ob_digit [ size_b - 1 ] ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* |a| < |b|. */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * prem  =  ( PyLongObject  * ) long_long ( ( PyObject  * ) a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-22 12:24:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-04 16:24:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pdiv  =  ( PyLongObject * ) _PyLong_GetZero ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_b  = =  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  rem  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        z  =  divrem1 ( a ,  b - > long_value . ob_digit [ 0 ] ,  & rem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * prem  =  ( PyLongObject  * )  PyLong_FromLong ( ( long ) rem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z  =  x_divrem ( a ,  b ,  prem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-11 16:07:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * prem  =  maybe_small_long ( * prem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Set the signs.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       The  quotient  z  has  the  sign  of  a * b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  remainder  r  has  the  sign  of  a , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       so  a  =  b * z  +  r .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ( _PyLong_IsNegative ( a ) )  ! =  ( _PyLong_IsNegative ( b ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_Negate ( & z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_CLEAR ( * prem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( a )  & &  ! _PyLong_IsZero ( * prem ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_Negate ( prem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_CLEAR ( * prem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    * pdiv  =  maybe_small_long ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Int remainder, top-level routine */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_rem ( PyLongObject  * a ,  PyLongObject  * b ,  PyLongObject  * * prem )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a  =  _PyLong_DigitCount ( a ) ,  size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_b  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ZeroDivisionError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " integer modulo by zero " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  <  size_b  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( size_a  = =  size_b  & & 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         a - > long_value . ob_digit [ size_a - 1 ]  <  b - > long_value . ob_digit [ size_b - 1 ] ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* |a| < |b|. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * prem  =  ( PyLongObject  * ) long_long ( ( PyObject  * ) a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - ( * prem  = =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_b  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * prem  =  rem1 ( a ,  b - > long_value . ob_digit [ 0 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Slow path using divrem. */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-31 18:41:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_XDECREF ( x_divrem ( a ,  b ,  prem ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-11 16:07:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * prem  =  maybe_small_long ( * prem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Set the sign. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( a )  & &  ! _PyLong_IsZero ( * prem ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_Negate ( prem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( * prem  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_CLEAR ( * prem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Unsigned int division with remainder -- the algorithm.  The arguments v1
  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   and  w1  should  satisfy  2  < =  _PyLong_DigitCount ( w1 )  < =  _PyLong_DigitCount ( v1 ) .  */ 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								x_divrem ( PyLongObject  * v1 ,  PyLongObject  * w1 ,  PyLongObject  * * prem )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * v ,  * w ,  * a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ,  k ,  size_v ,  size_w ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  d ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  wm1 ,  wm2 ,  carry ,  q ,  r ,  vtop ,  * v0 ,  * vk ,  * w0 ,  * ak ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  vv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sdigit  zhi ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    stwodigits  z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       edn . ) ,  section  4.3 .1 ,  Algorithm  D ] ,  except  that  we  don ' t  explicitly 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       handle  the  special  case  when  the  initial  estimate  q  for  a  quotient 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       digit  is  > =  PyLong_BASE :  the  max  value  for  q  is  PyLong_BASE + 1 ,  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       that  won ' t  overflow  a  digit .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* allocate space; w will also be used to hold the final remainder */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_v  =  _PyLong_DigitCount ( v1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_w  =  _PyLong_DigitCount ( w1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( size_v  > =  size_w  & &  size_w  > =  2 ) ;  /* Assert checks by div() */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    v  =  _PyLong_New ( size_v + 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( v  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * prem  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    w  =  _PyLong_New ( size_w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( w  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * prem  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       shift  v1  left  by  the  same  amount .   Results  go  into  w  and  v .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    d  =  PyLong_SHIFT  -  bit_length_digit ( w1 - > long_value . ob_digit [ size_w - 1 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    carry  =  v_lshift ( w - > long_value . ob_digit ,  w1 - > long_value . ob_digit ,  size_w ,  d ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( carry  = =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    carry  =  v_lshift ( v - > long_value . ob_digit ,  v1 - > long_value . ob_digit ,  size_v ,  d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( carry  ! =  0  | |  v - > long_value . ob_digit [ size_v - 1 ]  > =  w - > long_value . ob_digit [ size_w - 1 ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v - > long_value . ob_digit [ size_v ]  =  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        size_v + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Now v->long_value.ob_digit[size_v-1] < w->long_value.ob_digit[size_w-1], so quotient has
 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       at  most  ( and  usually  exactly )  k  =  size_v  -  size_w  digits .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    k  =  size_v  -  size_w ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( k  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  _PyLong_New ( k ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * prem  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    v0  =  v - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    w0  =  w - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    wm1  =  w0 [ size_w - 1 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    wm2  =  w0 [ size_w - 2 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( vk  =  v0 + k ,  ak  =  a - > long_value . ob_digit  +  k ;  vk - -  >  v0 ; )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           single - digit  quotient  q ,  remainder  in  vk [ 0 : size_w ] .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        SIGCHECK ( { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Py_DECREF ( w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * prem  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* estimate quotient digit q; may overestimate by 1 (rare) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        vtop  =  vk [ size_w ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( vtop  < =  wm1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        vv  =  ( ( twodigits ) vtop  < <  PyLong_SHIFT )  |  vk [ size_w - 1 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 19:06:00 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* The code used to compute the remainder via
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *      r  =  ( digit ) ( vv  -  ( twodigits ) wm1  *  q ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  and  compilers  generally  generated  code  to  do  the  *  and  - . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  But  modern  processors  generally  compute  q  and  r  with  a  single 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  instruction ,  and  modern  optimizing  compilers  exploit  that  if  we 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  _don ' t_  try  to  optimize  it . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        q  =  ( digit ) ( vv  /  wm1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 19:06:00 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        r  =  ( digit ) ( vv  %  wm1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( ( twodigits ) wm2  *  q  >  ( ( ( twodigits ) r  < <  PyLong_SHIFT ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                     |  vk [ size_w - 2 ] ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            - - q ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            r  + =  wm1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( r  > =  PyLong_BASE ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( q  < =  PyLong_BASE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* subtract q*w0[0:size_w] from vk[0:size_w+1] */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        zhi  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_w ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               - PyLong_BASE  *  q  < =  z  <  PyLong_BASE  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            z  =  ( sdigit ) vk [ i ]  +  zhi  - 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( stwodigits ) q  *  ( stwodigits ) w0 [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            vk [ i ]  =  ( digit ) z  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            zhi  =  ( sdigit ) Py_ARITHMETIC_RIGHT_SHIFT ( stwodigits , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                                    z ,  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* add w back if q was too large (this branch taken rarely) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( ( sdigit ) vtop  +  zhi  = =  - 1  | |  ( sdigit ) vtop  +  zhi  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( sdigit ) vtop  +  zhi  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  ( i  =  0 ;  i  <  size_w ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  + =  vk [ i ]  +  w0 [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                vk [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            - - q ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* store quotient digit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( q  <  PyLong_BASE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * - - ak  =  q ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* unshift remainder; we reuse w to store the result */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    carry  =  v_rshift ( w0 ,  v0 ,  size_w ,  d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( carry = = 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * prem  =  long_normalize ( w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_normalize ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-02 15:33:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   abs ( x )  <  1.0  and  e  > =  0 ;  return  x  and  put  e  in  * e .   Here  x  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   rounded  to  DBL_MANT_DIG  significant  bits  using  round - half - to - even . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   If  a  = =  0 ,  return  0.0  and  set  * e  =  0.   If  the  resulting  exponent 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   e  is  larger  than  PY_SSIZE_T_MAX ,  raise  OverflowError  and  return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   - 1.0 .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if DBL_MANT_DIG == 53 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define EXP2_DBL_MANT_DIG 9007199254740992.0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG)) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								double  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Frexp ( PyLongObject  * a ,  Py_ssize_t  * e )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  a_size ,  a_bits ,  shift_digits ,  shift_bits ,  x_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* See below for why x_digits is always large enough. */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-04 22:32:42 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  x_digits [ 2  +  ( DBL_MANT_DIG  +  1 )  /  PyLong_SHIFT ]  =  { 0 , } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    double  dx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Correction term for round-half-to-even rounding.  For a digit x,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       " x + half_even_correction[x & 7] "  gives  x  rounded  to  the  nearest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       multiple  of  4 ,  rounding  ties  to  a  multiple  of  8.  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    static  const  int  half_even_correction [ 8 ]  =  { 0 ,  - 1 ,  - 2 ,  1 ,  0 ,  - 1 ,  2 ,  1 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a_size  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( a_size  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Special case for 0: significand 0.0, exponent 0. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * e  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a_bits  =  bit_length_digit ( a - > long_value . ob_digit [ a_size - 1 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* The following is an overflow-free version of the check
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       " if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ... "  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a_size  > =  ( PY_SSIZE_T_MAX  -  1 )  /  PyLong_SHIFT  +  1  & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( a_size  >  ( PY_SSIZE_T_MAX  -  1 )  /  PyLong_SHIFT  +  1  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         a_bits  >  ( PY_SSIZE_T_MAX  -  1 )  %  PyLong_SHIFT  +  1 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        goto  overflow ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a_bits  =  ( a_size  -  1 )  *  PyLong_SHIFT  +  a_bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       ( shifting  left  if  a_bits  < =  DBL_MANT_DIG  +  2 ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Number  of  digits  needed  for  result :  write  // for floor division.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Then  if  shifting  left ,  we  end  up  using 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         1  +  a_size  +  ( DBL_MANT_DIG  +  2  -  a_bits )  // PyLong_SHIFT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       digits .   If  shifting  right ,  we  use 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         a_size  -  ( a_bits  -  DBL_MANT_DIG  -  2 )  // PyLong_SHIFT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       digits .   Using  a_size  =  1  +  ( a_bits  -  1 )  // PyLong_SHIFT along with
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  inequalities 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         m  // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         m  // PyLong_SHIFT - n // PyLong_SHIFT <=
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                          1  +  ( m  -  n  -  1 )  // PyLong_SHIFT,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       valid  for  any  integers  m  and  n ,  we  find  that  x_size  satisfies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         x_size  < =  2  +  ( DBL_MANT_DIG  +  1 )  // PyLong_SHIFT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       in  both  cases . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a_bits  < =  DBL_MANT_DIG  +  2 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shift_digits  =  ( DBL_MANT_DIG  +  2  -  a_bits )  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shift_bits  =  ( DBL_MANT_DIG  +  2  -  a_bits )  %  PyLong_SHIFT ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-04 22:32:42 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x_size  =  shift_digits ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        rem  =  v_lshift ( x_digits  +  x_size ,  a - > long_value . ob_digit ,  a_size , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                       ( int ) shift_bits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x_size  + =  a_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x_digits [ x_size + + ]  =  rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shift_digits  =  ( a_bits  -  DBL_MANT_DIG  -  2 )  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shift_bits  =  ( a_bits  -  DBL_MANT_DIG  -  2 )  %  PyLong_SHIFT ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        rem  =  v_rshift ( x_digits ,  a - > long_value . ob_digit  +  shift_digits , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                       a_size  -  shift_digits ,  ( int ) shift_bits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x_size  =  a_size  -  shift_digits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* For correct rounding below, we need the least significant
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           bit  of  x  to  be  ' sticky '  for  this  shift :  if  any  of  the  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           shifted  out  was  nonzero ,  we  set  the  least  significant  bit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           of  x .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( rem ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x_digits [ 0 ]  | =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( shift_digits  >  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( a - > long_value . ob_digit [ - - shift_digits ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    x_digits [ 0 ]  | =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-29 00:42:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( 1  < =  x_size  & &  x_size  < =  ( Py_ssize_t ) Py_ARRAY_LENGTH ( x_digits ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Round, and convert to double. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x_digits [ 0 ]  + =  half_even_correction [ x_digits [ 0 ]  &  7 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dx  =  x_digits [ - - x_size ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( x_size  >  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dx  =  dx  *  PyLong_BASE  +  x_digits [ - - x_size ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Rescale;  make correction if result is 1.0. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dx  / =  4.0  *  EXP2_DBL_MANT_DIG ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( dx  = =  1.0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( a_bits  = =  PY_SSIZE_T_MAX ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dx  =  0.5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a_bits  + =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * e  =  a_bits ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  _PyLong_IsNegative ( a )  ?  - dx  :  dx ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-02 15:33:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  overflow : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* exponent > PY_SSIZE_T_MAX */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " huge integer: number of bits overflows a Py_ssize_t " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * e  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  - 1.0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-02 15:33:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Get a C double from an int object.  Rounds to the nearest double,
  
						 
					
						
							
								
									
										
										
										
											2010-01-02 15:33:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   using  the  round - half - to - even  rule  in  the  case  of  a  tie .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								double  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_AsDouble ( PyObject  * v )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  exponent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    double  x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-09-07 21:40:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( v  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_BadInternalCall ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-07 21:40:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError ,  " an integer is required " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( ( PyLongObject  * ) v ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-06 12:21:33 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Fast path; single digit long (31 bits) will cast safely
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-21 10:33:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           to  double .   This  improves  performance  of  FP / long  operations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           by  20 % . 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 19:40:01 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        */ 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( double ) medium_value ( ( PyLongObject  * ) v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 19:40:01 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  _PyLong_Frexp ( ( PyLongObject  * ) v ,  & exponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( x  = =  - 1.0  & &  PyErr_Occurred ( ) )  | |  exponent  >  DBL_MAX_EXP )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 12:08:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " int too large to convert to float " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  - 1.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ldexp ( x ,  ( int ) exponent ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-02 15:33:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/* Methods */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* if a < b, return a negative number
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   if  a  = =  b ,  return  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   if  a  >  b ,  return  a  positive  number  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  Py_ssize_t  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_compare ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_BothAreCompact ( a ,  b ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_CompactValue ( a )  -  _PyLong_CompactValue ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  sign  =  _PyLong_SignedDigitCount ( a )  -  _PyLong_SignedDigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( sign  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_ssize_t  i  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sdigit  diff  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            diff  =  ( sdigit )  a - > long_value . ob_digit [ i ]  -  ( sdigit )  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( diff )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sign  =  _PyLong_IsNegative ( a )  ?  - diff  :  diff ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-08-24 00:41:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_richcompare ( PyObject  * self ,  PyObject  * other ,  int  op )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  result ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CHECK_BINOP ( self ,  other ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( self  = =  other ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  =  long_compare ( ( PyLongObject * ) self ,  ( PyLongObject * ) other ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-02 11:32:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_RETURN_RICHCOMPARE ( result ,  0 ,  op ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2006-08-24 00:41:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-04-22 15:39:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  void  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_dealloc ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* This should never get called, but we also don't want to SEGV if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  we  accidentally  decref  small  Ints  out  of  existence .  Instead , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  since  small  Ints  are  immortal ,  re - set  the  reference  count . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * pylong  =  ( PyLongObject * ) self ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( pylong  & &  _PyLong_IsCompact ( pylong ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        stwodigits  ival  =  medium_value ( pylong ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( IS_SMALL_INT ( ival ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyLongObject  * small_pylong  =  ( PyLongObject  * ) get_small_int ( ( sdigit ) ival ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( pylong  = =  small_pylong )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                _Py_SetImmortal ( self ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_TYPE ( self ) - > tp_free ( self ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-17 20:54:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  Py_hash_t  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_hash ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1993-03-29 10:43:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-10-23 16:20:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_uhash_t  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  _PyLong_CompactValue ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( x  = =  ( Py_uhash_t ) - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  ( Py_uhash_t ) - 2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  x ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sign  =  _PyLong_NonCompactSign ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( - - i  > =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-23 13:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           want  to  compute  x  *  2 * * PyLong_SHIFT  +  v - > long_value . ob_digit [ i ]  modulo 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-23 13:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           _PyHASH_MODULUS . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           The  computation  of  x  *  2 * * PyLong_SHIFT  %  _PyHASH_MODULUS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           amounts  to  a  rotation  of  the  bits  of  x .   To  see  this ,  write 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             x  *  2 * * PyLong_SHIFT  =  y  *  2 * * _PyHASH_BITS  +  z 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           where  y  =  x  > >  ( _PyHASH_BITS  -  PyLong_SHIFT )  gives  the  top 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           PyLong_SHIFT  bits  of  x  ( those  that  are  shifted  out  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           original  _PyHASH_BITS  bits ,  and  z  =  ( x  < <  PyLong_SHIFT )  & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           _PyHASH_MODULUS  gives  the  bottom  _PyHASH_BITS  -  PyLong_SHIFT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           bits  of  x ,  shifted  up .   Then  since  2 * * _PyHASH_BITS  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           congruent  to  1  modulo  _PyHASH_MODULUS ,  y * 2 * * _PyHASH_BITS  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           congruent  to  y  modulo  _PyHASH_MODULUS .   So 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             x  *  2 * * PyLong_SHIFT  =  y  +  z  ( mod  _PyHASH_MODULUS ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           The  right - hand  side  is  just  the  result  of  rotating  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           _PyHASH_BITS  bits  of  x  left  by  PyLong_SHIFT  places ;  since 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           not  all  _PyHASH_BITS  bits  of  x  are  1 s ,  the  same  is  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           after  rotation ,  so  0  < =  y + z  <  _PyHASH_MODULUS  and  y  +  z  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           the  reduction  of  x * 2 * * PyLong_SHIFT  modulo 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           _PyHASH_MODULUS .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ( ( x  < <  PyLong_SHIFT )  &  _PyHASH_MODULUS )  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( x  > >  ( _PyHASH_BITS  -  PyLong_SHIFT ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  + =  v - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-23 13:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( x  > =  _PyHASH_MODULUS ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  - =  _PyHASH_MODULUS ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  x  *  sign ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-23 16:20:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( x  = =  ( Py_uhash_t ) - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  ( Py_uhash_t ) - 2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-17 20:54:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( Py_hash_t ) x ; 
							 
						 
					
						
							
								
									
										
										
										
											1993-03-29 10:43:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Add the absolute values of two integers. */  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								x_add ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a  =  _PyLong_DigitCount ( a ) ,  size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Ensure a is the larger of the two: */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  <  size_b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        {  PyLongObject  * temp  =  a ;  a  =  b ;  b  =  temp ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        {  Py_ssize_t  size_temp  =  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            size_a  =  size_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            size_b  =  size_temp ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size_a + 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  size_b ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        carry  + =  a - > long_value . ob_digit [ i ]  +  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( ;  i  <  size_a ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        carry  + =  a - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z - > long_value . ob_digit [ i ]  =  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  long_normalize ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Subtract the absolute values of two integers. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								x_sub ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a  =  _PyLong_DigitCount ( a ) ,  size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  sign  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  borrow  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Ensure a is the larger of the two: */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  <  size_b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sign  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        {  PyLongObject  * temp  =  a ;  a  =  b ;  b  =  temp ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        {  Py_ssize_t  size_temp  =  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            size_a  =  size_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            size_b  =  size_temp ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( size_a  = =  size_b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Find highest digit where a and b differ: */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( - - i  > =  0  & &  a - > long_value . ob_digit [ i ]  = =  b - > long_value . ob_digit [ i ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( i  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ( PyLongObject  * ) PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( a - > long_value . ob_digit [ i ]  <  b - > long_value . ob_digit [ i ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            sign  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            {  PyLongObject  * temp  =  a ;  a  =  b ;  b  =  temp ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_a  =  size_b  =  i + 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size_a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  size_b ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* The following assumes unsigned arithmetic
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           works  module  2 * * N  for  some  N > PyLong_SHIFT .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        borrow  =  a - > long_value . ob_digit [ i ]  -  b - > long_value . ob_digit [ i ]  -  borrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  borrow  &  PyLong_MASK ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        borrow  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  & =  1 ;  /* Keep only one sign bit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( ;  i  <  size_a ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        borrow  =  a - > long_value . ob_digit [ i ]  -  borrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  borrow  &  PyLong_MASK ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        borrow  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        borrow  & =  1 ;  /* Keep only one sign bit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( borrow  = =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( sign  <  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 15:54:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  maybe_small_long ( long_normalize ( z ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-27 09:21:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Add ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											1992-01-14 18:36:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_BothAreCompact ( a ,  b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( medium_value ( a )  +  medium_value ( b ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-27 09:21:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( a ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  x_add ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-04 00:06:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( z  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                /* x_add received at least one multiple-digit int,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   and  thus  z  must  be  a  multiple - digit  int . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   That  also  means  z  is  not  an  element  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   small_ints ,  so  negating  it  in - place  is  safe .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( Py_REFCNT ( z )  = =  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-04 00:06:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            z  =  x_sub ( b ,  a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  x_sub ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            z  =  x_add ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-27 09:21:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_add ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_Add ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-18 18:19:58 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Subtract ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											1992-01-14 18:36:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_BothAreCompact ( a ,  b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( medium_value ( a )  -  medium_value ( b ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( a ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 15:54:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  x_sub ( b ,  a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  x_add ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 15:54:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( z  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                assert ( _PyLong_IsZero ( z )  | |  Py_REFCNT ( z )  = =  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 15:54:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-04 00:06:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  x_add ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            z  =  x_sub ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-18 18:19:58 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_sub ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_Subtract ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Grade school multiplication, ignoring the signs.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Returns  the  absolute  value  of  the  product ,  or  NULL  if  error . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								x_mul ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size_a  +  size_b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    memset ( z - > long_value . ob_digit ,  0 ,  _PyLong_DigitCount ( z )  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( a  = =  b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Efficient squaring per HAC, Algorithm 14.16:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  http : //www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  Gives  slightly  less  than  a  2 x  speedup  when  a  = =  b , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  via  exploiting  that  each  entry  in  the  multiplication 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  pyramid  appears  twice  ( except  for  the  size_a  squares ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  * paend  =  a - > long_value . ob_digit  +  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_a ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  carry ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            twodigits  f  =  a - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            digit  * pz  =  z - > long_value . ob_digit  +  ( i  < <  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            digit  * pa  =  a - > long_value . ob_digit  +  i  +  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            SIGCHECK ( { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    Py_DECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            carry  =  * pz  +  f  *  f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * pz + +  =  ( digit ) ( carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( carry  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Now f is added in twice in each column of the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *  pyramid  it  appears .   Same  as  adding  f < < 1  once . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            f  < < =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( pa  <  paend )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  + =  * pz  +  * pa + +  *  f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * pz + +  =  ( digit ) ( carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( carry  < =  ( PyLong_MASK  < <  1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( carry )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-03 20:41:16 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                /* See comment below. pz points at the highest possible
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 *  carry  position  from  the  last  outer  loop  iteration ,  so 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 *  * pz  is  at  most  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( * pz  < =  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                carry  + =  * pz ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-03 20:41:16 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                * pz  =  ( digit ) ( carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-03 20:41:16 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( carry )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    /* If there's still a carry, it must be into a position
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     *  that  still  holds  a  0.  Where  the  base 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     ^  B  is  1  < <  PyLong_SHIFT ,  the  last  add  was  of  a  carry  no 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     *  more  than  2 * B  -  2  to  a  stored  digit  no  more  than  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     *  So  the  sum  was  no  more  than  2 * B  -  1 ,  so  the  current 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     *  carry  no  more  than  floor ( ( 2 * B  -  1 ) / B )  =  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    assert ( carry  = =  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    assert ( pz [ 1 ]  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    pz [ 1 ]  =  ( digit ) carry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  {       /* a is not the same as b -- gradeschool int mult */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_a ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            twodigits  carry  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            twodigits  f  =  a - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            digit  * pz  =  z - > long_value . ob_digit  +  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            digit  * pb  =  b - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            digit  * pbend  =  b - > long_value . ob_digit  +  size_b ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            SIGCHECK ( { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    Py_DECREF ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( pb  <  pbend )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  + =  * pz  +  * pb + +  *  f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * pz + +  =  ( digit ) ( carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( carry  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( carry ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                * pz  + =  ( digit ) ( carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( ( carry  > >  PyLong_SHIFT )  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_normalize ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* A helper for Karatsuba multiplication (k_mul).
  
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Takes  an  int  " n "  and  an  integer  " size "  representing  the  place  to 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   split ,  and  sets  low  and  high  such  that  abs ( n )  = =  ( high  < <  size )  +  low , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   viewing  the  shift  as  being  by  digits .   The  sign  bit  is  ignored ,  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   the  return  values  are  > =  0. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   Returns  0  on  success ,  - 1  on  failure . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								kmul_split ( PyLongObject  * n ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           Py_ssize_t  size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           PyLongObject  * * high , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           PyLongObject  * * low ) 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * hi ,  * lo ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  size_lo ,  size_hi ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  Py_ssize_t  size_n  =  _PyLong_DigitCount ( n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-04 23:14:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_lo  =  Py_MIN ( size_n ,  size ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_hi  =  size_n  -  size_lo ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( hi  =  _PyLong_New ( size_hi ) )  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( lo  =  _PyLong_New ( size_lo ) )  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( hi ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    memcpy ( lo - > long_value . ob_digit ,  n - > long_value . ob_digit ,  size_lo  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    memcpy ( hi - > long_value . ob_digit ,  n - > long_value . ob_digit  +  size_lo ,  size_hi  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * high  =  long_normalize ( hi ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * low  =  long_normalize ( lo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 22:01:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyLongObject  * k_lopsided_mul ( PyLongObject  * a ,  PyLongObject  * b ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Karatsuba multiplication.  Ignores the input signs, and returns the
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  absolute  value  of  the  product  ( or  NULL  if  error ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  See  Knuth  Vol .  2  Chapter  4.3 .3  ( Pp .  294 - 295 ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								k_mul ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  asize  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  bsize  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * ah  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * al  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * bh  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * bl  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * ret  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * t1 ,  * t2 ,  * t3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  shift ;            /* the number of digits we split off */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Let  k  =  ( ah + al ) * ( bh + bl )  =  ah * bl  +  al * bh   +  ah * bh  +  al * bl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Then  the  original  product  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      ah * bh * X * X  +  ( k  -  ah * bh  -  al * bl ) * X  +  al * bl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  By  picking  X  to  be  a  power  of  2 ,  " *X "  is  just  shifting ,  and  it ' s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  been  reduced  to  3  multiplies  on  numbers  half  the  size . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* We want to split based on the larger number; fiddle so that b
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  is  largest . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( asize  >  bsize )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t1  =  a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  =  b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  t1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  =  asize ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        asize  =  bsize ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bsize  =  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Use gradeschool math when either number is too small. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    i  =  a  = =  b  ?  KARATSUBA_SQUARE_CUTOFF  :  KARATSUBA_CUTOFF ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( asize  < =  i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( asize  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ( PyLongObject  * ) PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  x_mul ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* If a is small compared to b, splitting on b gives a degenerate
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  case  with  ah = = 0 ,  and  Karatsuba  may  be  ( even  much )  less  efficient 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  than  " grade school "  then .   However ,  we  can  still  win ,  by  viewing 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  b  as  a  string  of  " big digits " ,  each  of  the  same  width  as  a .  That 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  leads  to  a  sequence  of  balanced  calls  to  k_mul . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( 2  *  asize  < =  bsize ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  k_lopsided_mul ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Split a & b into hi & lo pieces. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    shift  =  bsize  > >  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( kmul_split ( a ,  shift ,  & ah ,  & al )  <  0 )  goto  fail ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( _PyLong_IsPositive ( ah ) ) ;         /* the split isn't degenerate */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a  = =  b )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        bh  =  ( PyLongObject * ) Py_NewRef ( ah ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bl  =  ( PyLongObject * ) Py_NewRef ( al ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( kmul_split ( b ,  shift ,  & bh ,  & bl )  <  0 )  goto  fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* The plan:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  1.  Allocate  result  space  ( asize  +  bsize  digits :   that ' s  always 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     enough ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  2.  Compute  ah * bh ,  and  copy  into  result  at  2 * shift . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  3.  Compute  al * bl ,  and  copy  into  result  at  0.   Note  that  this 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     can ' t  overlap  with  # 2. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  4.  Subtract  al * bl  from  the  result ,  starting  at  shift .   This  may 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     underflow  ( borrow  out  of  the  high  digit ) ,  but  we  don ' t  care : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     we ' re  effectively  doing  unsigned  arithmetic  mod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     BASE * * ( sizea  +  sizeb ) ,  and  so  long  as  the  * final *  result  fits , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     borrows  and  carries  out  of  the  high  digit  can  be  ignored . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  5.  Subtract  ah * bh  from  the  result ,  starting  at  shift . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  6.  Compute  ( ah + al ) * ( bh + bl ) ,  and  add  it  into  the  result  starting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *     at  shift . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* 1. Allocate result space. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ret  =  _PyLong_New ( asize  +  bsize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ret  = =  NULL )  goto  fail ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifdef Py_DEBUG 
  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Fill with trash, to catch reference to uninitialized digits. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    memset ( ret - > long_value . ob_digit ,  0xDF ,  _PyLong_DigitCount ( ret )  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
											 
										
											
												x_mul():  This failed to normalize its result.
k_mul():  This didn't allocate enough result space when one input had
more than twice as many bits as the other.  This was partly hidden by
that x_mul() didn't normalize its result.
The Karatsuba recurrence is pretty much hosed if the inputs aren't
roughly the same size.  If one has at least twice as many bits as the
other, we get a degenerate case where the "high half" of the smaller
input is 0.  Added a special case for that, for speed, but despite that
it helped, this can still be much slower than the "grade school" method.
It seems to take a really wild imbalance to trigger that; e.g., a
2**22-bit input times a 1000-bit input on my box runs about twice as slow
under k_mul than under x_mul.  This still needs to be addressed.
I'm also not sure that allocating a->ob_size + b->ob_size digits is
enough, given that this is computing k = (ah+al)*(bh+bl) instead of
k = (ah-al)*(bl-bh); i.e., it's certainly enough for the final result,
but it's vaguely possible that adding in the "artificially" large k may
overflow that temporarily.  If so, an assert will trigger in the debug
build, but we'll probably compute the right result anyway(!).
											 
										 
										
											2002-08-12 06:17:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* 2. t1 <- ah*bh, and copy into high digits of result. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( t1  =  k_mul ( ah ,  bh ) )  = =  NULL )  goto  fail ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ! _PyLong_IsNegative ( t1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( 2 * shift  +  _PyLong_DigitCount ( t1 )  < =  _PyLong_DigitCount ( ret ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    memcpy ( ret - > long_value . ob_digit  +  2 * shift ,  t1 - > long_value . ob_digit , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           _PyLong_DigitCount ( t1 )  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Zero-out the digits higher than the ah*bh copy. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( ret )  -  2 * shift  -  _PyLong_DigitCount ( t1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        memset ( ret - > long_value . ob_digit  +  2 * shift  +  _PyLong_DigitCount ( t1 ) ,  0 , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               i  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* 3. t2 <- al*bl, and copy into the low digits. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( t2  =  k_mul ( al ,  bl ) )  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( t1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ! _PyLong_IsNegative ( t2 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( _PyLong_DigitCount ( t2 )  < =  2 * shift ) ;  /* no overlap with high digits */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    memcpy ( ret - > long_value . ob_digit ,  t2 - > long_value . ob_digit ,  _PyLong_DigitCount ( t2 )  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Zero out remaining digits. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  2 * shift  -  _PyLong_DigitCount ( t2 ) ;           /* number of uninitialized digits */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        memset ( ret - > long_value . ob_digit  +  _PyLong_DigitCount ( t2 ) ,  0 ,  i  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2).  We do al*bl first
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  because  it ' s  fresher  in  cache . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_DigitCount ( ret )  -  shift ;   /* # digits after shift */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( void ) v_isub ( ret - > long_value . ob_digit  +  shift ,  i ,  t2 - > long_value . ob_digit ,  _PyLong_DigitCount ( t2 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( t2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( void ) v_isub ( ret - > long_value . ob_digit  +  shift ,  i ,  t1 - > long_value . ob_digit ,  _PyLong_DigitCount ( t1 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( t1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* 6. t3 <- (ah+al)(bh+bl), and add into result. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( t1  =  x_add ( ah ,  al ) )  = =  NULL )  goto  fail ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( ah ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( al ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ah  =  al  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a  = =  b )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t2  =  ( PyLongObject * ) Py_NewRef ( t1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( ( t2  =  x_add ( bh ,  bl ) )  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( t1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( bh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( bl ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bh  =  bl  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t3  =  k_mul ( t1 ,  t2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( t1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( t2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( t3  = =  NULL )  goto  fail ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ! _PyLong_IsNegative ( t3 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Add t3.  It's not obvious why we can't run out of room here.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  See  the  ( * )  comment  after  this  function . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( void ) v_iadd ( ret - > long_value . ob_digit  +  shift ,  i ,  t3 - > long_value . ob_digit ,  _PyLong_DigitCount ( t3 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( t3 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_normalize ( ret ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  fail : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_XDECREF ( ret ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( ah ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( al ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( bh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( bl ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-13 20:37:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* (*) Why adding t3 can't "run out of room" above.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-15 20:06:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Let  f ( x )  mean  the  floor  of  x  and  c ( x )  mean  the  ceiling  of  x .   Some  facts  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to  start  with :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								1.  For  any  integer  i ,  i  =  c ( i / 2 )  +  f ( i / 2 ) .   In  particular ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   bsize  =  c ( bsize / 2 )  +  f ( bsize / 2 ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								2.  shift  =  f ( bsize / 2 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								3.  asize  < =  bsize  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								4.  Since  we  call  k_lopsided_mul  if  asize * 2  < =  bsize ,  asize * 2  >  bsize  in  this  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   routine ,  so  asize  >  bsize / 2  > =  f ( bsize / 2 )  in  this  routine . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								We  allocated  asize  +  bsize  result  digits ,  and  add  t3  into  them  at  an  offset  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								of  shift .   This  leaves  asize + bsize - shift  allocated  digit  positions  for  t3  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to  fit  into ,  =  ( by  # 1  and  # 2 )  asize  +  f ( bsize / 2 )  +  c ( bsize / 2 )  -  f ( bsize / 2 )  =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								asize  +  c ( bsize / 2 )  available  digit  positions .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bh  has  c ( bsize / 2 )  digits ,  and  bl  at  most  f ( size / 2 )  digits .   So  bh + hl  has  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								at  most  c ( bsize / 2 )  digits  +  1  bit .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If  asize  = =  bsize ,  ah  has  c ( bsize / 2 )  digits ,  else  ah  has  at  most  f ( bsize / 2 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								digits ,  and  al  has  at  most  f ( bsize / 2 )  digits  in  any  case .   So  ah + al  has  at  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								most  ( asize  = =  bsize  ?  c ( bsize / 2 )  :  f ( bsize / 2 ) )  digits  +  1  bit .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The  product  ( ah + al ) * ( bh + bl )  therefore  has  at  most  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    c ( bsize / 2 )  +  ( asize  = =  bsize  ?  c ( bsize / 2 )  :  f ( bsize / 2 ) )  digits  +  2  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								and  we  have  asize  +  c ( bsize / 2 )  available  digit  positions .   We  need  to  show  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								this  is  always  enough .   An  instance  of  c ( bsize / 2 )  cancels  out  in  both ,  so  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								the  question  reduces  to  whether  asize  digits  is  enough  to  hold  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( asize  = =  bsize  ?  c ( bsize / 2 )  :  f ( bsize / 2 ) )  digits  +  2  bits .   If  asize  <  bsize ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								then  we ' re  asking  whether  asize  digits  > =  f ( bsize / 2 )  digits  +  2  bits .   By  # 4 ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								asize  is  at  least  f ( bsize / 2 ) + 1  digits ,  so  this  in  turn  reduces  to  whether  1  
						 
					
						
							
								
									
										
											 
										
											
												Merged revisions 56467-56482 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
  r56477 | martin.v.loewis | 2007-07-21 09:04:38 +0200 (Sa, 21 Jul 2007) | 11 lines
  Merged revisions 56466-56476 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk
  ........
    r56476 | martin.v.loewis | 2007-07-21 08:55:02 +0200 (Sa, 21 Jul 2007) | 4 lines
    PEP 3123: Provide forward compatibility with Python 3.0, while keeping
    backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and
    PyVarObject_HEAD_INIT.
  ........
................
  r56478 | martin.v.loewis | 2007-07-21 09:47:23 +0200 (Sa, 21 Jul 2007) | 2 lines
  PEP 3123: Use proper C inheritance for PyObject.
................
  r56479 | martin.v.loewis | 2007-07-21 10:06:55 +0200 (Sa, 21 Jul 2007) | 3 lines
  Add longintrepr.h to Python.h, so that the compiler can
  see that PyFalse is really some kind of PyObject*.
................
  r56480 | martin.v.loewis | 2007-07-21 10:47:18 +0200 (Sa, 21 Jul 2007) | 2 lines
  Qualify SHIFT, MASK, BASE.
................
  r56482 | martin.v.loewis | 2007-07-21 19:10:57 +0200 (Sa, 21 Jul 2007) | 2 lines
  Correctly refer to _ob_next.
................
											 
										 
										
											2007-07-21 17:22:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								digit  is  enough  to  hold  2  bits .   This  is  so  since  PyLong_SHIFT = 15  > =  2.   If  
						 
					
						
							
								
									
										
										
										
											2002-08-15 20:06:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								asize  = =  bsize ,  then  we ' re  asking  whether  bsize  digits  is  enough  to  hold  
						 
					
						
							
								
									
										
										
										
											2002-08-15 20:10:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								c ( bsize / 2 )  digits  +  2  bits ,  or  equivalently  ( by  # 1 )  whether  f ( bsize / 2 )  digits  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is  enough  to  hold  2  bits .   This  is  so  if  bsize  > =  2 ,  which  holds  because  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bsize  > =  KARATSUBA_CUTOFF  > =  2.  
						 
					
						
							
								
									
										
										
										
											2002-08-14 16:36:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-14 17:07:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Note  that  since  there ' s  always  enough  room  for  ( ah + al ) * ( bh + bl ) ,  and  that ' s  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								clearly  > =  each  of  ah * bh  and  al * bl ,  there ' s  always  enough  room  to  subtract  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ah * bh  and  al * bl  too .  
						 
					
						
							
								
									
										
										
										
											2002-08-13 20:37:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 22:01:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* b has at least twice the digits of a, and a is big enough that Karatsuba
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  would  pay  off  * if *  the  inputs  had  balanced  sizes .   View  b  as  a  sequence 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  of  slices ,  each  with  the  same  number  of  digits  as  a ,  and  multiply  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  slices  by  a ,  one  at  a  time .   This  gives  k_mul  balanced  inputs  to  work  with , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  and  is  also  cache - friendly  ( we  compute  one  double - width  slice  of  the  result 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-15 05:18:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  at  a  time ,  then  move  on ,  never  backtracking  except  for  the  helpful 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 22:01:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  single - width  slice  overlap  between  successive  partial  sums ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								k_lopsided_mul ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    const  Py_ssize_t  asize  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  bsize  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  nbdone ;           /* # of b digits already multiplied */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * ret ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * bslice  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( asize  >  KARATSUBA_CUTOFF ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( 2  *  asize  < =  bsize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Allocate result space, and zero it out. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ret  =  _PyLong_New ( asize  +  bsize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ret  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    memset ( ret - > long_value . ob_digit ,  0 ,  _PyLong_DigitCount ( ret )  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Successive slices of b are copied into bslice. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bslice  =  _PyLong_New ( asize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( bslice  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    nbdone  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( bsize  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyLongObject  * product ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-04 23:14:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  Py_ssize_t  nbtouse  =  Py_MIN ( bsize ,  asize ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Multiply the next slice of b by a. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        memcpy ( bslice - > long_value . ob_digit ,  b - > long_value . ob_digit  +  nbdone , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               nbtouse  *  sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( nbtouse  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( bslice ,  1 ,  nbtouse ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        product  =  k_mul ( a ,  bslice ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( product  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Add into result. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ( void ) v_iadd ( ret - > long_value . ob_digit  +  nbdone ,  _PyLong_DigitCount ( ret )  -  nbdone , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     product - > long_value . ob_digit ,  _PyLong_DigitCount ( product ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _Py_DECREF_INT ( product ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bsize  - =  nbtouse ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        nbdone  + =  nbtouse ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _Py_DECREF_INT ( bslice ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  long_normalize ( ret ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 22:01:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  fail : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( ret ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( bslice ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 22:01:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 10:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Multiply ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* fast path for single-digit multiplication */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_BothAreCompact ( a ,  b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        stwodigits  v  =  medium_value ( a )  *  medium_value ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z  =  k_mul ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Negate if exactly one of the inputs is negative. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! _PyLong_SameSign ( a ,  b )  & &  z )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_Negate ( & z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 10:56:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_mul ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_Multiply ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Fast modulo division for single-digit longs. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fast_mod ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sdigit  left  =  a - > long_value . ob_digit [ 0 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sdigit  right  =  b - > long_value . ob_digit [ 0 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sdigit  mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( _PyLong_DigitCount ( a )  = =  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( _PyLong_DigitCount ( b )  = =  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sdigit  sign  =  _PyLong_CompactSign ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( _PyLong_SameSign ( a ,  b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  left  %  right ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Either 'a' or 'b' is negative. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mod  =  right  -  1  -  ( left  -  1 )  %  right ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromLong ( mod  *  sign ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Fast floor division for single-digit longs. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fast_floor_div ( PyLongObject  * a ,  PyLongObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sdigit  left  =  a - > long_value . ob_digit [ 0 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sdigit  right  =  b - > long_value . ob_digit [ 0 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sdigit  div ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( _PyLong_DigitCount ( a )  = =  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( _PyLong_DigitCount ( b )  = =  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_SameSign ( a ,  b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        div  =  left  /  right ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Either 'a' or 'b' is negative. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        div  =  - 1  -  ( left  -  1 )  /  right ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  PyLong_FromLong ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifdef WITH_PYLONG_MODULE 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* asymptotically faster divmod, using _pylong.py */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								pylong_int_divmod ( PyLongObject  * v ,  PyLongObject  * w ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  PyLongObject  * * pdiv ,  PyLongObject  * * pmod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * mod  =  PyImport_ImportModule ( " _pylong " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( mod  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * result  =  PyObject_CallMethod ( mod ,  " int_divmod " ,  " OO " ,  v ,  w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyTuple_Check ( result ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " tuple is required from int_divmod() " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * q  =  PyTuple_GET_ITEM ( result ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * r  =  PyTuple_GET_ITEM ( result ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( q )  | |  ! PyLong_Check ( r ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " tuple of int is required from int_divmod() " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( pdiv  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pdiv  =  ( PyLongObject  * ) Py_NewRef ( q ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( pmod  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        * pmod  =  ( PyLongObject  * ) Py_NewRef ( r ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  /* WITH_PYLONG_MODULE */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* The / and % operators are now defined in terms of divmod().
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   The  expression  a  mod  b  has  the  value  a  -  b * floor ( a / b ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   The  long_divrem  function  gives  the  remainder  after  division  of 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								   | a |  by  | b | ,  with  the  sign  of  a .   This  is  also  expressed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   as  a  -  b * trunc ( a / b ) ,  if  trunc  truncates  towards  zero . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   Some  examples : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     a            b       a  rem  b          a  mod  b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     13           10       3                3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    - 13           10      - 3                7 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     13          - 10       3               - 7 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    - 13          - 10      - 3               - 3 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								   So ,  to  get  from  rem  to  mod ,  we  have  to  add  b  if  a  and  b 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   have  different  signs .   We  then  subtract  one  from  the  ' div ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   part  of  the  outcome  to  keep  the  invariant  intact .  */ 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Compute
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      * pdiv ,  * pmod  =  divmod ( v ,  w ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  NULL  can  be  passed  for  pdiv  or  pmod ,  in  which  case  that  part  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  the  result  is  simply  thrown  away .   The  caller  owns  a  reference  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  each  of  these  it  requests  ( does  not  pass  NULL  for ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2002-08-12 02:31:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								l_divmod ( PyLongObject  * v ,  PyLongObject  * w ,  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         PyLongObject  * * pdiv ,  PyLongObject  * * pmod ) 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * div ,  * mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_DigitCount ( v )  = =  1  & &  _PyLong_DigitCount ( w )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Fast path for single-digit longs */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        div  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( pdiv  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            div  =  ( PyLongObject  * ) fast_floor_div ( v ,  w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( div  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( pmod  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            mod  =  ( PyLongObject  * ) fast_mod ( v ,  w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( mod  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Py_XDECREF ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * pmod  =  mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( pdiv  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* We only want to set `*pdiv` when `*pmod` is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               set  successfully .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * pdiv  =  div ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if WITH_PYLONG_MODULE 
  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_v  =  _PyLong_DigitCount ( v ) ;  /* digits in numerator */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  size_w  =  _PyLong_DigitCount ( w ) ;  /* digits in denominator */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-25 22:00:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( size_w  >  300  & &  ( size_v  -  size_w )  >  150 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Switch to _pylong.int_divmod().  If the quotient is small then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          " schoolbook "  division  is  linear - time  so  don ' t  use  in  that  case . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          These  limits  are  empirically  determined  and  should  be  slightly 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          conservative  so  that  _pylong  is  used  in  cases  it  is  likely 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          to  be  faster .  See  Tools / scripts / divmod_threshold . py .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  pylong_int_divmod ( v ,  w ,  pdiv ,  pmod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( long_divrem ( v ,  w ,  & div ,  & mod )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ( _PyLong_IsNegative ( mod )  & &  _PyLong_IsPositive ( w ) )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( _PyLong_IsPositive ( mod )  & &  _PyLong_IsNegative ( w ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyLongObject  * temp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        temp  =  ( PyLongObject  * )  long_add ( mod ,  w ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( mod ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( mod  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        temp  =  ( PyLongObject  * )  long_sub ( div ,  ( PyLongObject  * ) _PyLong_GetOne ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:09:41 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( temp  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( div ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( pdiv  ! =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * pdiv  =  div ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( pmod  ! =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * pmod  =  mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Compute
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      * pmod  =  v  %  w 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  pmod  cannot  be  NULL .  The  caller  owns  a  reference  to  pmod . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								l_mod ( PyLongObject  * v ,  PyLongObject  * w ,  PyLongObject  * * pmod )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( pmod ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_DigitCount ( v )  = =  1  & &  _PyLong_DigitCount ( w )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Fast path for single-digit longs */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * pmod  =  ( PyLongObject  * ) fast_mod ( v ,  w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - ( * pmod  = =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( long_rem ( v ,  w ,  & mod )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ( _PyLong_IsNegative ( mod )  & &  _PyLong_IsPositive ( w ) )  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( _PyLong_IsPositive ( mod )  & &  _PyLong_IsNegative ( w ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyLongObject  * temp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        temp  =  ( PyLongObject  * )  long_add ( mod ,  w ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( mod ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( mod  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * pmod  =  mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_div ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * div ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_DigitCount ( ( PyLongObject * ) a )  = =  1  & &  _PyLong_DigitCount ( ( PyLongObject * ) b )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-11 10:26:27 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  fast_floor_div ( ( PyLongObject * ) a ,  ( PyLongObject * ) b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( l_divmod ( ( PyLongObject * ) a ,  ( PyLongObject * ) b ,  & div ,  NULL )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        div  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) div ; 
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* PyLong/PyLong -> float, with correctly rounded result. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define MANT_DIG_DIGITS (DBL_MANT_DIG  /  PyLong_SHIFT) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-09-04 05:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_true_divide ( PyObject  * v ,  PyObject  * w )  
						 
					
						
							
								
									
										
										
										
											2001-09-04 05:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * a ,  * b ,  * x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  a_size ,  b_size ,  shift ,  extra_bits ,  diff ,  x_size ,  x_bits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  mask ,  low ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  inexact ,  negate ,  a_is_small ,  b_is_small ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    double  dx ,  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( v ,  w ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  ( PyLongObject  * ) v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b  =  ( PyLongObject  * ) w ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Method  in  a  nutshell : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         0.  reduce  to  case  a ,  b  >  0 ;  filter  out  obvious  underflow / overflow 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         1.  choose  a  suitable  integer  ' shift ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         2.  use  integer  arithmetic  to  compute  x  =  floor ( 2 * * - shift * a / b ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         3.  adjust  x  for  correct  rounding 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         4.  convert  x  to  a  double  dx  with  the  same  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         5.  return  ldexp ( dx ,  shift ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       In  more  detail : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       0.  For  any  a ,  a / 0  raises  ZeroDivisionError ;  for  nonzero  b ,  0 / b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       returns  either  0.0  or  - 0.0 ,  depending  on  the  sign  of  b .   For  a  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       b  both  nonzero ,  ignore  signs  of  a  and  b ,  and  add  the  sign  back  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       at  the  end .   Now  write  a_bits  and  b_bits  for  the  bit  lengths  of  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       and  b  respectively  ( that  is ,  a_bits  =  1  +  floor ( log_2 ( a ) ) ;  likewise 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       for  b ) .   Then 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          2 * * ( a_bits  -  b_bits  -  1 )  <  a / b  <  2 * * ( a_bits  -  b_bits  +  1 ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       So  if  a_bits  -  b_bits  >  DBL_MAX_EXP  then  a / b  >  2 * * DBL_MAX_EXP  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       so  overflows .   Similarly ,  if  a_bits  -  b_bits  <  DBL_MIN_EXP  - 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       DBL_MANT_DIG  -  1  then  a / b  underflows  to  0.   With  these  cases  out  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  way ,  we  can  assume  that 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          DBL_MIN_EXP  -  DBL_MANT_DIG  -  1  < =  a_bits  -  b_bits  < =  DBL_MAX_EXP . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       1.  The  integer  ' shift '  is  chosen  so  that  x  has  the  right  number  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       bits  for  a  double ,  plus  two  or  three  extra  bits  that  will  be  used 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       in  the  rounding  decisions .   Writing  a_bits  and  b_bits  for  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       number  of  significant  bits  in  a  and  b  respectively ,  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       straightforward  formula  for  shift  is : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          shift  =  a_bits  -  b_bits  -  DBL_MANT_DIG  -  2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       This  is  fine  in  the  usual  case ,  but  if  a / b  is  smaller  than  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       smallest  normal  float  then  it  can  lead  to  double  rounding  on  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       IEEE  754  platform ,  giving  incorrectly  rounded  results .   So  we 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       adjust  the  formula  slightly .   The  actual  formula  used  is : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           shift  =  MAX ( a_bits  -  b_bits ,  DBL_MIN_EXP )  -  DBL_MANT_DIG  -  2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       2.  The  quantity  x  is  computed  by  first  shifting  a  ( left  - shift  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       if  shift  < =  0 ,  right  shift  bits  if  shift  >  0 )  and  then  dividing  by 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       b .   For  both  the  shift  and  the  division ,  we  keep  track  of  whether 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  result  is  inexact ,  in  a  flag  ' inexact ' ;  this  information  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       needed  at  the  rounding  stage . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       With  the  choice  of  shift  above ,  together  with  our  assumption  that 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       a_bits  -  b_bits  > =  DBL_MIN_EXP  -  DBL_MANT_DIG  -  1 ,  it  follows 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       that  x  > =  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       3.  Now  x  *  2 * * shift  < =  a / b  <  ( x + 1 )  *  2 * * shift .   We  want  to  replace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       this  with  an  exactly  representable  float  of  the  form 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          round ( x / 2 * * extra_bits )  *  2 * * ( extra_bits + shift ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       For  float  representability ,  we  need  x / 2 * * extra_bits  < 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       2 * * DBL_MANT_DIG  and  extra_bits  +  shift  > =  DBL_MIN_EXP  - 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       DBL_MANT_DIG .   This  translates  to  the  condition : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          extra_bits  > =  MAX ( x_bits ,  DBL_MIN_EXP  -  shift )  -  DBL_MANT_DIG 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       To  round ,  we  just  modify  the  bottom  digit  of  x  in - place ;  this  can 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       end  up  giving  a  digit  with  value  >  PyLONG_MASK ,  but  that ' s  not  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       problem  since  digits  can  hold  values  up  to  2 * PyLONG_MASK + 1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       With  the  original  choices  for  shift  above ,  extra_bits  will  always 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       be  2  or  3.   Then  rounding  under  the  round - half - to - even  rule ,  we 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       round  up  iff  the  most  significant  of  the  extra  bits  is  1 ,  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       either :  ( a )  the  computation  of  x  in  step  2  had  an  inexact  result , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       or  ( b )  at  least  one  other  of  the  extra  bits  is  1 ,  or  ( c )  the  least 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       significant  bit  of  x  ( above  those  to  be  rounded )  is  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       4.  Conversion  to  a  double  is  straightforward ;  all  floating - point 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       operations  involved  in  the  conversion  are  exact ,  so  there ' s  no 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       danger  of  rounding  errors . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       5.  Use  ldexp ( x ,  shift )  to  compute  x * 2 * * shift ,  the  final  result . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       The  result  will  always  be  exactly  representable  as  a  double ,  except 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       in  the  case  that  it  overflows .   To  avoid  dependence  on  the  exact 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       behaviour  of  ldexp  on  overflow ,  we  check  for  overflow  before 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       applying  ldexp .   The  result  of  ldexp  is  adjusted  for  sign  before 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       returning . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Reduce to case where a and b are both positive. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a_size  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b_size  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    negate  =  ( _PyLong_IsNegative ( a ) )  ! =  ( _PyLong_IsNegative ( b ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( b_size  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ZeroDivisionError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " division by zero " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a_size  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  underflow_or_zero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Fast path for a and b small (exactly representable in a double).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Relies  on  floating - point  division  being  correctly  rounded ;  results 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       may  be  subject  to  double  rounding  on  x86  machines  that  operate  with 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  x87  FPU  set  to  64 - bit  precision .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a_is_small  =  a_size  < =  MANT_DIG_DIGITS  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( a_size  = =  MANT_DIG_DIGITS + 1  & & 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         a - > long_value . ob_digit [ MANT_DIG_DIGITS ]  > >  MANT_DIG_BITS  = =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    b_is_small  =  b_size  < =  MANT_DIG_DIGITS  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( b_size  = =  MANT_DIG_DIGITS + 1  & & 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         b - > long_value . ob_digit [ MANT_DIG_DIGITS ]  > >  MANT_DIG_BITS  = =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( a_is_small  & &  b_is_small )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        double  da ,  db ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        da  =  a - > long_value . ob_digit [ - - a_size ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( a_size  >  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            da  =  da  *  PyLong_BASE  +  a - > long_value . ob_digit [ - - a_size ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        db  =  b - > long_value . ob_digit [ - - b_size ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        while  ( b_size  >  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            db  =  db  *  PyLong_BASE  +  b - > long_value . ob_digit [ - - b_size ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        result  =  da  /  db ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  success ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Catch obvious cases of underflow and overflow */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    diff  =  a_size  -  b_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( diff  >  PY_SSIZE_T_MAX / PyLong_SHIFT  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Extreme overflow */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( diff  <  1  -  PY_SSIZE_T_MAX / PyLong_SHIFT ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Extreme underflow */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  underflow_or_zero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Next line is now safe from overflowing a Py_ssize_t */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    diff  =  diff  *  PyLong_SHIFT  +  bit_length_digit ( a - > long_value . ob_digit [ a_size  -  1 ] )  - 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bit_length_digit ( b - > long_value . ob_digit [ b_size  -  1 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Now diff = a_bits - b_bits. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( diff  >  DBL_MAX_EXP ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( diff  <  DBL_MIN_EXP  -  DBL_MANT_DIG  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  underflow_or_zero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Choose value for shift; see comments for step 1 above. */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-04 23:14:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    shift  =  Py_MAX ( diff ,  DBL_MIN_EXP )  -  DBL_MANT_DIG  -  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    inexact  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* x = abs(a * 2**-shift) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( shift  < =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  i ,  shift_digits  =  - shift  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* x = a << -shift */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( a_size  > =  PY_SSIZE_T_MAX  -  1  -  shift_digits )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* In practice, it's probably impossible to end up
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               here .   Both  a  and  b  would  have  to  be  enormous , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               using  close  to  SIZE_T_MAX  bytes  of  memory  each .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            " intermediate overflow during division " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  _PyLong_New ( a_size  +  shift_digits  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  shift_digits ;  i + + ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            x - > long_value . ob_digit [ i ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rem  =  v_lshift ( x - > long_value . ob_digit  +  shift_digits ,  a - > long_value . ob_digit , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                       a_size ,  - shift  %  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x - > long_value . ob_digit [ a_size  +  shift_digits ]  =  rem ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_ssize_t  shift_digits  =  shift  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* x = a >> shift */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( a_size  > =  shift_digits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  _PyLong_New ( a_size  -  shift_digits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        rem  =  v_rshift ( x - > long_value . ob_digit ,  a - > long_value . ob_digit  +  shift_digits , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                       a_size  -  shift_digits ,  shift  %  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* set inexact if any of the bits shifted out is nonzero */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( rem ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            inexact  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( ! inexact  & &  shift_digits  >  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( a - > long_value . ob_digit [ - - shift_digits ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                inexact  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_normalize ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x_size  =  _PyLong_SignedDigitCount ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* x //= b. If the remainder is nonzero, set inexact.  We own the only
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       reference  to  x ,  so  it ' s  safe  to  modify  it  in - place .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( b_size  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        digit  rem  =  inplace_divrem1 ( x - > long_value . ob_digit ,  x - > long_value . ob_digit ,  x_size , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              b - > long_value . ob_digit [ 0 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        long_normalize ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( rem ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            inexact  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyLongObject  * div ,  * rem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        div  =  x_divrem ( x ,  b ,  & rem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( x ,  div ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! _PyLong_IsZero ( rem ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            inexact  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( rem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x_size  =  _PyLong_DigitCount ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( x_size  >  0 ) ;  /* result of division is never zero */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x_bits  =  ( x_size - 1 ) * PyLong_SHIFT + bit_length_digit ( x - > long_value . ob_digit [ x_size - 1 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* The number of extra bits that have to be rounded away. */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-04 23:14:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    extra_bits  =  Py_MAX ( x_bits ,  DBL_MIN_EXP  -  shift )  -  DBL_MANT_DIG ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( extra_bits  = =  2  | |  extra_bits  = =  3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Round by directly modifying the low digit of x. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mask  =  ( digit ) 1  < <  ( extra_bits  -  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    low  =  x - > long_value . ob_digit [ 0 ]  |  inexact ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-21 10:23:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ( low  &  mask )  & &  ( low  &  ( 3U * mask - 1U ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        low  + =  mask ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x - > long_value . ob_digit [ 0 ]  =  low  &  ~ ( 2U * mask - 1U ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Convert x to a double dx; the conversion is exact. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    dx  =  x - > long_value . ob_digit [ - - x_size ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( x_size  >  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        dx  =  dx  *  PyLong_BASE  +  x - > long_value . ob_digit [ - - x_size ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Check whether ldexp result will overflow a double. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( shift  +  x_bits  > =  DBL_MAX_EXP  & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( shift  +  x_bits  >  DBL_MAX_EXP  | |  dx  = =  ldexp ( 1.0 ,  ( int ) x_bits ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  overflow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  ldexp ( dx ,  ( int ) shift ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  success : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyFloat_FromDouble ( negate  ?  - result  :  result ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  underflow_or_zero : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyFloat_FromDouble ( negate  ?  - 0.0  :  0.0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-09-04 06:17:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  overflow : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyErr_SetString ( PyExc_OverflowError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " integer division result too large for a float " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-12-27 15:09:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  error : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-09-04 05:31:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_mod ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( l_mod ( ( PyLongObject * ) a ,  ( PyLongObject * ) b ,  & mod )  <  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mod  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) mod ; 
							 
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_divmod ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1992-01-19 16:31:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * div ,  * mod ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( l_divmod ( ( PyLongObject * ) a ,  ( PyLongObject * ) b ,  & div ,  & mod )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  PyTuple_New ( 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-21 15:01:11 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyTuple_SET_ITEM ( z ,  0 ,  ( PyObject  * )  div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyTuple_SET_ITEM ( z ,  1 ,  ( PyObject  * )  mod ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( div ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( mod ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Compute an inverse to a modulo n, or raise ValueError if a is not
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   invertible  modulo  n .  Assumes  n  is  positive .  The  inverse  returned 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   is  whatever  falls  out  of  the  extended  Euclidean  algorithm :  it  may 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   be  either  positive  or  negative ,  but  will  be  smaller  than  n  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   absolute  value . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   Pure  Python  equivalent  for  long_invmod : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        def  invmod ( a ,  n ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            b ,  c  =  1 ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  n : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                q ,  r  =  divmod ( a ,  n ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                a ,  b ,  c ,  n  =  n ,  c ,  b  -  q * c ,  r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            #  at this point a is the gcd of the original inputs 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  a  = =  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  ValueError ( " Not invertible " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyLongObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_invmod ( PyLongObject  * a ,  PyLongObject  * n )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * b ,  * c ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Should only ever be called for positive n */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( _PyLong_IsPositive ( n ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b  =  ( PyLongObject  * ) PyLong_FromLong ( 1L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( b  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    c  =  ( PyLongObject  * ) PyLong_FromLong ( 0L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( c  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_INCREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_INCREF ( n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* references now owned: a, b, c, n */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( ! _PyLong_IsZero ( n ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyLongObject  * q ,  * r ,  * s ,  * t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( l_divmod ( a ,  n ,  & q ,  & r )  = =  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( a ,  n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        n  =  r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  ( PyLongObject  * ) long_mul ( q ,  c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( q ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( t  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        s  =  ( PyLongObject  * ) long_sub ( b ,  t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( t ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( s  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( b ,  c ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        c  =  s ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* references now owned: a, b, c, n */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( long_compare ( a ,  ( PyLongObject  * ) _PyLong_GetOne ( ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* a != 1; we don't have an inverse. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " base is not invertible for the given modulus " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* a == 1; b gives an inverse modulo n */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Error : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* pow(v, w, x) */  
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2001-01-04 01:46:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_pow ( PyObject  * v ,  PyObject  * w ,  PyObject  * x )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * a ,  * b ,  * c ;  /* a,b,c = v,w,x */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  negativeOutput  =  0 ;   /* if x<0 return negative output */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z  =  NULL ;   /* accumulated result */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ,  j ;              /* counters */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * temp  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * a2  =  NULL ;  /* may temporarily hold a**2 % c */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* k-ary values.  If the exponent is large enough, table is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  precomputed  so  that  table [ i ]  = =  a * * ( 2 * i + 1 )  %  c  for  i  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  range ( EXP_TABLE_LEN ) . 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-06 17:54:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Note :  this  is  uninitialized  stack  trash :  don ' t  pay  to  set  it  to  known 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  values  unless  it ' s  needed .  Instead  ensure  that  num_table_entries  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  set  to  the  number  of  entries  actually  filled  whenever  a  branch  to  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Error  or  Done  labels  is  possible . 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * table [ EXP_TABLE_LEN ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  num_table_entries  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* a, b, c = v, w, x */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( v ,  w ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a  =  ( PyLongObject * ) Py_NewRef ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b  =  ( PyLongObject * ) Py_NewRef ( w ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_Check ( x ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        c  =  ( PyLongObject  * ) Py_NewRef ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  if  ( x  = =  Py_None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-10 20:28:54 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_RETURN_NOTIMPLEMENTED ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( b )  & &  c  = =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* if exponent is negative and there's no modulus:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               return  a  float .   This  works  because  we  know 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               that  this  calls  float_pow ( )  which  converts  its 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               arguments  to  double .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyFloat_Type . tp_as_number - > nb_power ( v ,  w ,  x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( c )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* if modulus == 0:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               raise  ValueError ( )  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsZero ( c ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            " pow() 3rd argument cannot be 0 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* if modulus < 0:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               negativeOutput  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               modulus  =  - modulus  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( c ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            negativeOutput  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            temp  =  ( PyLongObject  * ) _PyLong_Copy ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( temp  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_SETREF ( c ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            _PyLong_Negate ( & c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( c  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* if modulus == 1:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               return  0  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNonNegativeCompact ( c )  & &  ( c - > long_value . ob_digit [ 0 ]  = =  1 ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z  =  ( PyLongObject  * ) PyLong_FromLong ( 0L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Done ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* if exponent is negative, negate the exponent and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           replace  the  base  with  a  modular  inverse  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  ( PyLongObject  * ) _PyLong_Copy ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( temp  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_SETREF ( b ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_Negate ( & b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( b  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            temp  =  long_invmod ( a ,  c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( temp  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_SETREF ( a ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-13 08:19:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 10:24:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 16:53:52 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Reduce base by modulus in some cases:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           1.  If  base  <  0.   Forcing  the  base  non - negative  makes  things  easier . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           2.  If  base  is  obviously  larger  than  the  modulus .   The  " small 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              exponent "  case later can multiply directly by base repeatedly, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              while  the  " large exponent "  case  multiplies  directly  by  base  31 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              times .   It  can  be  unboundedly  faster  to  multiply  by 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              base  %  modulus  instead . 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           We  could  _always_  do  this  reduction ,  but  l_mod ( )  isn ' t  cheap , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-05 16:53:52 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           so  we  only  do  it  when  it  buys  something .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( _PyLong_IsNegative ( a )  | |  _PyLong_DigitCount ( a )  >  _PyLong_DigitCount ( c ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( l_mod ( a ,  c ,  & temp )  <  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_SETREF ( a ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* At this point a, b, and c are guaranteed non-negative UNLESS
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       c  is  NULL ,  in  which  case  a  may  be  negative .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  ( PyLongObject  * ) PyLong_FromLong ( 1L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  Error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Perform a modular reduction, X = X % c, but leave X alone if c
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  is  NULL . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define REDUCE(X)                                       \ 
  
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    do  {                                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( c  ! =  NULL )  {                                 \
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( l_mod ( X ,  c ,  & temp )  <  0 )                  \
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                goto  Error ;                              \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_XDECREF ( X ) ;                               \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            X  =  temp ;                                    \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            temp  =  NULL ;                                 \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }                                                \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while ( 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Multiply two values, then reduce the result:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       result  =  X * Y  %  c .   If  c  is  NULL ,  skip  the  mod .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define MULT(X, Y, result)                      \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    do  {                                         \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        temp  =  ( PyLongObject  * ) long_mul ( X ,  Y ) ;   \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( temp  = =  NULL )                        \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ;                          \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_XDECREF ( result ) ;                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        result  =  temp ;                           \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        temp  =  NULL ;                             \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REDUCE ( result ) ;                          \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  while ( 0 ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i  =  _PyLong_SignedDigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  bi  =  i  ?  b - > long_value . ob_digit [ i - 1 ]  :  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  bit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( i  < =  1  & &  bi  < =  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* aim for minimal overhead */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( bi  > =  2 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MULT ( a ,  a ,  z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( bi  = =  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                MULT ( z ,  a ,  z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  if  ( bi  = =  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* Multiplying by 1 serves two purposes: if `a` is of an int
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *  subclass ,  makes  the  result  an  int  ( e . g . ,  pow ( False ,  1 )  returns 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             *  0  instead  of  False ) ,  and  potentially  reduces  ` a `  by  the  modulus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MULT ( a ,  z ,  z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* else bi is 0, and z==1 is correct */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( i  < =  HUGE_EXP_CUTOFF  /  PyLong_SHIFT  )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf    */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Find the first significant exponent bit. Search right to left
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  because  we ' re  primarily  trying  to  cut  overhead  for  small  powers . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( bi ) ;   /* else there is no significant bit */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-26 00:30:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( z ,  ( PyLongObject * ) Py_NewRef ( a ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( bit  =  2 ;  ;  bit  < < =  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( bit  >  bi )  {  /* found the first bit */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( ( bi  &  bit )  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                bit  > > =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                assert ( bi  &  bit ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( - - i ,  bit  > > =  1 ; ; )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  ( ;  bit  ! =  0 ;  bit  > > =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                MULT ( z ,  z ,  z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( bi  &  bit )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    MULT ( z ,  a ,  z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( - - i  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            bi  =  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-12 11:29:56 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            bit  =  ( digit ) 1  < <  ( PyLong_SHIFT - 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* Left-to-right k-ary sliding window exponentiation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  ( Handbook  of  Applied  Cryptography  ( HAC )  Algorithm  14.85 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        table [ 0 ]  =  ( PyLongObject * ) Py_NewRef ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        num_table_entries  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        MULT ( a ,  a ,  a2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* table[i] == a**(2*i + 1) % c */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( i  =  1 ;  i  <  EXP_TABLE_LEN ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            table [ i ]  =  NULL ;  /* must set to known value for MULT */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            MULT ( table [ i - 1 ] ,  a2 ,  table [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            + + num_table_entries ;  /* incremented iff MULT succeeded */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_CLEAR ( a2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Repeatedly extract the next (no more than) EXP_WINDOW_SIZE bits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  into  ` pending ` ,  starting  with  the  next  1  bit .   The  current  bit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         *  length  of  ` pending `  is  ` blen ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        int  pending  =  0 ,  blen  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define ABSORB_PENDING  do { \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            int  ntz  =  0 ;  /* number of trailing zeroes in `pending` */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( pending  & &  blen ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( pending  > >  ( blen  -  1 ) ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( pending  > >  blen  = =  0 ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( ( pending  &  1 )  = =  0 )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                + + ntz ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pending  > > =  1 ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( ntz  <  blen ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            blen  - =  ntz ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            do  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                MULT ( z ,  z ,  z ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  while  ( - - blen ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MULT ( z ,  table [ pending  > >  1 ] ,  z ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            while  ( ntz - -  >  0 )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                MULT ( z ,  z ,  z ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            assert ( blen  = =  0 ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pending  =  0 ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  while ( 0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( i  =  _PyLong_SignedDigitCount ( b )  -  1 ;  i  > =  0 ;  - - i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  digit  bi  =  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            for  ( j  =  PyLong_SHIFT  -  1 ;  j  > =  0 ;  - - j )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                const  int  bit  =  ( bi  > >  j )  &  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pending  =  ( pending  < <  1 )  |  bit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( pending )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    + + blen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( blen  = =  EXP_WINDOW_SIZE ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        ABSORB_PENDING ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                else  /* absorb strings of 0 bits */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:37:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    MULT ( z ,  z ,  z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( pending ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ABSORB_PENDING ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( negativeOutput  & &  ! _PyLong_IsZero ( z ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        temp  =  ( PyLongObject  * ) long_sub ( z ,  c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( temp  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  Error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( z ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        temp  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    goto  Done ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												SF patch 936813: fast modular exponentiation
This checkin is adapted from part 2 (of 3) of Trevor Perrin's patch set.
BACKWARD INCOMPATIBILITY:  SHIFT must now be divisible by 5.  AFAIK,
nobody will care.  long_pow() could be complicated to worm around that,
if necessary.
long_pow():
  - BUGFIX:  This leaked the base and power when the power was negative
    (and so the computation delegated to float pow).
  - Instead of doing right-to-left exponentiation, do left-to-right.  This
    is more efficient for small bases, which is the common case.
  - In addition, if the exponent is large (more than FIVEARY_CUTOFF
    digits), precompute [a**i % c for i in range(32)], and go left to
    right 5 bits at a time.
l_divmod():
  - The signature changed so that callers who don't want the quotient,
    or don't want the remainder, can pass NULL in the slot they don't
    want.  This saves them from having to declare a vrbl for unwanted
    stuff, and remembering to decref it.
long_mod(), long_div(), long_classic_div():
  - Adjust to new l_divmod() signature, and simplified as a result.
											 
										 
										
											2004-08-30 02:44:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Error : 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_CLEAR ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* fall through */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Done : 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-12 12:55:02 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  num_table_entries ;  + + i ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( table [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( c ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 13:18:20 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_XDECREF ( a2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_XDECREF ( temp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_invert ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Implement ~x as -(x+1) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * x ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( ~ medium_value ( v ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  ( PyLongObject  * )  long_add ( v ,  ( PyLongObject  * ) _PyLong_GetOne ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 16:40:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyLong_Negate ( & x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* No need for maybe_small_long here, since any small longs
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       will  have  been  caught  in  the  _PyLong_IsCompact ( )  fast  path .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 16:40:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) x ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_neg ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( v ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( - medium_value ( v ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z  =  ( PyLongObject  * ) _PyLong_Copy ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  ! =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_abs ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( v ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_neg ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_long ( ( PyObject  * ) v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2006-11-28 19:15:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_bool ( PyLongObject  * v )  
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ! _PyLong_IsZero ( v ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								divmod_shift ( PyObject  * shiftby ,  Py_ssize_t  * wordshift ,  digit  * remshift )  
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( shiftby ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( ! _PyLong_IsNegative ( ( PyLongObject  * ) shiftby ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  lshiftby  =  PyLong_AsSsize_t ( ( PyObject  * ) shiftby ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( lshiftby  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * wordshift  =  lshiftby  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        * remshift  =  lshiftby  %  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* PyLong_Check(shiftby) is true and shiftby is not negative, so it must
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       be  that  PyLong_AsSsize_t  raised  an  OverflowError .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyErr_ExceptionMatches ( PyExc_OverflowError ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyErr_Clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * wordshift_obj  =  divrem1 ( ( PyLongObject  * ) shiftby ,  PyLong_SHIFT ,  remshift ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( wordshift_obj  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * wordshift  =  PyLong_AsSsize_t ( ( PyObject  * ) wordshift_obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( wordshift_obj ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( * wordshift  > =  0  & &  * wordshift  <  PY_SSIZE_T_MAX  /  ( Py_ssize_t ) sizeof ( digit ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyErr_Clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Clip the value.  With such large wordshift the right shift
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       returns  0  and  the  left  shift  raises  an  error  in  _PyLong_New ( ) .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * wordshift  =  PY_SSIZE_T_MAX  /  sizeof ( digit ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * remshift  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Inner function for both long_rshift and _PyLong_Rshift, shifting an
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   integer  right  by  PyLong_SHIFT * wordshift  +  remshift  bits . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   wordshift  should  be  nonnegative .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_rshift1 ( PyLongObject  * a ,  Py_ssize_t  wordshift ,  digit  remshift )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * z  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  newsize ,  hishift ,  size_a ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-27 18:04:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    twodigits  accum ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  a_negative ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Total number of bits shifted must be nonnegative. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( wordshift  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( remshift  <  PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Fast path for small a. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-28 02:36:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        stwodigits  m ,  x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  shift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        m  =  medium_value ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shift  =  wordshift  = =  0  ?  remshift  :  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  m  <  0  ?  ~ ( ~ m  > >  shift )  :  m  > >  shift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    a_negative  =  _PyLong_IsNegative ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a_negative )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* For negative 'a', adjust so that 0 < remshift <= PyLong_SHIFT,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           while  keeping  PyLong_SHIFT * wordshift  +  remshift  the  same .  This 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           ensures  that  ' newsize '  is  computed  correctly  below .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( remshift  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( wordshift  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                /* Can only happen if the original shift was 0. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  long_long ( ( PyObject  * ) a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            remshift  =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            - - wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( wordshift  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    newsize  =  size_a  -  wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( newsize  < =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Shifting all the bits of 'a' out gives either -1 or 0. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( - a_negative ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( newsize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hishift  =  PyLong_SHIFT  -  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    accum  =  a - > long_value . ob_digit [ wordshift ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( a_negative )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            For  a  positive  integer  a  and  nonnegative  shift ,  we  have : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( - a )  > >  shift  = =  - ( ( a  +  2 * * shift  -  1 )  > >  shift ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            In  the  addition  ` a  +  ( 2 * * shift  -  1 ) ` ,  the  low  ` wordshift `  digits  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ` 2 * * shift  -  1 `  all  have  value  ` PyLong_MASK ` ,  so  we  get  a  carry  out 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            from  the  bottom  ` wordshift `  digits  when  at  least  one  of  the  least 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            significant  ` wordshift `  digits  of  ` a `  is  nonzero .  Digit  ` wordshift ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            of  ` 2 * * shift  -  1 `  has  value  ` PyLong_MASK  > >  hishift ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_SetSignAndDigitCount ( z ,  - 1 ,  newsize ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        digit  sticky  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( Py_ssize_t  j  =  0 ;  j  <  wordshift ;  j + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            sticky  | =  a - > long_value . ob_digit [ j ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        accum  + =  ( PyLong_MASK  > >  hishift )  +  ( digit ) ( sticky  ! =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    accum  > > =  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( Py_ssize_t  i  =  0 ,  j  =  wordshift  +  1 ;  j  <  size_a ;  i + + ,  j + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        accum  + =  ( twodigits ) a - > long_value . ob_digit [ j ]  < <  hishift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  ( digit ) ( accum  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        accum  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( accum  < =  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    z - > long_value . ob_digit [ newsize  -  1 ]  =  ( digit ) accum ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-02 18:19:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  maybe_small_long ( long_normalize ( z ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-17 17:50:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ( PyObject  * ) z ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_rshift ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  wordshift ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  remshift ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( ( PyLongObject  * ) b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " negative shift count " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsZero ( ( PyLongObject  * ) a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-29 19:27:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:47:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( divmod_shift ( b ,  & wordshift ,  & remshift )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  long_rshift1 ( ( PyLongObject  * ) a ,  wordshift ,  remshift ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Return a >> shiftby. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Rshift ( PyObject  * a ,  size_t  shiftby )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( a ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsZero ( ( PyLongObject  * ) a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    wordshift  =  shiftby  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    remshift  =  shiftby  %  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_rshift1 ( ( PyLongObject  * ) a ,  wordshift ,  remshift ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_lshift1 ( PyLongObject  * a ,  Py_ssize_t  wordshift ,  digit  remshift )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  oldsize ,  newsize ,  i ,  j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twodigits  accum ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( wordshift  = =  0  & &  _PyLong_IsCompact ( a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-28 02:36:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        stwodigits  m  =  medium_value ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // bypass undefined shift operator behavior
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        stwodigits  x  =  m  <  0  ?  - ( - m  < <  remshift )  :  m  < <  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    oldsize  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    newsize  =  oldsize  +  wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( remshift ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        + + newsize ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( newsize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( Py_REFCNT ( z )  = =  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-17 22:31:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  wordshift ;  i + + ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    accum  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-26 00:57:33 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( j  =  0 ;  j  <  oldsize ;  i + + ,  j + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        accum  | =  ( twodigits ) a - > long_value . ob_digit [ j ]  < <  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ i ]  =  ( digit ) ( accum  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        accum  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( remshift ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ newsize - 1 ]  =  ( digit ) accum ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( ! accum ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  long_normalize ( z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * )  maybe_small_long ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_lshift ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsNegative ( ( PyLongObject  * ) b ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError ,  " negative shift count " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsZero ( ( PyLongObject  * ) a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( divmod_shift ( b ,  & wordshift ,  & remshift )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_lshift1 ( ( PyLongObject  * ) a ,  wordshift ,  remshift ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Return a << shiftby. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_Lshift ( PyObject  * a ,  size_t  shiftby )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  wordshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  remshift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( a ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsZero ( ( PyLongObject  * ) a ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    wordshift  =  shiftby  /  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    remshift  =  shiftby  %  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_lshift1 ( ( PyLongObject  * ) a ,  wordshift ,  remshift ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-25 20:43:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Compute two's complement of digit vector a[0:m], writing result to
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   z [ 0 : m ] .   The  digit  vector  a  need  not  be  normalized ,  but  should  not 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   be  entirely  zero .   a  and  z  may  point  to  the  same  digit  vector .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  void  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								v_complement ( digit  * z ,  digit  * a ,  Py_ssize_t  m )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  carry  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  m ;  + + i )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  + =  a [ i ]  ^  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z [ i ]  =  carry  &  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( carry  = =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-25 20:43:34 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											1992-01-14 18:36:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Bitwise and/xor/or operations */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_bitwise ( PyLongObject  * a ,  
						 
					
						
							
								
									
										
										
										
											2012-12-26 16:43:33 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             char  op ,   /* '&', '|', '^' */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             PyLongObject  * b ) 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  nega ,  negb ,  negz ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  size_a ,  size_b ,  size_z ,  i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Bitwise operations for negative numbers operate as though
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       on  a  two ' s  complement  representation .   So  convert  arguments 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       from  sign - magnitude  to  two ' s  complement ,  and  convert  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       result  back  to  sign - magnitude  at  the  end .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* If a is negative, replace it by its two's complement. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    nega  =  _PyLong_IsNegative ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( nega )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z  =  _PyLong_New ( size_a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( z  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v_complement ( z - > long_value . ob_digit ,  a - > long_value . ob_digit ,  size_a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        a  =  z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* Keep reference count consistent. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_INCREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Same for b. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    negb  =  _PyLong_IsNegative ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( negb )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z  =  _PyLong_New ( size_b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        v_complement ( z - > long_value . ob_digit ,  b - > long_value . ob_digit ,  size_b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        b  =  z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_INCREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Swap a and b if necessary to ensure size_a >= size_b. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( size_a  <  size_b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        z  =  a ;  a  =  b ;  b  =  z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_z  =  size_a ;  size_a  =  size_b ;  size_b  =  size_z ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        negz  =  nega ;  nega  =  negb ;  negb  =  negz ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* JRH: The original logic here was to allocate the result value (z)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       as  the  longer  of  the  two  operands .   However ,  there  are  some  cases 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       where  the  result  is  guaranteed  to  be  shorter  than  that :  AND  of  two 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       positives ,  OR  of  two  negatives :  use  the  shorter  number .   AND  with 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       mixed  signs :  use  the  positive  number .   OR  with  mixed  signs :  use  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       negative  number . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    switch  ( op )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' ^ ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        negz  =  nega  ^  negb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_z  =  size_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' & ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        negz  =  nega  &  negb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_z  =  negb  ?  size_a  :  size_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' | ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        negz  =  nega  |  negb ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        size_z  =  negb  ?  size_b  :  size_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    default : 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 18:59:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_UNREACHABLE ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* We allow an extra digit if z is negative, to make sure that
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       the  final  two ' s  complement  of  z  doesn ' t  overflow .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    z  =  _PyLong_New ( size_z  +  negz ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( z  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Compute digits for overlap of a and b. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    switch ( op )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' & ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_b ;  + + i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z - > long_value . ob_digit [ i ]  =  a - > long_value . ob_digit [ i ]  &  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' | ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_b ;  + + i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z - > long_value . ob_digit [ i ]  =  a - > long_value . ob_digit [ i ]  |  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  ' ^ ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( i  =  0 ;  i  <  size_b ;  + + i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z - > long_value . ob_digit [ i ]  =  a - > long_value . ob_digit [ i ]  ^  b - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    default : 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 18:59:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_UNREACHABLE ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Copy any remaining digits of a, inverting if necessary. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( op  = =  ' ^ '  & &  negb ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( ;  i  <  size_z ;  + + i ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            z - > long_value . ob_digit [ i ]  =  a - > long_value . ob_digit [ i ]  ^  PyLong_MASK ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( i  <  size_z ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        memcpy ( & z - > long_value . ob_digit [ i ] ,  & a - > long_value . ob_digit [ i ] , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               ( size_z - i ) * sizeof ( digit ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Complement result if negative. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( negz )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _PyLong_FlipSign ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        z - > long_value . ob_digit [ size_z ]  =  PyLong_MASK ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v_complement ( z - > long_value . ob_digit ,  z - > long_value . ob_digit ,  size_z + 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) maybe_small_long ( long_normalize ( z ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_and ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * x  =  ( PyLongObject * ) a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * y  =  ( PyLongObject * ) b ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( x )  & &  _PyLong_IsCompact ( y ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( medium_value ( x )  &  medium_value ( y ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_bitwise ( x ,  ' & ' ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_xor ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * x  =  ( PyLongObject * ) a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * y  =  ( PyLongObject * ) b ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( x )  & &  _PyLong_IsCompact ( y ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( medium_value ( x )  ^  medium_value ( y ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_bitwise ( x ,  ' ^ ' ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2007-09-10 07:59:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_or ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											1991-11-19 20:26:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CHECK_BINOP ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * x  =  ( PyLongObject * ) a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * y  =  ( PyLongObject * ) b ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_IsCompact ( x )  & &  _PyLong_IsCompact ( y ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 14:28:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromSTwoDigits ( medium_value ( x )  |  medium_value ( y ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_bitwise ( x ,  ' | ' ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-14 12:06:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_long ( PyObject  * v )  
						 
					
						
							
								
									
										
										
										
											1992-09-12 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyLong_CheckExact ( v ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Py_NewRef ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyLong_Copy ( ( PyLongObject  * ) v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											1992-09-12 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_GCD ( PyObject  * aarg ,  PyObject  * barg )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * a ,  * b ,  * c  =  NULL ,  * d  =  NULL ,  * r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    stwodigits  x ,  y ,  q ,  s ,  t ,  c_carry ,  d_carry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    stwodigits  A ,  B ,  C ,  D ,  T ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  nbits ,  k ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    digit  * a_digit ,  * b_digit ,  * c_digit ,  * d_digit ,  * a_end ,  * b_end ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  ( PyLongObject  * ) aarg ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b  =  ( PyLongObject  * ) barg ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_DigitCount ( a )  < =  2  & &  _PyLong_DigitCount ( b )  < =  2 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_INCREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_INCREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  simple ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Initial reduction: make sure that 0 <= b <= a. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  ( PyLongObject  * ) long_abs ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( a  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    b  =  ( PyLongObject  * ) long_abs ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( b  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( long_compare ( a ,  b )  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        r  =  a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  =  b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* We now own references to a and b */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  size_a ,  size_b ,  alloc_a ,  alloc_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    alloc_a  =  _PyLong_DigitCount ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    alloc_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* reduce until a fits into 2 digits */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  ( ( size_a  =  _PyLong_DigitCount ( a ) )  >  2 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        nbits  =  bit_length_digit ( a - > long_value . ob_digit [ size_a - 1 ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* extract top 2*PyLong_SHIFT bits of a into x, along with
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           corresponding  bits  of  b  into  y  */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        size_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        assert ( size_b  < =  size_a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( size_b  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( size_a  <  alloc_a )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r  =  ( PyLongObject  * ) _PyLong_Copy ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r  =  a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_XDECREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Py_XDECREF ( d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  ( PyObject  * ) r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        x  =  ( ( ( twodigits ) a - > long_value . ob_digit [ size_a - 1 ]  < <  ( 2 * PyLong_SHIFT - nbits ) )  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ( ( twodigits ) a - > long_value . ob_digit [ size_a - 2 ]  < <  ( PyLong_SHIFT - nbits ) )  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ( a - > long_value . ob_digit [ size_a - 3 ]  > >  nbits ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        y  =  ( ( size_b  > =  size_a  -  2  ?  b - > long_value . ob_digit [ size_a - 3 ]  > >  nbits  :  0 )  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ( size_b  > =  size_a  -  1  ?  ( twodigits ) b - > long_value . ob_digit [ size_a - 2 ]  < <  ( PyLong_SHIFT - nbits )  :  0 )  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ( size_b  > =  size_a  ?  ( twodigits ) b - > long_value . ob_digit [ size_a - 1 ]  < <  ( 2 * PyLong_SHIFT - nbits )  :  0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* inner loop of Lehmer's algorithm; A, B, C, D never grow
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           larger  than  PyLong_MASK  during  the  algorithm .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        A  =  1 ;  B  =  0 ;  C  =  0 ;  D  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( k = 0 ; ;  k + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( y - C  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            q  =  ( x + ( A - 1 ) ) / ( y - C ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            s  =  B + q * D ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  =  x - q * y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( s  >  t ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            x  =  y ;  y  =  t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t  =  A + q * C ;  A  =  D ;  B  =  C ;  C  =  s ;  D  =  t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( k  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            /* no progress; do a Euclidean step */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-28 08:46:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( l_mod ( a ,  b ,  & r )  <  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                goto  error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Py_SETREF ( a ,  b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            b  =  r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            alloc_a  =  alloc_b ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            alloc_b  =  _PyLong_DigitCount ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          a ,  b  =  A * b - B * a ,  D * a - C * b  if  k  is  odd 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          a ,  b  =  A * a - B * b ,  D * b - C * a  if  k  is  even 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( k & 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            T  =  - A ;  A  =  - B ;  B  =  T ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            T  =  - C ;  C  =  - D ;  D  =  T ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( c  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            assert ( size_a  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_SetSignAndDigitCount ( c ,  1 ,  size_a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  if  ( Py_REFCNT ( a )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            c  =  ( PyLongObject * ) Py_NewRef ( a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            alloc_a  =  size_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c  =  _PyLong_New ( size_a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( c  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( d  ! =  NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            assert ( size_a  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_SetSignAndDigitCount ( d ,  1 ,  size_a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else  if  ( Py_REFCNT ( b )  = =  1  & &  size_a  < =  alloc_b )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-10 23:40:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            d  =  ( PyLongObject * ) Py_NewRef ( b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            assert ( size_a  > =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            _PyLong_SetSignAndDigitCount ( d ,  1 ,  size_a ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            alloc_b  =  size_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            d  =  _PyLong_New ( size_a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( d  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        a_end  =  a - > long_value . ob_digit  +  size_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b_end  =  b - > long_value . ob_digit  +  size_b ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* compute new a and new b in parallel */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        a_digit  =  a - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b_digit  =  b - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        c_digit  =  c - > long_value . ob_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        d_digit  =  d - > long_value . ob_digit ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        c_carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        d_carry  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( b_digit  <  b_end )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c_carry  + =  ( A  *  * a_digit )  -  ( B  *  * b_digit ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            d_carry  + =  ( D  *  * b_digit + + )  -  ( C  *  * a_digit + + ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * c_digit + +  =  ( digit ) ( c_carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * d_digit + +  =  ( digit ) ( d_carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c_carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            d_carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        while  ( a_digit  <  a_end )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c_carry  + =  A  *  * a_digit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            d_carry  - =  C  *  * a_digit + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * c_digit + +  =  ( digit ) ( c_carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            * d_digit + +  =  ( digit ) ( d_carry  &  PyLong_MASK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            c_carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            d_carry  > > =  PyLong_SHIFT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( c_carry  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert ( d_carry  = =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_INCREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_INCREF ( d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  =  long_normalize ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  long_normalize ( d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								simple :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( Py_REFCNT ( a )  >  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( Py_REFCNT ( b )  >  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-19 13:39:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   undefined  behaviour  when  LONG_MAX  type  is  smaller  than  60  bits  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT 
  
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* a fits into a long, so b must too */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  PyLong_AsLong ( ( PyObject  * ) a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    y  =  PyLong_AsLong ( ( PyObject  * ) b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-05 19:55:28 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT 
  
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    x  =  PyLong_AsLongLong ( ( PyObject  * ) a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    y  =  PyLong_AsLongLong ( ( PyObject  * ) b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#  error "_PyLong_GCD" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  Py_ABS ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    y  =  Py_ABS ( y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* usual Euclidean algorithm for longs */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  ( y  ! =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  =  y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        y  =  x  %  y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        x  =  t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-19 13:39:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT 
  
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromLong ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-05 19:55:28 +05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT 
  
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:19:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromLongLong ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#  error "_PyLong_GCD" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								error :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( d ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2000-07-07 15:53:28 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_float ( PyObject  * v )  
						 
					
						
							
								
									
										
										
										
											1992-09-12 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    double  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  PyLong_AsDouble ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  - 1.0  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  PyFloat_FromDouble ( result ) ; 
							 
						 
					
						
							
								
									
										
										
										
											1992-09-12 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-07-17 16:30:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-03-19 08:51:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_subtype_new ( PyTypeObject  * type ,  PyObject  * x ,  PyObject  * obase ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ classmethod  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . __new__  as  long_new  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x :  object ( c_default = " NULL " )  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    base  as  obase :  object ( c_default = " NULL " )  =  10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
									
										
										
										
											1992-09-12 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2001-08-02 04:15:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-03-19 08:51:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_new_impl ( PyTypeObject  * type ,  PyObject  * x ,  PyObject  * obase )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=e47cfe777ab0f24c input=81c98f418af9eb6f]*/  
						 
					
						
							
								
									
										
										
										
											2001-08-02 04:15:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2012-12-25 22:38:32 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  base ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( type  ! =  & PyLong_Type ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 08:51:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_subtype_new ( type ,  x ,  obase ) ;  /* Wimp out */ 
							 
						 
					
						
							
								
									
										
										
										
											2012-12-28 09:42:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( x  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( obase  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            PyErr_SetString ( PyExc_TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            " int() missing string argument " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0L ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-12-28 09:42:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* default base and limit, forward to standard implementation */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 20:07:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( obase  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyNumber_Long ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 20:07:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-12-25 22:38:32 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    base  =  PyNumber_AsSsize_t ( obase ,  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 20:07:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( base  = =  - 1  & &  PyErr_Occurred ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-12-25 22:38:32 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ( base  ! =  0  & &  base  <  2 )  | |  base  >  36 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 20:07:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-14 03:19:26 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " int() base must be >= 2 and <= 36, or 0 " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 20:07:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( PyUnicode_Check ( x ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-09-28 07:41:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  PyLong_FromUnicodeObject ( x ,  ( int ) base ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( PyByteArray_Check ( x )  | |  PyBytes_Check ( x ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-12 14:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  char  * string ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( PyByteArray_Check ( x ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            string  =  PyByteArray_AS_STRING ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            string  =  PyBytes_AS_STRING ( x ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-03 20:55:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyLong_FromBytes ( string ,  Py_SIZE ( x ) ,  ( int ) base ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        " int() can't convert non-string with explicit base " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2001-08-02 04:15:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Wimpy, slow approach to tp_new calls for subtypes of int:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   first  create  a  regular  int  from  whatever  arguments  we  got , 
							 
						 
					
						
							
								
									
										
										
										
											2001-08-29 15:47:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   then  allocate  a  subtype  instance  and  initialize  it  from 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-27 19:40:23 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   the  regular  int .   The  regular  int  is  then  thrown  away . 
							 
						 
					
						
							
								
									
										
										
										
											2001-08-29 15:47:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-03-19 08:51:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_subtype_new ( PyTypeObject  * type ,  PyObject  * x ,  PyObject  * obase )  
						 
					
						
							
								
									
										
										
										
											2001-08-29 15:47:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * tmp ,  * newobj ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  i ,  n ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyType_IsSubtype ( type ,  & PyLong_Type ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 08:51:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    tmp  =  ( PyLongObject  * ) long_new_impl ( & PyLong_Type ,  x ,  obase ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( tmp  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-25 15:47:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( tmp ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    n  =  _PyLong_DigitCount ( tmp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-21 10:23:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Fast operations for single digit integers (including zero)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  assume  that  there  is  always  at  least  one  digit  present .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( n  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        n  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    newobj  =  ( PyLongObject  * ) type - > tp_alloc ( type ,  n ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( newobj  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( tmp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( newobj ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    newobj - > long_value . lv_tag  =  tmp - > long_value . lv_tag ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( i  =  0 ;  i  <  n ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        newobj - > long_value . ob_digit [ i ]  =  tmp - > long_value . ob_digit [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-07 23:18:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( tmp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) newobj ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-08-29 15:47:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . __getnewargs__  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 17:58:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int___getnewargs___impl ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=839a49de3f00b61b input=5904770ab1fb8c75]*/  
						 
					
						
							
								
									
										
										
										
											2003-01-29 17:58:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  Py_BuildValue ( " (N) " , _PyLong_Copy((PyLongObject *)self)) ; 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 17:58:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_get0 ( PyObject  * Py_UNUSED ( self ) ,  void  * Py_UNUSED ( context ) )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromLong ( 0L ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								long_get1 ( PyObject  * Py_UNUSED ( self ) ,  void  * Py_UNUSED ( ignored ) )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  PyLong_FromLong ( 1L ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . __format__  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    format_spec :  unicode 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-04 00:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Convert  to  a  string  according  to  format_spec .  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-08-25 02:26:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int___format___impl ( PyObject  * self ,  PyObject  * format_spec )  
						 
					
						
							
								
									
										
										
										
											2022-10-04 00:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic end generated code: output=b4929dee9ae18689 input=d5e1254a47e8d1dc]*/  
						 
					
						
							
								
									
										
										
										
											2007-08-25 02:26:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyUnicodeWriter  writer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  ret ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-30 18:10:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-17 23:02:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyUnicodeWriter_Init ( & writer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-29 12:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ret  =  _PyLong_FormatAdvancedWriter ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        & writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        format_spec ,  0 ,  PyUnicode_GET_LENGTH ( format_spec ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ret  = =  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        _PyUnicodeWriter_Dealloc ( & writer ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyUnicodeWriter_Finish ( & writer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-25 02:26:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Return a pair (q, r) such that a = b * q + r, and
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   abs ( r )  < =  abs ( b ) / 2 ,  with  equality  possible  only  if  q  is  even . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   In  other  words ,  q  = =  a  /  b ,  rounded  to  the  nearest  integer  using 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   round - half - to - even .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
									
										
										
										
											2010-06-07 18:47:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_PyLong_DivmodNear ( PyObject  * a ,  PyObject  * b )  
						 
					
						
							
								
									
										
										
										
											2007-08-23 22:07:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * quo  =  NULL ,  * rem  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-30 09:09:41 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * twice_rem ,  * result ,  * temp ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-18 23:10:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  quo_is_odd ,  quo_is_neg ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  cmp ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Equivalent Python code:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       def  divmod_near ( a ,  b ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           q ,  r  =  divmod ( a ,  b ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           #  round up if either r  /  b > 0.5, or r  /  b == 0.5 and q is odd. 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           #  The expression r  /  b > 0.5 is equivalent to 2 * r > b if b is 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           #  positive, 2 * r < b if b negative. 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           greater_than_half  =  2 * r  >  b  if  b  >  0  else  2 * r  <  b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           exactly_half  =  2 * r  = =  b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           if  greater_than_half  or  exactly_half  and  q  %  2  = =  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               q  + =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               r  - =  b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           return  q ,  r 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! PyLong_Check ( a )  | |  ! PyLong_Check ( b ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " non-integer arguments in division " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Do a and b have different signs?  If so, quotient is negative. */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    quo_is_neg  =  ( _PyLong_IsNegative ( ( PyLongObject  * ) a ) )  ! =  ( _PyLong_IsNegative ( ( PyLongObject  * ) b ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( long_divrem ( ( PyLongObject * ) a ,  ( PyLongObject * ) b ,  & quo ,  & rem )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* compare twice the remainder with the divisor, to see
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       if  we  need  to  adjust  the  quotient  and  remainder  */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * one  =  _PyLong_GetOne ( ) ;   // borrowed reference
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    twice_rem  =  long_lshift ( ( PyObject  * ) rem ,  one ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( twice_rem  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( quo_is_neg )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        temp  =  long_neg ( ( PyLongObject * ) twice_rem ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( twice_rem ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( twice_rem  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cmp  =  long_compare ( ( PyLongObject  * ) twice_rem ,  ( PyLongObject  * ) b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( twice_rem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    quo_is_odd  =  ( quo - > long_value . ob_digit [ 0 ]  &  1 )  ! =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ( _PyLong_IsNegative ( ( PyLongObject  * ) b )  ?  cmp  <  0  :  cmp  >  0 )  | |  ( cmp  = =  0  & &  quo_is_odd ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /* fix up quotient */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( quo_is_neg ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  long_sub ( quo ,  ( PyLongObject  * ) one ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            temp  =  long_add ( quo ,  ( PyLongObject  * ) one ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( quo ,  ( PyLongObject  * ) temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( quo  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /* and remainder */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( quo_is_neg ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            temp  =  long_add ( rem ,  ( PyLongObject  * ) b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            temp  =  long_sub ( rem ,  ( PyLongObject  * ) b ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( rem ,  ( PyLongObject  * ) temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( rem  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  PyTuple_New ( 2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* PyTuple_SET_ITEM steals references */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyTuple_SET_ITEM ( result ,  0 ,  ( PyObject  * ) quo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyTuple_SET_ITEM ( result ,  1 ,  ( PyObject  * ) rem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  error : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( quo ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_XDECREF ( rem ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-20 15:57:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . __round__  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ndigits  as  o_ndigits :  object  =  NULL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Rounding  an  Integral  returns  itself .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Rounding  with  an  ndigits  argument  also  returns  an  integer .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2020-07-20 15:57:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int___round___impl ( PyObject  * self ,  PyObject  * o_ndigits )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=954fda6b18875998 input=1614cf23ec9e18c3]*/  
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2020-07-20 15:57:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * temp ,  * result ,  * ndigits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* To round an integer m to the nearest 10**n (n positive), we make use of
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  the  divmod_near  operation ,  defined  by : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    divmod_near ( a ,  b )  =  ( q ,  r ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  where  q  is  the  nearest  integer  to  the  quotient  a  /  b  ( the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  nearest  even  integer  in  the  case  of  a  tie )  and  r  = =  a  -  q  *  b . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Hence  q  *  b  =  a  -  r  is  the  nearest  multiple  of  b  to  a , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  preferring  even  multiples  in  the  case  of  a  tie . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  So  the  nearest  multiple  of  10 * * n  to  m  is : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    m  -  divmod_near ( m ,  10 * * n ) [ 1 ] . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( o_ndigits  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_long ( self ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-28 10:33:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ndigits  =  _PyNumber_Index ( o_ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ndigits  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* if ndigits >= 0 then no rounding is necessary; return self unchanged */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ! _PyLong_IsNegative ( ( PyLongObject  * ) ndigits ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  long_long ( self ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* result = self - divmod_near(self, 10 ** -ndigits)[1] */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    temp  =  long_neg ( ( PyLongObject * ) ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( ndigits ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ndigits  = =  NULL ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    result  =  PyLong_FromLong ( 10L ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( ndigits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    temp  =  long_pow ( result ,  ndigits ,  Py_None ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( ndigits ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( result ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( result  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-06-07 18:47:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    temp  =  _PyLong_DivmodNear ( self ,  result ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( result ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( result  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    temp  =  long_sub ( ( PyLongObject  * ) self , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ( PyLongObject  * ) PyTuple_GET_ITEM ( result ,  1 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( result ,  temp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-28 21:25:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 16:02:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-23 22:07:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . __sizeof__  - >  Py_ssize_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Returns  size  in  memory ,  in  bytes .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  Py_ssize_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int___sizeof___impl ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/  
						 
					
						
							
								
									
										
										
										
											2008-06-04 14:18:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-02-05 10:02:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* using Py_MAX(..., 1) because we always allocate space for at least
 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       one  digit ,  even  though  the  integer  zero  has  a  digit  count  of  0  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits  =  Py_MAX ( _PyLong_DigitCount ( ( PyLongObject  * ) self ) ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-05 10:02:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  Py_TYPE ( self ) - > tp_basicsize  +  Py_TYPE ( self ) - > tp_itemsize  *  ndigits ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-04 14:18:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . bit_length  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Number  of  bits  necessary  to  represent  self  in  binary .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  bin ( 37 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								' 0 b100101 '  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  ( 37 ) . bit_length ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								6  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-17 16:19:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int_bit_length_impl ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=fc1977c9353d6a59 input=e4eb7a587e849a32]*/  
						 
					
						
							
								
									
										
										
										
											2008-12-17 16:19:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyLongObject  * result ,  * x ,  * y ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-08 20:34:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  msd_bits ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    digit  msd ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert ( self  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( self ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ndigits  =  _PyLong_DigitCount ( ( PyLongObject  * ) self ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ndigits  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyLong_FromLong ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    msd  =  ( ( PyLongObject  * ) self ) - > long_value . ob_digit [ ndigits - 1 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-15 14:33:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    msd_bits  =  bit_length_digit ( msd ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ndigits  < =  PY_SSIZE_T_MAX / PyLong_SHIFT ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  PyLong_FromSsize_t ( ( ndigits - 1 ) * PyLong_SHIFT  +  msd_bits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* expression above may overflow; use Python integers instead */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result  =  ( PyLongObject  * ) PyLong_FromSsize_t ( ndigits  -  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  ( PyLongObject  * ) PyLong_FromLong ( PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    y  =  ( PyLongObject  * ) long_mul ( result ,  x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( y  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( result ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    x  =  ( PyLongObject  * ) PyLong_FromLong ( ( long ) msd_bits ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( x  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    y  =  ( PyLongObject  * ) long_add ( result ,  x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( y  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        goto  error ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_SETREF ( result ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( PyObject  * ) result ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-17 16:19:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  error : 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-17 16:19:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								popcount_digit ( digit  d )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2020-06-08 16:30:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // digit can be larger than uint32_t, but only PyLong_SHIFT bits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // of it will be ever used.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-20 19:26:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    static_assert ( PyLong_SHIFT  < =  32 ,  " digit is larger than uint32_t " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-08 16:30:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  _Py_popcount32 ( ( uint32_t ) d ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . bit_count  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Number  of  ones  in  the  binary  representation  of  the  absolute  value  of  self .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Also  known  as  the  population  count .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  bin ( 13 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								' 0 b1101 '  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  ( 13 ) . bit_count ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								3  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int_bit_count_impl ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=2e571970daf1e5c3 input=7e0adef8e8ccdf2e]*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( self  ! =  NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert ( PyLong_Check ( self ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyLongObject  * z  =  ( PyLongObject  * ) self ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-22 14:49:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits  =  _PyLong_DigitCount ( z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_ssize_t  bit_count  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Each digit has up to PyLong_SHIFT ones, so the accumulated bit count
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       from  the  first  PY_SSIZE_T_MAX / PyLong_SHIFT  digits  can ' t  overflow  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       Py_ssize_t .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  ndigits_fast  =  Py_MIN ( ndigits ,  PY_SSIZE_T_MAX / PyLong_SHIFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( Py_ssize_t  i  =  0 ;  i  <  ndigits_fast ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        bit_count  + =  popcount_digit ( z - > long_value . ob_digit [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * result  =  PyLong_FromSsize_t ( bit_count ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( result  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* Use Python integers if bit_count would overflow. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( Py_ssize_t  i  =  ndigits_fast ;  i  <  ndigits ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        PyObject  * x  =  PyLong_FromLong ( popcount_digit ( z - > long_value . ob_digit [ i ] ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( x  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyObject  * y  =  long_add ( ( PyLongObject  * ) result ,  ( PyLongObject  * ) x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_DECREF ( x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( y  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            goto  error ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-22 13:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( result ,  y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  error : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2008-04-19 00:31:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . as_integer_ratio  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-27 22:11:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Return  a  pair  of  integers ,  whose  ratio  is  equal  to  the  original  int .  
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-27 22:11:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The  ratio  is  in  lowest  terms  and  has  a  positive  denominator .  
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  ( 10 ) . as_integer_ratio ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( 10 ,  1 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  ( - 10 ) . as_integer_ratio ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( - 10 ,  1 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  ( 0 ) . as_integer_ratio ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								( 0 ,  1 )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int_as_integer_ratio_impl ( PyObject  * self )  
						 
					
						
							
								
									
										
										
										
											2023-02-27 22:11:28 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic end generated code: output=e60803ae1cc8621a input=384ff1766634bec2]*/  
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-09-14 01:00:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * ratio_tuple ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 00:46:31 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * numerator  =  long_long ( self ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-14 01:00:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( numerator  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-27 00:00:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ratio_tuple  =  PyTuple_Pack ( 2 ,  numerator ,  _PyLong_GetOne ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-14 01:00:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Py_DECREF ( numerator ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ratio_tuple ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . to_bytes  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    length :  Py_ssize_t  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Length  of  bytes  object  to  use .   An  OverflowError  is  raised  if  the 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        integer  is  not  representable  with  the  given  number  of  bytes .   Default 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        is  length  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    byteorder :  unicode ( c_default = " NULL " )  =  " big " 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        The  byte  order  used  to  represent  the  integer .   If  byteorder  is  ' big ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        the  most  significant  byte  is  at  the  beginning  of  the  byte  array .   If 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        byteorder  is  ' little ' ,  the  most  significant  byte  is  at  the  end  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        byte  array .   To  request  the  native  byte  order  of  the  host  system ,  use 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ` sys . byteorder '  as  the  byte  order  value .   Default  is  to  use  ' big ' . 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    signed  as  is_signed :  bool  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Determines  whether  two ' s  complement  is  used  to  represent  the  integer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        If  signed  is  False  and  a  negative  integer  is  given ,  an  OverflowError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        is  raised . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Return  an  array  of  bytes  representing  an  integer .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int_to_bytes_impl ( PyObject  * self ,  Py_ssize_t  length ,  PyObject  * byteorder ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  int  is_signed ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic end generated code: output=89c801df114050a3 input=d42ecfb545039d71]*/  
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  little_endian ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyObject  * bytes ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( byteorder  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        little_endian  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 13:39:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( _PyUnicode_Equal ( byteorder ,  & _Py_ID ( little ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        little_endian  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 13:39:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( _PyUnicode_Equal ( byteorder ,  & _Py_ID ( big ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        little_endian  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " byteorder must be either 'little' or 'big' " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( length  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " length argument must be non-negative " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes  =  PyBytes_FromStringAndSize ( NULL ,  length ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( bytes  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyLong_AsByteArray ( ( PyLongObject  * ) self , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ( unsigned  char  * ) PyBytes_AS_STRING ( bytes ) , 
							 
						 
					
						
							
								
									
										
										
										
											2024-02-12 20:13:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            length ,  little_endian ,  is_signed ,  1 )  <  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_DECREF ( bytes ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ classmethod  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . from_bytes  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes  as  bytes_obj :  object 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Holds  the  array  of  bytes  to  convert .   The  argument  must  either 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        support  the  buffer  protocol  or  be  an  iterable  object  producing  bytes . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Bytes  and  bytearray  are  examples  of  built - in  objects  that  support  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        buffer  protocol . 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    byteorder :  unicode ( c_default = " NULL " )  =  " big " 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        The  byte  order  used  to  represent  the  integer .   If  byteorder  is  ' big ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        the  most  significant  byte  is  at  the  beginning  of  the  byte  array .   If 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        byteorder  is  ' little ' ,  the  most  significant  byte  is  at  the  end  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        byte  array .   To  request  the  native  byte  order  of  the  host  system ,  use 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ` sys . byteorder '  as  the  byte  order  value .   Default  is  to  use  ' big ' . 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    signed  as  is_signed :  bool  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Indicates  whether  two ' s  complement  is  used  to  represent  the  integer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Return  the  integer  represented  by  the  given  array  of  bytes .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int_from_bytes_impl ( PyTypeObject  * type ,  PyObject  * bytes_obj ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    PyObject  * byteorder ,  int  is_signed ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic end generated code: output=efc5d68e31f9314f input=33326dccdd655553]*/  
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int  little_endian ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject  * long_obj ,  * bytes ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 19:55:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( byteorder  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        little_endian  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 13:39:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( _PyUnicode_Equal ( byteorder ,  & _Py_ID ( little ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        little_endian  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 13:39:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else  if  ( _PyUnicode_Equal ( byteorder ,  & _Py_ID ( big ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        little_endian  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyErr_SetString ( PyExc_ValueError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " byteorder must be either 'little' or 'big' " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bytes  =  PyObject_Bytes ( bytes_obj ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( bytes  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_obj  =  _PyLong_FromByteArray ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( unsigned  char  * ) PyBytes_AS_STRING ( bytes ) ,  Py_SIZE ( bytes ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        little_endian ,  is_signed ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_DECREF ( bytes ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-05 15:02:23 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( long_obj  ! =  NULL  & &  type  ! =  & PyLong_Type )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-11 17:46:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_SETREF ( long_obj ,  PyObject_CallOneArg ( ( PyObject  * ) type ,  long_obj ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_obj ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-09 20:35:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_long_meth ( PyObject  * self ,  PyObject  * Py_UNUSED ( ignored ) )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  long_long ( self ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-12-23 20:30:27 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*[clinic input]
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int . is_integer  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Returns  True .  Exists  for  duck  type  compatibility  with  float . is_integer .  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ clinic  start  generated  code ] */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int_is_integer_impl ( PyObject  * self )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*[clinic end generated code: output=90f8e794ce5430ef input=7e41c4d4416e05f2]*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_RETURN_TRUE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-11-02 15:07:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								long_vectorcall ( PyObject  * type ,  PyObject  *  const * args ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 size_t  nargsf ,  PyObject  * kwnames ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_ssize_t  nargs  =  PyVectorcall_NARGS ( nargsf ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( kwnames  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        PyThreadState  * tstate  =  PyThreadState_GET ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  _PyObject_MakeTpCall ( tstate ,  type ,  args ,  nargs ,  kwnames ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    switch  ( nargs )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  _PyLong_GetZero ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  PyNumber_Long ( args [ 0 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  2 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  long_new_impl ( _PyType_CAST ( type ) ,  args [ 0 ] ,  args [ 1 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  PyErr_Format ( PyExc_TypeError , 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-18 20:27:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                " int expected at most 2 arguments, got %zd " , 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-02 15:07:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                nargs ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 17:58:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyMethodDef  long_methods [ ]  =  {  
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " conjugate " ,        long_long_meth ,  METH_NOARGS , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " Returns self, the complex conjugate of any int. " } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT_BIT_LENGTH_METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:28:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT_BIT_COUNT_METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT_TO_BYTES_METHODDEF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    INT_FROM_BYTES_METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-13 23:56:23 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT_AS_INTEGER_RATIO_METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " __trunc__ " ,        long_long_meth ,  METH_NOARGS , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " Truncating an Integral returns itself. " } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " __floor__ " ,        long_long_meth ,  METH_NOARGS , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " Flooring an Integral returns itself. " } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " __ceil__ " ,         long_long_meth ,  METH_NOARGS , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " Ceiling of an Integral returns itself. " } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-20 15:57:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT___ROUND___METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-01 23:12:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT___GETNEWARGS___METHODDEF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    INT___FORMAT___METHODDEF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    INT___SIZEOF___METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-23 20:30:27 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    INT_IS_INTEGER_METHODDEF 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { NULL ,               NULL }            /* sentinel */ 
							 
						 
					
						
							
								
									
										
										
										
											2003-01-29 17:58:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyGetSetDef  long_getset [ ]  =  {  
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " real " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     ( getter ) long_long_meth ,  ( setter ) NULL , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " the real part of a complex number " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     NULL } , 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " imag " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     long_get0 ,  ( setter ) NULL , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " the imaginary part of a complex number " , 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     NULL } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { " numerator " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     ( getter ) long_long_meth ,  ( setter ) NULL , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " the numerator of a rational number in lowest terms " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     NULL } , 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " denominator " , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     long_get1 ,  ( setter ) NULL , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     " the denominator of a rational number in lowest terms " , 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-02 17:57:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     NULL } , 
							 
						 
					
						
							
								
									
										
										
										
											2007-08-01 18:08:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { NULL }   /* Sentinel */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-06-13 20:33:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyDoc_STRVAR ( long_doc ,  
						 
					
						
							
								
									
										
										
										
											2017-03-08 19:29:01 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" int([x]) -> integer \n \
  
						 
					
						
							
								
									
										
										
										
											2012-10-07 14:48:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int ( x ,  base = 10 )  - >  integer \ n \ 
						 
					
						
							
								
									
										
										
										
											2001-08-02 04:15:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								\ n \ 
						 
					
						
							
								
									
										
										
										
											2012-10-07 14:48:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Convert  a  number  or  string  to  an  integer ,  or  return  0  if  no  arguments \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								are  given .   If  x  is  a  number ,  return  x . __int__ ( ) .   For  floating  point \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								numbers ,  this  truncates  towards  zero . \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If  x  is  not  a  number  or  if  base  is  given ,  then  x  must  be  a  string , \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bytes ,  or  bytearray  instance  representing  an  integer  literal  in  the \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								given  base .   The  literal  can  be  preceded  by  ' + '  or  ' - '  and  be  surrounded \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								by  whitespace .   The  base  defaults  to  10.   Valid  bases  are  0  and  2 - 36. \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Base  0  means  to  interpret  the  base  from  the  string  as  an  integer  literal . \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								> > >  int ( ' 0 b100 ' ,  base = 0 ) \ n \ 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								4 " );  
						 
					
						
							
								
									
										
										
										
											2001-08-02 04:15:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyNumberMethods  long_as_number  =  {  
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( binaryfunc ) long_add ,        /*nb_add*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( binaryfunc ) long_sub ,        /*nb_subtract*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( binaryfunc ) long_mul ,        /*nb_multiply*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_mod ,                    /*nb_remainder*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_divmod ,                 /*nb_divmod*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_pow ,                    /*nb_power*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( unaryfunc ) long_neg ,         /*nb_negative*/ 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-30 15:35:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_long ,                   /*tp_positive*/ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( unaryfunc ) long_abs ,         /*tp_absolute*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( inquiry ) long_bool ,          /*tp_bool*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( unaryfunc ) long_invert ,      /*nb_invert*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_lshift ,                 /*nb_lshift*/ 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 14:14:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_rshift ,                 /*nb_rshift*/ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_and ,                    /*nb_and*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_xor ,                    /*nb_xor*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_or ,                     /*nb_or*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_long ,                   /*nb_int*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /*nb_reserved*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_float ,                  /*nb_float*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_add */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_subtract */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_multiply */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_remainder */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_power */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_lshift */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_rshift */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_and */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_xor */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_or */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_div ,                    /* nb_floor_divide */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_true_divide ,            /* nb_true_divide */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_floor_divide */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                           /* nb_inplace_true_divide */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_long ,                   /* nb_index */ 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											1997-05-02 03:12:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								PyTypeObject  PyLong_Type  =  {  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyVarObject_HEAD_INIT ( & PyType_Type ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " int " ,                                       /* tp_name */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 10:03:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    offsetof ( PyLongObject ,  long_value . ob_digit ) ,   /* tp_basicsize */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sizeof ( digit ) ,                               /* tp_itemsize */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-22 15:39:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_dealloc ,                                /* tp_dealloc */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 04:13:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    0 ,                                           /* tp_vectorcall_offset */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    0 ,                                           /* tp_getattr */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_setattr */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 04:13:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    0 ,                                           /* tp_as_async */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_to_decimal_string ,                      /* tp_repr */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    & long_as_number ,                             /* tp_as_number */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_as_sequence */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_as_mapping */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ( hashfunc ) long_hash ,                         /* tp_hash */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_call */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-06 22:29:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    0 ,                                           /* tp_str */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject_GenericGetAttr ,                     /* tp_getattro */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_setattro */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_as_buffer */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Py_TPFLAGS_DEFAULT  |  Py_TPFLAGS_BASETYPE  | 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-26 14:51:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Py_TPFLAGS_LONG_SUBCLASS  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        _Py_TPFLAGS_MATCH_SELF ,                /* tp_flags */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    long_doc ,                                    /* tp_doc */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_traverse */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_clear */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_richcompare ,                            /* tp_richcompare */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_weaklistoffset */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_iter */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_iternext */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_methods ,                                /* tp_methods */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_members */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_getset ,                                 /* tp_getset */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_base */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_dict */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_descr_get */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_descr_set */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_dictoffset */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_init */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0 ,                                           /* tp_alloc */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    long_new ,                                    /* tp_new */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 14:02:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject_Free ,                               /* tp_free */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-02 15:07:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    . tp_vectorcall  =  long_vectorcall , 
							 
						 
					
						
							
								
									
										
										
										
											1991-05-05 20:09:44 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-18 20:06:12 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  PyTypeObject  Int_InfoType ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyDoc_STRVAR ( int_info__doc__ ,  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								" sys.int_info \n \
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								\ n \ 
						 
					
						
							
								
									
										
										
										
											2019-09-11 07:17:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								A  named  tuple  that  holds  information  about  Python ' s \ n \ 
						 
					
						
							
								
									
										
										
										
											2009-03-18 20:06:12 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								internal  representation  of  integers .   The  attributes  are  read  only . " );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyStructSequence_Field  int_info_fields [ ]  =  {  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " bits_per_digit " ,  " size of a digit in bits " } , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-10 21:27:53 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " sizeof_digit " ,  " size in bytes of the C type used to represent a digit " } , 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { " default_max_str_digits " ,  " maximum string conversion digits limitation " } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { " str_digits_check_threshold " ,  " minimum positive value for int_max_str_digits " } , 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { NULL ,  NULL } 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-18 20:06:12 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  PyStructSequence_Desc  int_info_desc  =  {  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " sys.int_info " ,    /* name */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int_info__doc__ ,   /* doc */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int_info_fields ,   /* fields */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    4                  /* number of fields */ 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-18 20:06:12 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyObject  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyLong_GetInfo ( void )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    PyObject *  int_info ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  field  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int_info  =  PyStructSequence_New ( & Int_InfoType ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( int_info  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyStructSequence_SET_ITEM ( int_info ,  field + + , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              PyLong_FromLong ( PyLong_SHIFT ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyStructSequence_SET_ITEM ( int_info ,  field + + , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              PyLong_FromLong ( sizeof ( digit ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-02 09:35:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  following  two  fields  were  added  after  investigating  uses  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  sys . int_info  in  the  wild :  Exceedingly  rarely  used .  The  ONLY  use  found  was 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  numba  using  sys . int_info . bits_per_digit  as  attribute  access  rather  than 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  sequence  unpacking .  Cython  and  sympy  also  refer  to  sys . int_info  but  only 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  as  info  for  debugging .  No  concern  about  adding  these  in  a  backport . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyStructSequence_SET_ITEM ( int_info ,  field + + , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              PyLong_FromLong ( _PY_LONG_DEFAULT_MAX_STR_DIGITS ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PyStructSequence_SET_ITEM ( int_info ,  field + + , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              PyLong_FromLong ( _PY_LONG_MAX_STR_DIGITS_THRESHOLD ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-09 15:52:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( PyErr_Occurred ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Py_CLEAR ( int_info ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  int_info ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-18 20:06:12 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-09 12:59:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* runtime lifecycle */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyStatus  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_InitTypes ( PyInterpreterState  * interp )  
						 
					
						
							
								
									
										
										
										
											2021-04-02 15:28:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* initialize int_info */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-01 19:36:00 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( _PyStructSequence_InitBuiltin ( interp ,  & Int_InfoType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                      & int_info_desc )  <  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2023-04-27 16:19:43 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  _PyStatus_ERR ( " can't init int info type " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-22 22:24:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-09 12:59:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyStatus_OK ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-14 03:31:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-01-21 01:42:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_PyLong_FiniTypes ( PyInterpreterState  * interp )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-05-01 19:36:00 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _PyStructSequence_FiniBuiltin ( interp ,  & Int_InfoType ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-21 01:42:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2023-05-21 14:45:48 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# undef PyUnstable_Long_IsCompact 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyUnstable_Long_IsCompact ( const  PyLongObject *  op )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_IsCompact ( op ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# undef PyUnstable_Long_CompactValue 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Py_ssize_t  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								PyUnstable_Long_CompactValue ( const  PyLongObject *  op )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  _PyLong_CompactValue ( op ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}